[darwinbuild-changes] [695] trunk

source_changes at macosforge.org source_changes at macosforge.org
Fri Feb 5 13:55:10 PST 2010


Revision: 695
          http://trac.macosforge.org/projects/darwinbuild/changeset/695
Author:   wsiegrist at apple.com
Date:     2010-02-05 13:55:06 -0800 (Fri, 05 Feb 2010)
Log Message:
-----------
Merge PR-7341154 and PR-7529688

Modified Paths:
--------------
    trunk/darwinup/Depot.cpp
    trunk/darwinup/Depot.h
    trunk/darwinup/main.cpp
    trunk/testing/darwinup/dest.tar.gz
    trunk/testing/darwinup/run-tests.sh

Added Paths:
-----------
    trunk/testing/darwinup/symlink_update.tar.gz
    trunk/testing/darwinup/symlinks.tar.gz

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-7431723:660-664
/branches/PR-7461534:650-664
/branches/PR-7482850:670-671
/trunk:432-434
   + /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-7529688:692-694
/trunk:432-434


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-7431723/darwinbuild/darwinbuild.in:660-664
/branches/PR-7461534/darwinbuild/darwinbuild.in:650-664
/trunk/darwinbuild/darwinbuild:432-434
   + /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-7529688/darwinbuild/darwinbuild.in:692-694
/trunk/darwinbuild/darwinbuild:432-434


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-7431723/darwinbuild/darwinmaster.in:660-664
/branches/PR-7461534/darwinbuild/darwinmaster.in:650-664
/trunk/darwinbuild/darwinmaster.sh:432-434
   + /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-7529688/darwinbuild/darwinmaster.in:692-694
/trunk/darwinbuild/darwinmaster.sh:432-434


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-7431723/darwinbuild/installXcode.in:660-664
/branches/PR-7461534/darwinbuild/installXcode.in:650-664
/trunk/darwinbuild/installXcode:432-434
   + /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-7529688/darwinbuild/installXcode.in:692-694
/trunk/darwinbuild/installXcode:432-434


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-7431723/darwinbuild/packageRoots.in:660-664
/branches/PR-7461534/darwinbuild/packageRoots.in:650-664
/trunk/darwinbuild/packageRoots.sh:432-434
   + /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-7529688/darwinbuild/packageRoots.in:692-694
/trunk/darwinbuild/packageRoots.sh:432-434


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-7431723/darwinbuild/thinPackages.in:660-664
/branches/PR-7461534/darwinbuild/thinPackages.in:650-664
/trunk/darwinbuild/thinPackages.sh:432-434
   + /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-7529688/darwinbuild/thinPackages.in:692-694
/trunk/darwinbuild/thinPackages.sh:432-434

Modified: trunk/darwinup/Depot.cpp
===================================================================
--- trunk/darwinup/Depot.cpp	2010-02-05 21:09:45 UTC (rev 694)
+++ trunk/darwinup/Depot.cpp	2010-02-05 21:55:06 UTC (rev 695)
@@ -656,7 +656,7 @@
 
 		// XXX: res = file->backup()
 		IF_DEBUG("[backup] copyfile(%s, %s)\n", path, dstpath);
-		res = copyfile(path, dstpath, NULL, COPYFILE_ALL);
+		res = copyfile(path, dstpath, NULL, COPYFILE_ALL|COPYFILE_NOFOLLOW);
 
 		if (res != 0) fprintf(stderr, "%s:%d: backup failed: %s: %s (%d)\n", __FILE__, __LINE__, dstpath, strerror(errno), errno);
 		free(path);
@@ -683,6 +683,34 @@
 }
 
 
