[darwinbuild-changes] [800] trunk
source_changes at macosforge.org
source_changes at macosforge.org
Tue Mar 30 16:02:19 PDT 2010
Revision: 800
http://trac.macosforge.org/projects/darwinbuild/changeset/800
Author: wsiegrist at apple.com
Date: 2010-03-30 16:02:17 -0700 (Tue, 30 Mar 2010)
Log Message:
-----------
Merge PR-7798586
Modified Paths:
--------------
trunk/darwinup/Archive.cpp
trunk/darwinup/Archive.h
trunk/darwinup/Depot.cpp
trunk/darwinup/Depot.h
trunk/darwinup/Utils.cpp
trunk/darwinup/Utils.h
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-7748469:777-785
/branches/PR-7765119:790-791
+ /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
/branches/PR-7765119:790-791
/branches/PR-7798586:796-799
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-7748469/darwinbuild/darwinbuild.in:777-785
/branches/PR-7765119/darwinbuild/darwinbuild.in:790-791
+ /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
/branches/PR-7765119/darwinbuild/darwinbuild.in:790-791
/branches/PR-7798586/darwinbuild/darwinbuild.in:796-799
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-7748469/darwinbuild/darwinmaster.in:777-785
/branches/PR-7765119/darwinbuild/darwinmaster.in:790-791
+ /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
/branches/PR-7765119/darwinbuild/darwinmaster.in:790-791
/branches/PR-7798586/darwinbuild/darwinmaster.in:796-799
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-7748469/darwinbuild/installXcode.in:777-785
/branches/PR-7765119/darwinbuild/installXcode.in:790-791
+ /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
/branches/PR-7765119/darwinbuild/installXcode.in:790-791
/branches/PR-7798586/darwinbuild/installXcode.in:796-799
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-7748469/darwinbuild/packageRoots.in:777-785
/branches/PR-7765119/darwinbuild/packageRoots.in:790-791
+ /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
/branches/PR-7765119/darwinbuild/packageRoots.in:790-791
/branches/PR-7798586/darwinbuild/packageRoots.in:796-799
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-7748469/darwinbuild/thinPackages.in:777-785
/branches/PR-7765119/darwinbuild/thinPackages.in:790-791
+ /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
/branches/PR-7765119/darwinbuild/thinPackages.in:790-791
/branches/PR-7798586/darwinbuild/thinPackages.in:796-799
Modified: trunk/darwinup/Archive.cpp
===================================================================
--- trunk/darwinup/Archive.cpp 2010-03-29 22:37:13 UTC (rev 799)
+++ trunk/darwinup/Archive.cpp 2010-03-30 23:02:17 UTC (rev 800)
@@ -51,6 +51,7 @@
m_name = strdup(basename(m_path));
m_info = 0;
m_date_installed = time(NULL);
+ m_is_superseded = -1; // unknown
}
Archive::Archive(uint64_t serial, uuid_t uuid, const char* name, const char* path,
@@ -62,6 +63,7 @@
m_build = build ? strdup(build) : NULL;
m_info = info;
m_date_installed = date_installed;
+ m_is_superseded = -1; // unknown
}
@@ -238,7 +240,7 @@
return exec_with_args(args);
}
-
+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
XarArchive::XarArchive(const char* path) : Archive(path) {}
int XarArchive::extract(const char* destdir) {
@@ -250,8 +252,8 @@
};
return exec_with_args(args);
}
+#endif
-
ZipArchive::ZipArchive(const char* path) : Archive(path) {}
int ZipArchive::extract(const char* destdir) {
@@ -317,8 +319,10 @@
archive = new TarGZArchive(actpath);
} else if (has_suffix(actpath, ".tar.bz2") || has_suffix(actpath, ".tbz2")) {
archive = new TarBZ2Archive(actpath);
+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
} else if (has_suffix(actpath, ".xar")) {
archive = new XarArchive(actpath);
+#endif
} else if (has_suffix(actpath, ".zip")) {
archive = new ZipArchive(actpath);
} else {
Modified: trunk/darwinup/Archive.h
===================================================================
--- trunk/darwinup/Archive.h 2010-03-29 22:37:13 UTC (rev 799)
+++ trunk/darwinup/Archive.h 2010-03-30 23:02:17 UTC (rev 800)
@@ -33,6 +33,7 @@
#ifndef _ARCHIVE_H
#define _ARCHIVE_H
+#include <Availability.h>
#include <stdint.h>
#include <stdio.h>
#include <sys/types.h>
@@ -106,7 +107,7 @@
// The epoch seconds when the archive was installed.
virtual time_t date_installed();
-
+
////
// Member functions
////
@@ -146,6 +147,9 @@
uint64_t m_info;
time_t m_date_installed;
+ // -1 unknown, 0 false, 1 true
+ int m_is_superseded;
+
friend struct Depot;
friend struct DarwinupDatabase;
};
@@ -295,7 +299,7 @@
virtual int extract(const char* destdir);
};
-
+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
////
// XarArchive
//
@@ -306,8 +310,8 @@
XarArchive(const char* path);
virtual int extract(const char* destdir);
};
+#endif
-
////
// ZipArchive
//
Modified: trunk/darwinup/Depot.cpp
===================================================================
--- trunk/darwinup/Depot.cpp 2010-03-29 22:37:13 UTC (rev 799)
+++ trunk/darwinup/Depot.cpp 2010-03-30 23:02:17 UTC (rev 800)
@@ -60,6 +60,7 @@
m_lock_fd = -1;
m_is_locked = 0;
m_depot_mode = 0750;
+ m_is_dirty = false;
}
Depot::Depot(const char* prefix) {
@@ -67,7 +68,8 @@
m_is_locked = 0;
m_depot_mode = 0750;
m_build = NULL;
-
+ m_is_dirty = false;
+
asprintf(&m_prefix, "%s", prefix);
join_path(&m_depot_path, m_prefix, "/.DarwinDepot");
join_path(&m_database_path, m_depot_path, "/Database-V100");
@@ -92,6 +94,7 @@
const char* Depot::archives_path() { return m_archives_path; }
const char* Depot::downloads_path() { return m_downloads_path; }
const char* Depot::prefix() { return m_prefix; }
+bool Depot::is_dirty() { return m_is_dirty; }
int Depot::connect() {
m_db = new DarwinupDatabase(m_database_path);
@@ -151,8 +154,12 @@
res = this->create_storage();
if (res) return res;
-
+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
build_number_for_path(&m_build, m_prefix);
+#else
+ m_build = (char*)calloc(1, 2);
+ snprintf(m_build, 2, " ");
+#endif
}
struct stat sb;
@@ -458,6 +465,7 @@
// after saving actual in the rollback archive.
// i.e. user changes since last installation
if (actual_flags != FILE_INFO_IDENTICAL) {
+ this->m_is_dirty = true;
if (INFO_TEST(actual->info(), FILE_INFO_NO_ENTRY)) {
state = 'A';
} else {
@@ -854,6 +862,7 @@
File* preceding = context->depot->file_preceded_by(file);
assert(preceding != NULL);
if (INFO_TEST(preceding->info(), FILE_INFO_NO_ENTRY)) {
+ context->depot->m_is_dirty = true;
state = 'R';
IF_DEBUG("[uninstall] removing file\n");
if (!dryrun && actual && res == 0) res = actual->remove();
@@ -862,6 +871,7 @@
// if it's different from what's already there
uint32_t flags = File::compare(file, preceding);
if (INFO_TEST(flags, FILE_INFO_DATA_DIFFERS)) {
+ context->depot->m_is_dirty = true;
state = 'U';
IF_DEBUG("[uninstall] restoring\n");
if (!dryrun && res == 0) {
@@ -871,6 +881,7 @@
} else if (INFO_TEST(flags, FILE_INFO_MODE_DIFFERS) ||
INFO_TEST(flags, FILE_INFO_GID_DIFFERS) ||
INFO_TEST(flags, FILE_INFO_UID_DIFFERS)) {
+ context->depot->m_is_dirty = true;
state = 'M';
if (!dryrun && res == 0) {
res = preceding->install_info(context->depot->m_prefix);
@@ -929,7 +940,9 @@
if (!force &&
this->m_build &&
archive->build() &&
- (strcmp(this->m_build, archive->build()) != 0)) {
+ (strcmp(this->m_build, archive->build()) != 0) &&
+ !this->is_superseded(archive)
+ ) {
fprintf(stderr,
"-------------------------------------------------------------------------------\n"
"The %s root was installed on a different base OS build (%s). The current \n"
@@ -1009,7 +1022,6 @@
"============ ======= =================\n");
}
-
int Depot::verify(Archive* archive) {
int res = 0;
this->archive_header();
@@ -1195,6 +1207,12 @@
int Depot::is_locked() { return m_is_locked; }
bool Depot::is_superseded(Archive* archive) {
+ // return early if already known
+ if (archive->m_is_superseded != -1) {
+ return (archive->m_is_superseded == 1);
+ }
+
+ // need to find out if superseded
int res = DB_OK;
uint8_t** filelist;
uint8_t* data;
@@ -1218,12 +1236,16 @@
// not found in database and no changes on disk,
// so file is the current version of actual
- if (flags == FILE_INFO_IDENTICAL) return false;
+ if (flags == FILE_INFO_IDENTICAL) {
+ archive->m_is_superseded = 0;
+ return false;
+ }
// something external changed contents of actual,
// so we consider this file superseded (by OS upgrade?)
}
}
+ archive->m_is_superseded = 1;
return true;
}
Modified: trunk/darwinup/Depot.h
===================================================================
--- trunk/darwinup/Depot.h 2010-03-29 22:37:13 UTC (rev 799)
+++ trunk/darwinup/Depot.h 2010-03-30 23:02:17 UTC (rev 800)
@@ -33,6 +33,7 @@
#ifndef _DEPOT_H
#define _DEPOT_H
+#include <Availability.h>
#include <sys/types.h>
#include <uuid/uuid.h>
#include "DB.h"
@@ -118,6 +119,8 @@
void archive_header();
+ bool is_dirty();
+
protected:
// Serialize access to the Depot via flock(2).
@@ -165,6 +168,7 @@
char* m_build;
int m_lock_fd;
int m_is_locked;
+ bool m_is_dirty; // track if we need to update dyld cache
};
#endif
Modified: trunk/darwinup/Utils.cpp
===================================================================
--- trunk/darwinup/Utils.cpp 2010-03-29 22:37:13 UTC (rev 799)
+++ trunk/darwinup/Utils.cpp 2010-03-30 23:02:17 UTC (rev 800)
@@ -337,6 +337,7 @@
return res;
}
+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
int build_number_for_path(char** build, const char* path) {
int res = 0;
char system[PATH_MAX];
@@ -391,6 +392,7 @@
return -1;
}
+#endif
void __data_hex(FILE* f, uint8_t* data, uint32_t size) {
if (!size) return;
Modified: trunk/darwinup/Utils.h
===================================================================
--- trunk/darwinup/Utils.h 2010-03-29 22:37:13 UTC (rev 799)
+++ trunk/darwinup/Utils.h 2010-03-30 23:02:17 UTC (rev 800)
@@ -33,6 +33,7 @@
#ifndef _UTILS_H
#define _UTILS_H
+#include <Availability.h>
#include <stdint.h>
#include <sys/types.h>
#include <fts.h>
@@ -78,7 +79,10 @@
int find_base_system_path(char** output, const char* path);
int update_dyld_shared_cache(const char* path);
+
+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
int build_number_for_path(char** build, const char* path);
+#endif
void __data_hex(FILE* f, uint8_t* data, uint32_t size);
Modified: trunk/darwinup/main.cpp
===================================================================
--- trunk/darwinup/main.cpp 2010-03-29 22:37:13 UTC (rev 799)
+++ trunk/darwinup/main.cpp 2010-03-30 23:02:17 UTC (rev 800)
@@ -30,6 +30,7 @@
* @APPLE_BSD_LICENSE_HEADER_END@
*/
+#include <Availability.h>
#include <libgen.h>
#include <stdio.h>
#include <stdlib.h>
@@ -48,7 +49,9 @@
fprintf(stderr, "version: 16.2 \n");
fprintf(stderr, " \n");
fprintf(stderr, "options: \n");
+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
fprintf(stderr, " -d do not update dyld cache \n");
+#endif
fprintf(stderr, " -f force operation to succeed at all costs \n");
fprintf(stderr, " -n dry run \n");
fprintf(stderr, " -p DIR operate on roots under DIR (default: /) \n");
@@ -71,7 +74,11 @@
fprintf(stderr, " cpio, cpio.gz, cpio.bz2 \n");
fprintf(stderr, " pax, pax.gz, pax.bz2 \n");
fprintf(stderr, " tar, tar.gz, tar.bz2 \n");
+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
fprintf(stderr, " xar, zip \n");
+#else
+ fprintf(stderr, " zip \n");
+#endif
fprintf(stderr, " \n");
fprintf(stderr, "archive is one of: \n");
fprintf(stderr, " <serial> the Serial number \n");
@@ -95,20 +102,30 @@
int main(int argc, char* argv[]) {
char* progname = strdup(basename(argv[0]));
char* path = NULL;
+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
bool update_dyld = true;
-
+#endif
+
int ch;
+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
while ((ch = getopt(argc, argv, "dfnp:vh")) != -1) {
+#else
+ while ((ch = getopt(argc, argv, "fnp:vh")) != -1) {
+#endif
switch (ch) {
+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
case 'd':
update_dyld = false;
break;
+#endif
case 'f':
force = 1;
break;
case 'n':
dryrun = 1;
+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
update_dyld = false;
+#endif
break;
case 'p':
if (optarg[0] != '/') {
@@ -139,7 +156,9 @@
if (dryrun) IF_DEBUG("option: dry run\n");
if (force) IF_DEBUG("option: forcing operations\n");
+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
if (!update_dyld) IF_DEBUG("option: not updating dyld cache\n");
+#endif
if (!path) {
asprintf(&path, "/");
@@ -205,11 +224,13 @@
usage(progname);
}
}
- if (update_dyld && res == 0) {
+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
+ if (update_dyld && depot->is_dirty() && res == 0) {
res = update_dyld_shared_cache(path);
if (res) fprintf(stderr, "Warning: could not update dyld cache.\n");
res = 0;
}
+#endif
}
free(path);
Modified: trunk/testing/darwinup/run-tests.sh
===================================================================
--- trunk/testing/darwinup/run-tests.sh 2010-03-29 22:37:13 UTC (rev 799)
+++ trunk/testing/darwinup/run-tests.sh 2010-03-30 23:02:17 UTC (rev 800)
@@ -11,6 +11,10 @@
DEST=$PREFIX/dest
DESTTAR=dest.tar.gz
+HASXAR=$(darwinup 2>&1 | grep xar | wc -l)
+HAS386=$(file `which darwinup` | grep i386 | wc -l)
+HASX64=$(file `which darwinup` | grep x86_64 | wc -l)
+
DARWINUP="darwinup $1 -p $DEST "
DIFF="diff -x .DarwinDepot -x broken -qru"
@@ -41,30 +45,35 @@
mkdir -p $ORIG
cp -R $DEST/* $ORIG/
-echo "========== TEST: Listing ============="
-sudo -u nobody $DARWINUP list
-$DARWINUP list
+if [ -f /usr/bin/sudo ];
+then
+ echo "========== TEST: Listing ============="
+ /usr/bin/sudo -u nobody $DARWINUP list
+ $DARWINUP list
+fi
-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
+if [ $HAS386 -gt 0 -a $HASX64 -gt 0 ];
+then
+ 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
+fi
-
echo "========== TEST: Trying roots one at a time =========="
for R in $ROOTS;
do
@@ -201,13 +210,15 @@
echo "DIFF: diffing original test files to dest (should be no diffs) ..."
$DIFF $ORIG $DEST 2>&1
-$DARWINUP install $PREFIX/deep-rollback.cpgz
-$DARWINUP install $PREFIX/deep-rollback-2.xar
-$DARWINUP uninstall all
-echo "DIFF: diffing original test files to dest (should be no diffs) ..."
-$DIFF $ORIG $DEST 2>&1
+if [ $HASXAR -gt 0 ];
+then
+ $DARWINUP install $PREFIX/deep-rollback.cpgz
+ $DARWINUP install $PREFIX/deep-rollback-2.xar ;
+ $DARWINUP uninstall all
+ echo "DIFF: diffing original test files to dest (should be no diffs) ..."
+ $DIFF $ORIG $DEST 2>&1
+fi
-
echo "========== TEST: Testing broken symlink handling =========="
$DARWINUP install $PREFIX/symlinks
$DARWINUP uninstall symlinks
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/darwinbuild-changes/attachments/20100330/b9bef7bb/attachment-0001.html>
More information about the darwinbuild-changes
mailing list