diff options
| author | Mark Palange (Mani) <palange@lindenlab.com> | 2010-11-11 19:07:02 -0800 | 
|---|---|---|
| committer | Mark Palange (Mani) <palange@lindenlab.com> | 2010-11-11 19:07:02 -0800 | 
| commit | 0f26013d1de5836b0be97d34af677f2a021f78fe (patch) | |
| tree | d8efb4943fe1797dfe9214d633fa7563dd36adc0 | |
| parent | bfa393f933ccf11105daf5258f373efc764b736f (diff) | |
| parent | 830afa5b27092668517b2f5670e892143de3cf66 (diff) | |
Merge
| -rw-r--r-- | indra/llcommon/llthread.cpp | 2 | ||||
| -rw-r--r-- | indra/mac_updater/mac_updater.cpp | 48 | ||||
| -rw-r--r-- | indra/viewer_components/updater/scripts/darwin/update_install | 5 | 
3 files changed, 47 insertions, 8 deletions
| diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp index 2408be74b9..148aaf8aed 100644 --- a/indra/llcommon/llthread.cpp +++ b/indra/llcommon/llthread.cpp @@ -147,6 +147,8 @@ void LLThread::shutdown()  		{  			// This thread just wouldn't stop, even though we gave it time  			llwarns << "LLThread::~LLThread() exiting thread before clean exit!" << llendl; +			// Put a stake in its heart. +			apr_thread_exit(mAPRThreadp, -1);  			return;  		}  		mAPRThreadp = NULL; diff --git a/indra/mac_updater/mac_updater.cpp b/indra/mac_updater/mac_updater.cpp index 23980ffac2..5f6ea4d33b 100644 --- a/indra/mac_updater/mac_updater.cpp +++ b/indra/mac_updater/mac_updater.cpp @@ -26,6 +26,9 @@  #include "linden_common.h" +#include <boost/format.hpp> + +#include <libgen.h>  #include <sys/types.h>  #include <sys/stat.h>  #include <unistd.h> @@ -62,6 +65,7 @@ Boolean gCancelled = false;  const char *gUpdateURL;  const char *gProductName;  const char *gBundleID; +const char *gDmgFile;  void *updatethreadproc(void*); @@ -334,6 +338,10 @@ int parse_args(int argc, char **argv)  		{  			gBundleID = argv[j];  		} +		else if ((!strcmp(argv[j], "-dmg")) && (++j < argc))  +		{ +			gDmgFile = argv[j]; +		}  	}  	return 0; @@ -361,10 +369,11 @@ int main(int argc, char **argv)  	gUpdateURL  = NULL;  	gProductName = NULL;  	gBundleID = NULL; +	gDmgFile = NULL;  	parse_args(argc, argv); -	if (!gUpdateURL) +	if ((gUpdateURL == NULL) && (gDmgFile == NULL))  	{ -		llinfos << "Usage: mac_updater -url <url> [-name <product_name>] [-program <program_name>]" << llendl; +		llinfos << "Usage: mac_updater -url <url> | -dmg <dmg file> [-name <product_name>] [-program <program_name>]" << llendl;  		exit(1);  	}  	else @@ -700,10 +709,14 @@ static OSErr findAppBundleOnDiskImage(FSRef *parent, FSRef *app)  						// Looks promising.  Check to see if it has the right bundle identifier.  						if(isFSRefViewerBundle(&ref))  						{ +							llinfos << name << " is the one" << llendl;  							// This is the one.  Return it.  							*app = ref;  							found = true; +						} else { +							llinfos << name << " is not the bundle we are looking for; move along" << llendl;  						} +  					}  				}  			} @@ -921,6 +934,22 @@ void *updatethreadproc(void*)  #endif // 0 *HACK for DEV-11935 +		// Skip downloading the file if the dmg was passed on the command line. +		std::string dmgName; +		if(gDmgFile != NULL) { +			dmgName = basename((char *)gDmgFile); +			char * dmgDir = dirname((char *)gDmgFile); +			strncpy(tempDir, dmgDir, sizeof(tempDir)); +			err = FSPathMakeRef((UInt8*)tempDir, &tempDirRef, NULL); +			if(err != noErr) throw 0; +			chdir(tempDir); +			goto begin_install; +		} else { +			// Continue on to download file. +			dmgName = "SecondLife.dmg"; +		} + +		  		strncat(temp, "/SecondLifeUpdate_XXXXXX", (sizeof(temp) - strlen(temp)) - 1);  		if(mkdtemp(temp) == NULL)  		{ @@ -979,14 +1008,17 @@ void *updatethreadproc(void*)  			fclose(downloadFile);  			downloadFile = NULL;  		} -		 + +	begin_install:  		sendProgress(0, 0, CFSTR("Mounting image..."));  		LLFile::mkdir("mnt", 0700);  		// NOTE: we could add -private at the end of this command line to keep the image from showing up in the Finder,  		//		but if our cleanup fails, this makes it much harder for the user to unmount the image.  		std::string mountOutput; -		FILE* mounter = popen("hdiutil attach SecondLife.dmg -mountpoint mnt", "r");		/* Flawfinder: ignore */ +		boost::format cmdFormat("hdiutil attach %s -mountpoint mnt"); +		cmdFormat % dmgName; +		FILE* mounter = popen(cmdFormat.str().c_str(), "r");		/* Flawfinder: ignore */  		if(mounter == NULL)  		{ @@ -1077,7 +1109,11 @@ void *updatethreadproc(void*)  			// Move aside old version (into work directory)  			err = FSMoveObject(&targetRef, &tempDirRef, &asideRef);  			if(err != noErr) +			{ +				llwarns << "failed to move aside old version (error code " <<  +					err << ")" << llendl;  				throw 0; +			}  			// Grab the path for later use.  			err = FSRefMakePath(&asideRef, (UInt8*)aside, sizeof(aside)); @@ -1175,6 +1211,10 @@ void *updatethreadproc(void*)  		llinfos << "Moving work directory to the trash." << llendl;  		err = FSMoveObject(&tempDirRef, &trashFolderRef, NULL); +		if(err != noErr) { +			llwarns << "failed to move files to trash, (error code " << +				err << ")" << llendl; +		}  //		snprintf(temp, sizeof(temp), "rm -rf '%s'", tempDir);  //		printf("%s\n", temp); diff --git a/indra/viewer_components/updater/scripts/darwin/update_install b/indra/viewer_components/updater/scripts/darwin/update_install index 24d344ca52..c061d2818f 100644 --- a/indra/viewer_components/updater/scripts/darwin/update_install +++ b/indra/viewer_components/updater/scripts/darwin/update_install @@ -1,6 +1,3 @@  #! /bin/bash -hdiutil attach -nobrowse $1 -cp -R  /Volumes/Second\ Life\ Installer/Second\ Life\ Viewer\ 2.app  /Applications -hdiutil detach /Volumes/Second\ Life\ Installer -open /Applications/Second\ Life\ Viewer\ 2.app
\ No newline at end of file +open ../Resources/mac-updater.app --args -dmg "$1" -name "Second Life Viewer 2" | 