+int Depot::install(const char* path) {
+	int res = 0;
+	char uuid[37];
+	Archive* archive = ArchiveFactory(path, this->downloads_path());
+	if (archive) {
+		res = this->install(archive);
+		if (res == 0) {
+			uuid_unparse_upper(archive->uuid(), uuid);
+			fprintf(stdout, "%s\n", uuid);
+		} else {
+			fprintf(stderr, "Error: Install failed. Rolling back installation.\n");
+			res = this->uninstall(archive);
+			if (res) {
+				fprintf(stderr, "Error: Unable to rollback installation. "
+						"Your system is in an inconsistent state! File a bug!\n");
+			} else {
+				fprintf(stderr, "Rollback successful.\n");
+			}
+			res = 1;
+		}
+	} else {
+		fprintf(stderr, "Archive not found: %s\n", path);
+	}
+
+	return res;
+}
+
+
 int Depot::install(Archive* archive) {
 	int res = 0;
 	Archive* rollback = new RollbackArchive();
@@ -733,7 +761,7 @@
 	if (res == 0 && rollback_files == 0) {
 		res = this->remove(rollback);
 	}
-	
+
 	// Commit the archive and its list of files to the database.
 	// Note that the archive's "active" flag is still not set.
 	if (res == 0) {
@@ -770,8 +798,9 @@
 	// Remove the stage and rollback directories (save disk space)
 	remove_directory(archive_path);
 	remove_directory(rollback_path);
-	if (rollback_path) free(rollback_path);
-	if (archive_path) free(archive_path);
+
+	free(rollback_path);
+	free(archive_path);
 	
 	(void)this->lock(LOCK_SH);
 

Modified: trunk/darwinup/Depot.h
===================================================================
--- trunk/darwinup/Depot.h	2010-02-05 21:09:45 UTC (rev 694)
+++ trunk/darwinup/Depot.h	2010-02-05 21:55:06 UTC (rev 695)
@@ -82,6 +82,7 @@
 	int list();
 	static int list_archive(Archive* archive, void* context);
 
+	int install(const char* path);
 	int install(Archive* archive);
 	static int install_file(File* file, void* context);
 	static int backup_file(File* file, void* context);

Modified: trunk/darwinup/main.cpp
===================================================================
--- trunk/darwinup/main.cpp	2010-02-05 21:09:45 UTC (rev 694)
+++ trunk/darwinup/main.cpp	2010-02-05 21:55:06 UTC (rev 695)
@@ -50,10 +50,11 @@
 	fprintf(stderr, "          -v         verbose (use -vv for extra verbosity)     \n");
 	fprintf(stderr, "                                                               \n");
 	fprintf(stderr, "commands:                                                      \n");
+	fprintf(stderr, "          files      <archive>                                 \n");
 	fprintf(stderr, "          install    <path>                                    \n");
 	fprintf(stderr, "          list                                                 \n");
-	fprintf(stderr, "          files      <archive>                                 \n");
 	fprintf(stderr, "          uninstall  <archive>                                 \n");
+	fprintf(stderr, "          upgrade    <path>                                    \n");
 	fprintf(stderr, "          verify     <archive>                                 \n");
 	fprintf(stderr, "                                                               \n");
 	fprintf(stderr, "<path> is one of:                                              \n");
@@ -139,27 +140,18 @@
 	}
 	
 	if (argc == 2 && strcmp(argv[0], "install") == 0) {
-		char uuid[37];
-		Archive* archive = ArchiveFactory(argv[1], depot->downloads_path());
-		if (archive) {
-			res = depot->install(archive);
-			if (res == 0) {
-				uuid_unparse_upper(archive->uuid(), uuid);
-				fprintf(stdout, "%s\n", uuid);
-			} else {
-				fprintf(stderr, "Error: Install failed. Rolling back installation.\n");
-				res = depot->uninstall(archive);
-				if (res) {
-					fprintf(stderr, "Error: Unable to rollback installation. "
-							"Your system is in an inconsistent state! File a bug!\n");
-				} else {
-					fprintf(stderr, "Rollback successful.\n");
-				}
-				res = 1;
-			}
-		} else {
-			fprintf(stderr, "Archive not found: %s\n", argv[1]);
+		res = depot->install(argv[1]);
+	} else if (argc == 2 && strcmp(argv[0], "upgrade") == 0) {
+		// find most recent matching archive by name
+		Archive* old = depot->get_archive(basename(argv[1]));
+		if (!old) {
+			fprintf(stderr, "Error: unable to find a matching root to upgrade.\n");
+			res = 5;
 		}
+		// install new archive
+		if (res == 0) res = depot->install(argv[1]);
+		// uninstall old archive
+		if (res == 0) res = depot->uninstall(old);
 	} else if (argc == 1 && strcmp(argv[0], "list") == 0) {
 		depot->list();
 	} else if (argc == 1 && strcmp(argv[0], "dump") == 0) {

Modified: trunk/testing/darwinup/dest.tar.gz
===================================================================
(Binary files differ)

Modified: trunk/testing/darwinup/run-tests.sh
===================================================================
--- trunk/testing/darwinup/run-tests.sh	2010-02-05 21:09:45 UTC (rev 694)
+++ trunk/testing/darwinup/run-tests.sh	2010-02-05 21:55:06 UTC (rev 695)
@@ -11,7 +11,7 @@
 DEST=$PREFIX/dest
 DESTTAR=dest.tar.gz
 
-DIFF="diff -x .DarwinDepot -qru"
+DIFF="diff -x .DarwinDepot -x broken -qru"
 
 ROOTS="root root2 root3"
 
@@ -27,7 +27,7 @@
 	tar zxvf $R.tar.gz -C $PREFIX
 done;
 
-for R in root4 root5 root6 root7;
+for R in root4 root5 root6 root7 symlinks symlink_update;
 do
 	tar zxvf $R.tar.gz -C $PREFIX
 done;
@@ -35,7 +35,7 @@
 mkdir -p $ORIG
 cp -R $DEST/* $ORIG/
 
-echo "TEST: Trying roots one at a time ..."
+echo "========== TEST: Trying roots one at a time =========="
 for R in $ROOTS;
 do
 	echo "INFO: Installing $R ...";
@@ -47,7 +47,7 @@
 	$DIFF $ORIG $DEST 2>&1
 done
 
-echo "TEST: Trying all roots at once, uninstall in reverse ...";
+echo "========== TEST: Trying all roots at once, uninstall in reverse ==========";
 for R in $ROOTS;
 do
 	echo "INFO: Installing $R ...";
@@ -62,7 +62,7 @@
 echo "DIFF: diffing original test files to dest (should be no diffs) ..."
 $DIFF $ORIG $DEST 2>&1
 
-echo "TEST: Trying all roots at once, uninstall in install order ..."
+echo "========== TEST: Trying all roots at once, uninstall in install order =========="
 for R in $ROOTS;
 do
         echo "INFO: Installing $R ...";
@@ -77,7 +77,7 @@
 echo "DIFF: diffing original test files to dest (should be no diffs) ..."
 $DIFF $ORIG $DEST 2>&1
 
-echo "TEST: Trying all roots at once, uninstall root2, root3, root ..."
+echo "========== TEST: Trying all roots at once, uninstall root2, root3, root =========="
 for R in $ROOTS;
 do
         echo "INFO: Installing $R ...";
@@ -92,7 +92,7 @@
 echo "DIFF: diffing original test files to dest (should be no diffs) ..."
 $DIFF $ORIG $DEST 2>&1
 
-echo "TEST: Trying roots in reverse, uninstall in install order ..."
+echo "========== TEST: Trying roots in reverse, uninstall in install order =========="
 for R in root3 root2 root;
 do
         echo "INFO: Installing $R ...";
@@ -107,7 +107,7 @@
 echo "DIFF: diffing original test files to dest (should be no diffs) ..."
 $DIFF $ORIG $DEST 2>&1
 
-echo "TEST: Try uninstalling with user data in rollback"
+echo "========== TEST: Try uninstalling with user data in rollback =========="
 echo "INFO: Installing root5 ...";
 darwinup -vv -p $DEST install $PREFIX/root5
 darwinup -vv -p $DEST install $PREFIX/root6
@@ -116,11 +116,25 @@
 darwinup -vv -p $DEST uninstall root6
 darwinup -vv -p $DEST uninstall root5
 darwinup -vv -p $DEST uninstall root7
+stat $DEST/d/file
+rm $DEST/d/file
+rmdir $DEST/d
 
+echo "========== TEST: Testing broken symlink handling =========="
+darwinup -vv -p $DEST install $PREFIX/symlinks
+darwinup -vv -p $DEST uninstall symlinks
+echo "DIFF: diffing original test files to dest (should be no diffs) ..."
+$DIFF $ORIG $DEST 2>&1
+darwinup -vv -p $DEST install $PREFIX/symlink_update
+stat -L $DEST/broken
+darwinup -vv -p $DEST uninstall newest
+echo "DIFF: diffing original test files to dest (should be no diffs) ..."
+$DIFF $ORIG $DEST 2>&1
 
+ 
+# expected failures
 set +e
-
-echo "TEST: Trying a root that will fail due to object change ..."
+echo "========== TEST: Trying a root that will fail due to object change =========="
 darwinup -vv -p $DEST install $PREFIX/root4
 if [ $? -ne 1 ]; then exit 1; fi
 echo "DIFF: diffing original test files to dest (should be no diffs) ..."

Copied: trunk/testing/darwinup/symlink_update.tar.gz (from rev 694, branches/PR-7529688/testing/darwinup/symlink_update.tar.gz)
===================================================================
(Binary files differ)

Copied: trunk/testing/darwinup/symlinks.tar.gz (from rev 694, branches/PR-7529688/testing/darwinup/symlinks.tar.gz)
===================================================================
(Binary files differ)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/darwinbuild-changes/attachments/20100205/963ab362/attachment-0001.html>


More information about the darwinbuild-changes mailing list