[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