[darwinbuild-changes] [786] trunk
source_changes at macosforge.org
source_changes at macosforge.org
Mon Mar 15 14:01:43 PDT 2010
Revision: 786
http://trac.macosforge.org/projects/darwinbuild/changeset/786
Author: wsiegrist at apple.com
Date: 2010-03-15 14:01:42 -0700 (Mon, 15 Mar 2010)
Log Message:
-----------
Merge PR-7748469
Modified Paths:
--------------
trunk/darwinup/DB.cpp
trunk/darwinup/DB.h
trunk/darwinup/Database.cpp
trunk/darwinup/Database.h
trunk/darwinup/Depot.cpp
trunk/darwinup/Table.cpp
trunk/darwinup/Utils.cpp
trunk/darwinup/main.cpp
trunk/testing/darwinup/run-tests.sh
Property Changed:
----------------
trunk/
trunk/darwinbuild/darwinbuild.in
trunk/darwinbuild/darwinmaster.in
trunk/darwinbuild/installXcode.in
trunk/darwinbuild/packageRoots.in
trunk/darwinbuild/thinPackages.in
Property changes on: trunk
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/PR-4841388:399-419
/branches/PR-6358021:442-443
/branches/PR-6392966:423-427
/branches/PR-6398060:433-434
/branches/PR-6493844:460-461
/branches/PR-6497694:466-468,471
/branches/PR-6634286:632-650
/branches/PR-6688645:479-490
/branches/PR-6722857:495-499
/branches/PR-6729491:655-664
/branches/PR-7250612:635-650
/branches/PR-7341154:682-694
/branches/PR-7431723:660-664
/branches/PR-7461534:650-664
/branches/PR-7482850:670-671
/branches/PR-7489777:676-731
/branches/PR-7529688:692-694
/branches/PR-7593824:739-772
/branches/PR-7598640:703-731
+ /branches/PR-4841388:399-419
/branches/PR-6358021:442-443
/branches/PR-6392966:423-427
/branches/PR-6398060:433-434
/branches/PR-6493844:460-461
/branches/PR-6497694:466-468,471
/branches/PR-6634286:632-650
/branches/PR-6688645:479-490
/branches/PR-6722857:495-499
/branches/PR-6729491:655-664
/branches/PR-7250612:635-650
/branches/PR-7341154:682-694
/branches/PR-7431723:660-664
/branches/PR-7461534:650-664
/branches/PR-7482850:670-671
/branches/PR-7489777:676-731
/branches/PR-7529688:692-694
/branches/PR-7593824:739-772
/branches/PR-7598640:703-731
/branches/PR-7748469:777-785
Property changes on: trunk/darwinbuild/darwinbuild.in
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/PR-4841388/darwinbuild/darwinbuild:399-419
/branches/PR-6358021/darwinbuild/darwinbuild:442-443
/branches/PR-6392966/darwinbuild/darwinbuild:423-427
/branches/PR-6398060/darwinbuild/darwinbuild:433-434
/branches/PR-6493844/darwinbuild/darwinbuild.in:460-461
/branches/PR-6497694/darwinbuild/darwinbuild.in:466-468,471
/branches/PR-6634286/darwinbuild/darwinbuild.in:632-650
/branches/PR-6688645/darwinbuild/darwinbuild.in:479-490
/branches/PR-6722857/darwinbuild/darwinbuild.in:495-499
/branches/PR-6729491/darwinbuild/darwinbuild.in:655-664
/branches/PR-7250612/darwinbuild/darwinbuild.in:635-650
/branches/PR-7341154/darwinbuild/darwinbuild.in:682-694
/branches/PR-7431723/darwinbuild/darwinbuild.in:660-664
/branches/PR-7461534/darwinbuild/darwinbuild.in:650-664
/branches/PR-7489777/darwinbuild/darwinbuild.in:676-731
/branches/PR-7529688/darwinbuild/darwinbuild.in:692-694
/branches/PR-7593824/darwinbuild/darwinbuild.in:739-772
/branches/PR-7598640/darwinbuild/darwinbuild.in:703-731
+ /branches/PR-4841388/darwinbuild/darwinbuild:399-419
/branches/PR-6358021/darwinbuild/darwinbuild:442-443
/branches/PR-6392966/darwinbuild/darwinbuild:423-427
/branches/PR-6398060/darwinbuild/darwinbuild:433-434
/branches/PR-6493844/darwinbuild/darwinbuild.in:460-461
/branches/PR-6497694/darwinbuild/darwinbuild.in:466-468,471
/branches/PR-6634286/darwinbuild/darwinbuild.in:632-650
/branches/PR-6688645/darwinbuild/darwinbuild.in:479-490
/branches/PR-6722857/darwinbuild/darwinbuild.in:495-499
/branches/PR-6729491/darwinbuild/darwinbuild.in:655-664
/branches/PR-7250612/darwinbuild/darwinbuild.in:635-650
/branches/PR-7341154/darwinbuild/darwinbuild.in:682-694
/branches/PR-7431723/darwinbuild/darwinbuild.in:660-664
/branches/PR-7461534/darwinbuild/darwinbuild.in:650-664
/branches/PR-7489777/darwinbuild/darwinbuild.in:676-731
/branches/PR-7529688/darwinbuild/darwinbuild.in:692-694
/branches/PR-7593824/darwinbuild/darwinbuild.in:739-772
/branches/PR-7598640/darwinbuild/darwinbuild.in:703-731
/branches/PR-7748469/darwinbuild/darwinbuild.in:777-785
Property changes on: trunk/darwinbuild/darwinmaster.in
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/PR-4841388/darwinbuild/darwinmaster.sh:399-419
/branches/PR-6358021/darwinbuild/darwinmaster.sh:442-443
/branches/PR-6392966/darwinbuild/darwinmaster.sh:423-427
/branches/PR-6398060/darwinbuild/darwinmaster.sh:433-434
/branches/PR-6493844/darwinbuild/darwinmaster.sh.in:460-461
/branches/PR-6497694/darwinbuild/darwinmaster.sh.in:466-468,471
/branches/PR-6634286/darwinbuild/darwinmaster.in:632-650
/branches/PR-6688645/darwinbuild/darwinmaster.sh.in:479-490
/branches/PR-6722857/darwinbuild/darwinmaster.sh.in:495-499
/branches/PR-6729491/darwinbuild/darwinmaster.in:655-664
/branches/PR-7250612/darwinbuild/darwinmaster.in:635-650
/branches/PR-7341154/darwinbuild/darwinmaster.in:682-694
/branches/PR-7431723/darwinbuild/darwinmaster.in:660-664
/branches/PR-7461534/darwinbuild/darwinmaster.in:650-664
/branches/PR-7489777/darwinbuild/darwinmaster.in:676-731
/branches/PR-7529688/darwinbuild/darwinmaster.in:692-694
/branches/PR-7593824/darwinbuild/darwinmaster.in:739-772
/branches/PR-7598640/darwinbuild/darwinmaster.in:703-731
+ /branches/PR-4841388/darwinbuild/darwinmaster.sh:399-419
/branches/PR-6358021/darwinbuild/darwinmaster.sh:442-443
/branches/PR-6392966/darwinbuild/darwinmaster.sh:423-427
/branches/PR-6398060/darwinbuild/darwinmaster.sh:433-434
/branches/PR-6493844/darwinbuild/darwinmaster.sh.in:460-461
/branches/PR-6497694/darwinbuild/darwinmaster.sh.in:466-468,471
/branches/PR-6634286/darwinbuild/darwinmaster.in:632-650
/branches/PR-6688645/darwinbuild/darwinmaster.sh.in:479-490
/branches/PR-6722857/darwinbuild/darwinmaster.sh.in:495-499
/branches/PR-6729491/darwinbuild/darwinmaster.in:655-664
/branches/PR-7250612/darwinbuild/darwinmaster.in:635-650
/branches/PR-7341154/darwinbuild/darwinmaster.in:682-694
/branches/PR-7431723/darwinbuild/darwinmaster.in:660-664
/branches/PR-7461534/darwinbuild/darwinmaster.in:650-664
/branches/PR-7489777/darwinbuild/darwinmaster.in:676-731
/branches/PR-7529688/darwinbuild/darwinmaster.in:692-694
/branches/PR-7593824/darwinbuild/darwinmaster.in:739-772
/branches/PR-7598640/darwinbuild/darwinmaster.in:703-731
/branches/PR-7748469/darwinbuild/darwinmaster.in:777-785
Property changes on: trunk/darwinbuild/installXcode.in
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/PR-4841388/darwinbuild/installXcode:399-419
/branches/PR-6358021/darwinbuild/installXcode:442-443
/branches/PR-6392966/darwinbuild/installXcode:423-427
/branches/PR-6398060/darwinbuild/installXcode:433-434
/branches/PR-6493844/darwinbuild/installXcode.in:460-461
/branches/PR-6497694/darwinbuild/installXcode.in:466-468,471
/branches/PR-6634286/darwinbuild/installXcode.in:632-650
/branches/PR-6688645/darwinbuild/installXcode.in:479-490
/branches/PR-6722857/darwinbuild/installXcode.in:495-499
/branches/PR-6729491/darwinbuild/installXcode.in:655-664
/branches/PR-7250612/darwinbuild/installXcode.in:635-650
/branches/PR-7341154/darwinbuild/installXcode.in:682-694
/branches/PR-7431723/darwinbuild/installXcode.in:660-664
/branches/PR-7461534/darwinbuild/installXcode.in:650-664
/branches/PR-7489777/darwinbuild/installXcode.in:676-731
/branches/PR-7529688/darwinbuild/installXcode.in:692-694
/branches/PR-7593824/darwinbuild/installXcode.in:739-772
/branches/PR-7598640/darwinbuild/installXcode.in:703-731
+ /branches/PR-4841388/darwinbuild/installXcode:399-419
/branches/PR-6358021/darwinbuild/installXcode:442-443
/branches/PR-6392966/darwinbuild/installXcode:423-427
/branches/PR-6398060/darwinbuild/installXcode:433-434
/branches/PR-6493844/darwinbuild/installXcode.in:460-461
/branches/PR-6497694/darwinbuild/installXcode.in:466-468,471
/branches/PR-6634286/darwinbuild/installXcode.in:632-650
/branches/PR-6688645/darwinbuild/installXcode.in:479-490
/branches/PR-6722857/darwinbuild/installXcode.in:495-499
/branches/PR-6729491/darwinbuild/installXcode.in:655-664
/branches/PR-7250612/darwinbuild/installXcode.in:635-650
/branches/PR-7341154/darwinbuild/installXcode.in:682-694
/branches/PR-7431723/darwinbuild/installXcode.in:660-664
/branches/PR-7461534/darwinbuild/installXcode.in:650-664
/branches/PR-7489777/darwinbuild/installXcode.in:676-731
/branches/PR-7529688/darwinbuild/installXcode.in:692-694
/branches/PR-7593824/darwinbuild/installXcode.in:739-772
/branches/PR-7598640/darwinbuild/installXcode.in:703-731
/branches/PR-7748469/darwinbuild/installXcode.in:777-785
Property changes on: trunk/darwinbuild/packageRoots.in
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/PR-4841388/darwinbuild/packageRoots.sh:399-419
/branches/PR-6358021/darwinbuild/packageRoots.sh:442-443
/branches/PR-6392966/darwinbuild/packageRoots.sh:423-427
/branches/PR-6398060/darwinbuild/packageRoots.sh:433-434
/branches/PR-6493844/darwinbuild/packageRoots.sh.in:460-461
/branches/PR-6497694/darwinbuild/packageRoots.sh.in:466-468,471
/branches/PR-6634286/darwinbuild/packageRoots.in:632-650
/branches/PR-6688645/darwinbuild/packageRoots.sh.in:479-490
/branches/PR-6722857/darwinbuild/packageRoots.sh.in:495-499
/branches/PR-6729491/darwinbuild/packageRoots.in:655-664
/branches/PR-7250612/darwinbuild/packageRoots.in:635-650
/branches/PR-7341154/darwinbuild/packageRoots.in:682-694
/branches/PR-7431723/darwinbuild/packageRoots.in:660-664
/branches/PR-7461534/darwinbuild/packageRoots.in:650-664
/branches/PR-7489777/darwinbuild/packageRoots.in:676-731
/branches/PR-7529688/darwinbuild/packageRoots.in:692-694
/branches/PR-7593824/darwinbuild/packageRoots.in:739-772
/branches/PR-7598640/darwinbuild/packageRoots.in:703-731
+ /branches/PR-4841388/darwinbuild/packageRoots.sh:399-419
/branches/PR-6358021/darwinbuild/packageRoots.sh:442-443
/branches/PR-6392966/darwinbuild/packageRoots.sh:423-427
/branches/PR-6398060/darwinbuild/packageRoots.sh:433-434
/branches/PR-6493844/darwinbuild/packageRoots.sh.in:460-461
/branches/PR-6497694/darwinbuild/packageRoots.sh.in:466-468,471
/branches/PR-6634286/darwinbuild/packageRoots.in:632-650
/branches/PR-6688645/darwinbuild/packageRoots.sh.in:479-490
/branches/PR-6722857/darwinbuild/packageRoots.sh.in:495-499
/branches/PR-6729491/darwinbuild/packageRoots.in:655-664
/branches/PR-7250612/darwinbuild/packageRoots.in:635-650
/branches/PR-7341154/darwinbuild/packageRoots.in:682-694
/branches/PR-7431723/darwinbuild/packageRoots.in:660-664
/branches/PR-7461534/darwinbuild/packageRoots.in:650-664
/branches/PR-7489777/darwinbuild/packageRoots.in:676-731
/branches/PR-7529688/darwinbuild/packageRoots.in:692-694
/branches/PR-7593824/darwinbuild/packageRoots.in:739-772
/branches/PR-7598640/darwinbuild/packageRoots.in:703-731
/branches/PR-7748469/darwinbuild/packageRoots.in:777-785
Property changes on: trunk/darwinbuild/thinPackages.in
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/PR-4841388/darwinbuild/thinPackages.sh:399-419
/branches/PR-6358021/darwinbuild/thinPackages.sh:442-443
/branches/PR-6392966/darwinbuild/thinPackages.sh:423-427
/branches/PR-6398060/darwinbuild/thinPackages.sh:433-434
/branches/PR-6493844/darwinbuild/thinPackages.sh.in:460-461
/branches/PR-6497694/darwinbuild/thinPackages.sh.in:466-468,471
/branches/PR-6634286/darwinbuild/thinPackages.in:632-650
/branches/PR-6688645/darwinbuild/thinPackages.sh.in:479-490
/branches/PR-6722857/darwinbuild/thinPackages.sh.in:495-499
/branches/PR-6729491/darwinbuild/thinPackages.in:655-664
/branches/PR-7250612/darwinbuild/thinPackages.in:635-650
/branches/PR-7341154/darwinbuild/thinPackages.in:682-694
/branches/PR-7431723/darwinbuild/thinPackages.in:660-664
/branches/PR-7461534/darwinbuild/thinPackages.in:650-664
/branches/PR-7489777/darwinbuild/thinPackages.in:676-731
/branches/PR-7529688/darwinbuild/thinPackages.in:692-694
/branches/PR-7593824/darwinbuild/thinPackages.in:739-772
/branches/PR-7598640/darwinbuild/thinPackages.in:703-731
+ /branches/PR-4841388/darwinbuild/thinPackages.sh:399-419
/branches/PR-6358021/darwinbuild/thinPackages.sh:442-443
/branches/PR-6392966/darwinbuild/thinPackages.sh:423-427
/branches/PR-6398060/darwinbuild/thinPackages.sh:433-434
/branches/PR-6493844/darwinbuild/thinPackages.sh.in:460-461
/branches/PR-6497694/darwinbuild/thinPackages.sh.in:466-468,471
/branches/PR-6634286/darwinbuild/thinPackages.in:632-650
/branches/PR-6688645/darwinbuild/thinPackages.sh.in:479-490
/branches/PR-6722857/darwinbuild/thinPackages.sh.in:495-499
/branches/PR-6729491/darwinbuild/thinPackages.in:655-664
/branches/PR-7250612/darwinbuild/thinPackages.in:635-650
/branches/PR-7341154/darwinbuild/thinPackages.in:682-694
/branches/PR-7431723/darwinbuild/thinPackages.in:660-664
/branches/PR-7461534/darwinbuild/thinPackages.in:650-664
/branches/PR-7489777/darwinbuild/thinPackages.in:676-731
/branches/PR-7529688/darwinbuild/thinPackages.in:692-694
/branches/PR-7593824/darwinbuild/thinPackages.in:739-772
/branches/PR-7598640/darwinbuild/thinPackages.in:703-731
/branches/PR-7748469/darwinbuild/thinPackages.in:777-785
Modified: trunk/darwinup/DB.cpp
===================================================================
--- trunk/darwinup/DB.cpp 2010-03-15 15:57:36 UTC (rev 785)
+++ trunk/darwinup/DB.cpp 2010-03-15 21:01:42 UTC (rev 786)
@@ -311,7 +311,7 @@
this->m_archives_table,
1,
this->m_archives_table->column(2), // name
- '!', "<Rollback>");
+ '!', "<Rollback>");
}
if (res != SQLITE_ROW) {
fprintf(stderr, "Error: unable to count archives: %d \n", res);
@@ -386,12 +386,18 @@
return DB_ERROR;
}
-int DarwinupDatabase::get_files(uint8_t*** data, uint32_t* count, Archive* archive) {
- int res = this->get_all_ordered("files__archive",
+int DarwinupDatabase::get_files(uint8_t*** data, uint32_t* count, Archive* archive, bool reverse) {
+ int order = ORDER_BY_ASC;
+ const char* name = "files_archive";
+ if (reverse) {
+ order = ORDER_BY_DESC;
+ name = "files_archive_reverse";
+ }
+ int res = this->get_all_ordered(name,
data, count,
this->m_files_table,
this->m_files_table->column(8), // order by path
- ORDER_BY_ASC,
+ order,
1,
this->m_files_table->column(1),
'=', archive->serial());
@@ -441,7 +447,7 @@
ORDER_BY_DESC,
1,
this->m_archives_table->column(2), // name
- '!', (include_rollbacks ? "" : "<Rollback>") );
+ '!', (include_rollbacks ? "" : "<Rollback>"));
if ((res == SQLITE_DONE) && *count) return (DB_OK | DB_FOUND);
if (res == SQLITE_DONE) return DB_OK;
Modified: trunk/darwinup/DB.h
===================================================================
--- trunk/darwinup/DB.h 2010-03-15 15:57:36 UTC (rev 785)
+++ trunk/darwinup/DB.h 2010-03-15 21:01:42 UTC (rev 786)
@@ -87,7 +87,7 @@
int get_file_serials(uint64_t** serials, uint32_t* count);
int get_file_serial_from_archive(Archive* archive, const char* path,
uint64_t** serial);
- int get_files(uint8_t*** data, uint32_t* count, Archive* archive);
+ int get_files(uint8_t*** data, uint32_t* count, Archive* archive, bool reverse);
int file_offset(int column);
int update_file(uint64_t serial, Archive* archive, uint32_t info, mode_t mode,
uid_t uid, gid_t gid, Digest* digest, const char* path);
Modified: trunk/darwinup/Database.cpp
===================================================================
--- trunk/darwinup/Database.cpp 2010-03-15 15:57:36 UTC (rev 785)
+++ trunk/darwinup/Database.cpp 2010-03-15 21:01:42 UTC (rev 786)
@@ -553,7 +553,7 @@
char* error;
if (this->m_db) {
char *query = sqlite3_vmprintf(fmt, args);
- res = sqlite3_exec(this->m_db, query, NULL, NULL, &error);
+ res = sqlite3_exec(this->m_db, query, NULL, NULL, &error);
sqlite3_free(query);
} else {
fprintf(stderr, "Error: database not open.\n");
@@ -562,7 +562,7 @@
va_end(args);
if (error) {
strlcpy(m_error, error, m_error_size);
- fprintf(stderr, "Error: sql(): %s \n", m_error);
+ fprintf(stderr, "Error: sql_once(): %s \n", m_error);
fprintf(stderr, "Error: fmt: %s \n", fmt);
sqlite3_free(error);
}
@@ -593,7 +593,8 @@
}
int Database::execute(sqlite3_stmt* stmt) {
- int res = sqlite3_step(stmt);
+ int res = SQLITE_OK;
+ res = sqlite3_step(stmt);
if (res == SQLITE_DONE) {
res = SQLITE_OK;
} else {
@@ -770,9 +771,10 @@
}
bool Database::has_information_table() {
- int res = sqlite3_exec(this->m_db,
- "SELECT count(*) FROM database_information;",
- NULL, NULL, NULL);
+ int res = SQLITE_OK;
+ res = sqlite3_exec(this->m_db,
+ "SELECT count(*) FROM database_information;",
+ NULL, NULL, NULL);
return res == SQLITE_OK;
}
@@ -849,7 +851,8 @@
* were written to output
*/
int Database::step_once(sqlite3_stmt* stmt, uint8_t* output, uint32_t* used) {
- int res = sqlite3_step(stmt);
+ int res = SQLITE_OK;
+ res = sqlite3_step(stmt);
uint8_t* current = output;
if (used) *used = 0;
if (res == SQLITE_ROW) {
Modified: trunk/darwinup/Database.h
===================================================================
--- trunk/darwinup/Database.h 2010-03-15 15:57:36 UTC (rev 785)
+++ trunk/darwinup/Database.h 2010-03-15 21:01:42 UTC (rev 786)
@@ -83,7 +83,29 @@
#define ADD_BLOB(table, name) \
assert(table->add_column(new Column(name, TYPE_BLOB), this->schema_version())==0);
+// retry an operation a few times if we hit a lock
+#define __retry_if_locked(operation) \
+ do { \
+ extern uint32_t verbosity; \
+ fprintf(stderr, "retry: verbosity %u \n", verbosity); \
+ res = operation; \
+ fprintf(stderr, "retry: initial res %d \n", res); \
+ if (res == 5 || res == 6) { \
+ fprintf(stderr, "retry: locked \n"); \
+ int _num_tries = 3; \
+ while (_num_tries--) { \
+ fprintf(stderr, "retry: tries left %d \n", _num_tries); \
+ if (verbosity) fprintf(stdout, "Database is locked, " \
+ "trying again in 1 second...\n"); \
+ sleep(1); \
+ res = operation; \
+ fprintf(stderr, "retry: res %d \n", res); \
+ } \
+ if (verbosity) fprintf(stdout, "Database is still locked, giving up.\n"); \
+ } \
+ } while (0);
+
/**
*
* Generic sqlite abstraction
Modified: trunk/darwinup/Depot.cpp
===================================================================
--- trunk/darwinup/Depot.cpp 2010-03-15 15:57:36 UTC (rev 785)
+++ trunk/darwinup/Depot.cpp 2010-03-15 21:01:42 UTC (rev 786)
@@ -145,17 +145,21 @@
if (writable) {
uid_t uid = getuid();
if (uid) {
- fprintf(stderr, "You must be root to perform that operation.\n");
+ fprintf(stdout, "You must be root to perform that operation.\n");
exit(3);
}
+
res = this->create_storage();
if (res) return res;
- res = this->lock(LOCK_SH);
- if (res) return res;
- m_is_locked = 1;
- res = build_number_for_path(&m_build, m_prefix);
+
+ build_number_for_path(&m_build, m_prefix);
}
+ // take an exclusive lock
+ res = this->lock(LOCK_EX);
+ if (res) return res;
+ m_is_locked = 1;
+
struct stat sb;
res = stat(m_database_path, &sb);
if (!writable && res == -1 && (errno == ENOENT || errno == ENOTDIR)) {
@@ -324,6 +328,30 @@
return c;
}
+struct InstallContext {
+ InstallContext(Depot* d, Archive* a) {
+ depot = d;
+ archive = a;
+ files_modified = 0;
+ files_added = 0;
+ files_removed = 0;
+ files_to_remove = new SerialSet();
+ reverse_files = false;
+ }
+
+ ~InstallContext() {
+ delete files_to_remove;
+ }
+
+ Depot* depot;
+ Archive* archive;
+ uint64_t files_modified;
+ uint64_t files_added;
+ uint64_t files_removed;
+ SerialSet* files_to_remove; // for uninstall
+ bool reverse_files; // for uninstall
+};
+
int Depot::iterate_archives(ArchiveIteratorFunc func, void* context) {
int res = 0;
uint32_t count = 0;
@@ -341,7 +369,8 @@
int res = DB_OK;
uint8_t** filelist;
uint32_t count;
- res = this->m_db->get_files(&filelist, &count, archive);
+ bool reverse = ((InstallContext*)context)->reverse_files;
+ res = this->m_db->get_files(&filelist, &count, archive, reverse);
if (FOUND(res)) {
for (uint32_t i=0; i < count; i++) {
File* file = this->m_db->make_file(filelist[i]);
@@ -529,7 +558,7 @@
}
}
- fprintf(stderr, "%c %s\n", state, file->path());
+ fprintf(stdout, "%c %s\n", state, file->path());
if (!dryrun) res = this->insert(archive, file);
assert(res == 0);
if (preceding && preceding != actual) delete preceding;
@@ -542,30 +571,6 @@
return res;
}
-
-
-struct InstallContext {
- InstallContext(Depot* d, Archive* a) {
- depot = d;
- archive = a;
- files_modified = 0;
- files_added = 0;
- files_removed = 0;
- files_to_remove = new SerialSet();
- }
-
- ~InstallContext() {
- delete files_to_remove;
- }
-
- Depot* depot;
- Archive* archive;
- uint64_t files_modified;
- uint64_t files_added;
- uint64_t files_removed;
- SerialSet* files_to_remove; // for uninstall
-};
-
int Depot::backup_file(File* file, void* ctx) {
InstallContext* context = (InstallContext*)ctx;
int res = 0;
@@ -642,6 +647,8 @@
if (archive) {
res = this->install(archive);
if (res == 0) {
+ fprintf(stdout, "Installed archive: %llu %s \n",
+ archive->serial(), archive->name());
uuid_unparse_upper(archive->uuid(), uuid);
fprintf(stdout, "%s\n", uuid);
} else {
@@ -651,12 +658,12 @@
fprintf(stderr, "Error: Unable to rollback installation. "
"Your system is in an inconsistent state! File a bug!\n");
} else {
- fprintf(stderr, "Rollback successful.\n");
+ fprintf(stdout, "Rollback successful.\n");
}
res = 1;
}
} else {
- fprintf(stderr, "Archive not found: %s\n", path);
+ fprintf(stdout, "Archive not found: %s\n", path);
}
return res;
@@ -676,7 +683,6 @@
assert(rollback != NULL);
assert(archive != NULL);
- res = this->lock(LOCK_EX);
if (res != 0) return res;
//
@@ -715,7 +721,6 @@
remove_directory(rollback_path);
free(rollback_path);
free(archive_path);
- (void)this->lock(LOCK_SH);
return res;
}
@@ -768,8 +773,6 @@
remove_directory(rollback_path);
free(rollback_path);
free(archive_path);
-
- (void)this->lock(LOCK_SH);
return res;
}
@@ -889,7 +892,7 @@
}
}
- fprintf(stderr, "%c %s\n", state, file->path());
+ fprintf(stdout, "%c %s\n", state, file->path());
if (res != 0) fprintf(stderr, "%s:%d: uninstall failed: %s\n",
__FILE__, __LINE__, file->path());
@@ -938,8 +941,7 @@
archive->name(), archive->build(), m_build);
return 9999;
}
-
- res = this->lock(LOCK_EX);
+
if (res != 0) return res;
if (!dryrun) {
@@ -954,6 +956,7 @@
}
InstallContext context(this, archive);
+ context.reverse_files = true; // uninstall children before parents
if (res == 0) res = this->iterate_files(archive, &Depot::uninstall_file, &context);
if (!dryrun) {
@@ -977,8 +980,6 @@
if (res == 0) fprintf(stdout, "Uninstalled archive: %llu %s \n",
archive->serial(), archive->name());
-
- (void)this->lock(LOCK_SH);
return res;
}
@@ -1197,7 +1198,7 @@
uint8_t** filelist;
uint8_t* data;
uint32_t count;
- res = this->m_db->get_files(&filelist, &count, archive);
+ res = this->m_db->get_files(&filelist, &count, archive, false);
if (FOUND(res)) {
for (uint32_t i=0; i < count; i++) {
File* file = this->m_db->make_file(filelist[i]);
@@ -1336,7 +1337,7 @@
fprintf(stderr, "Error: unknown command given to dispatch_command.\n");
}
if (res != 0) {
- fprintf(stderr, "An error occurred.\n");
+ fprintf(stdout, "An error occurred.\n");
}
return res;
}
@@ -1361,13 +1362,13 @@
for (size_t i = 0; i < count; i++) {
if (!list[i]) {
- fprintf(stderr, "Archive not found: %s\n", arg);
+ fprintf(stdout, "Archive not found: %s\n", arg);
return -1;
}
if (verbosity & VERBOSE_DEBUG) {
char uuid[37];
uuid_unparse_upper(list[i]->uuid(), uuid);
- fprintf(stderr, "Found archive: %s\n", uuid);
+ fprintf(stdout, "Found archive: %s\n", uuid);
}
res = this->dispatch_command(list[i], command);
delete list[i];
Modified: trunk/darwinup/Table.cpp
===================================================================
--- trunk/darwinup/Table.cpp 2010-03-15 15:57:36 UTC (rev 785)
+++ trunk/darwinup/Table.cpp 2010-03-15 21:01:42 UTC (rev 786)
@@ -498,8 +498,12 @@
} else {
op = tmp_op;
}
- va_arg(args, void*);
- if (col->type() == SQLITE_BLOB) va_arg(args, uint32_t);
+ if (col->type() == SQLITE_TEXT) va_arg(args, char*);
+ if (col->type() == SQLITE_INTEGER) va_arg(args, uint64_t);
+ if (col->type() == SQLITE_BLOB) {
+ va_arg(args, char*);
+ va_arg(args, uint32_t);
+ }
len = snprintf(tmpstr, 256, " AND %s%c%c?", col->name(), not_op, op);
if (len >= 255) {
fprintf(stderr, "Error: column name is too big (limit: 248): %s\n",
Modified: trunk/darwinup/Utils.cpp
===================================================================
--- trunk/darwinup/Utils.cpp 2010-03-15 15:57:36 UTC (rev 785)
+++ trunk/darwinup/Utils.cpp 2010-03-15 21:01:42 UTC (rev 786)
@@ -317,6 +317,12 @@
char* toolpath;
join_path(&toolpath, base, "/usr/bin/update_dyld_shared_cache");
+ struct stat sb;
+ res = stat(toolpath, &sb);
+ if (res) {
+ return 1;
+ }
+
const char* args[] = {
toolpath,
"-root", base,
Modified: trunk/darwinup/main.cpp
===================================================================
--- trunk/darwinup/main.cpp 2010-03-15 15:57:36 UTC (rev 785)
+++ trunk/darwinup/main.cpp 2010-03-15 21:01:42 UTC (rev 786)
@@ -104,12 +104,11 @@
update_dyld = false;
break;
case 'f':
- IF_DEBUG("forcing operations\n");
force = 1;
break;
case 'n':
- IF_DEBUG("dry run\n");
dryrun = 1;
+ update_dyld = false;
break;
case 'p':
if (optarg[0] != '/') {
@@ -138,8 +137,14 @@
int res = 0;
+ if (dryrun) IF_DEBUG("option: dry run\n");
+ if (force) IF_DEBUG("option: forcing operations\n");
+ if (!update_dyld) IF_DEBUG("option: not updating dyld cache\n");
+
if (!path) {
asprintf(&path, "/");
+ } else {
+ IF_DEBUG("option: path is %s\n", path);
}
Depot* depot = new Depot(path);
@@ -175,7 +180,6 @@
if (strcmp(argv[0], "install") == 0) {
if (i==1 && depot->initialize(true)) exit(13);
res = depot->install(argv[i]);
- if (update_dyld && res == 0) res = update_dyld_shared_cache(path);
} else if (strcmp(argv[0], "upgrade") == 0) {
if (i==1 && depot->initialize(true)) exit(14);
// find most recent matching archive by name
@@ -188,14 +192,12 @@
if (res == 0) res = depot->install(argv[i]);
// uninstall old archive
if (res == 0) res = depot->uninstall(old);
- if (update_dyld && res == 0) res = update_dyld_shared_cache(path);
} else if (strcmp(argv[0], "files") == 0) {
if (i==1 && depot->initialize(false)) exit(12);
res = depot->process_archive(argv[0], argv[i]);
} else if (strcmp(argv[0], "uninstall") == 0) {
if (i==1 && depot->initialize(true)) exit(15);
res = depot->process_archive(argv[0], argv[i]);
- if (update_dyld && res == 0) res = update_dyld_shared_cache(path);
} else if (strcmp(argv[0], "verify") == 0) {
if (i==1 && depot->initialize(true)) exit(16);
res = depot->process_archive(argv[0], argv[i]);
@@ -203,6 +205,11 @@
usage(progname);
}
}
+ if (update_dyld && res == 0) {
+ res = update_dyld_shared_cache(path);
+ if (res) fprintf(stderr, "Warning: could not update dyld cache.\n");
+ res = 0;
+ }
}
free(path);
Modified: trunk/testing/darwinup/run-tests.sh
===================================================================
--- trunk/testing/darwinup/run-tests.sh 2010-03-15 15:57:36 UTC (rev 785)
+++ trunk/testing/darwinup/run-tests.sh 2010-03-15 21:01:42 UTC (rev 786)
@@ -11,7 +11,7 @@
DEST=$PREFIX/dest
DESTTAR=dest.tar.gz
-DARWINUP="darwinup -dvvv -p $DEST "
+DARWINUP="darwinup $1 -p $DEST "
DIFF="diff -x .DarwinDepot -x broken -qru"
ROOTS="root root2 root3"
@@ -41,6 +41,26 @@
mkdir -p $ORIG
cp -R $DEST/* $ORIG/
+echo "========== TEST: Trying both 32 and 64 bit =========="
+for R in $ROOTS;
+do
+ echo "INFO: Installing $R ...";
+ arch -i386 $DARWINUP install $PREFIX/$R
+ UUID=$($DARWINUP list | head -3 | tail -1 | awk '{print $1}')
+ echo "INFO: Uninstalling $R ...";
+ arch -x86_64 $DARWINUP uninstall $UUID
+ echo "DIFF: diffing original test files to dest (should be no diffs) ..."
+ $DIFF $ORIG $DEST 2>&1
+ echo "INFO: Installing $R ...";
+ arch -x86_64 $DARWINUP install $PREFIX/$R
+ UUID=$($DARWINUP list | head -3 | tail -1 | awk '{print $1}')
+ echo "INFO: Uninstalling $R ...";
+ arch -i386 $DARWINUP uninstall $UUID
+ echo "DIFF: diffing original test files to dest (should be no diffs) ..."
+ $DIFF $ORIG $DEST 2>&1
+done
+
+
echo "========== TEST: Trying roots one at a time =========="
for R in $ROOTS;
do
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/darwinbuild-changes/attachments/20100315/1ee9370c/attachment-0001.html>
More information about the darwinbuild-changes
mailing list