added mechanism for install scripts to indicate a failed install and for update service to note the failure; modified mac installer to write marker on error.
parent
1368a94f01
commit
ec7d36f6cf
|
|
@ -66,6 +66,7 @@ const char *gUpdateURL;
|
|||
const char *gProductName;
|
||||
const char *gBundleID;
|
||||
const char *gDmgFile;
|
||||
const char *gMarkerPath;
|
||||
|
||||
void *updatethreadproc(void*);
|
||||
|
||||
|
|
@ -342,6 +343,10 @@ int parse_args(int argc, char **argv)
|
|||
{
|
||||
gDmgFile = argv[j];
|
||||
}
|
||||
else if ((!strcmp(argv[j], "-marker")) && (++j < argc))
|
||||
{
|
||||
gMarkerPath = argv[j];;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
@ -370,6 +375,7 @@ int main(int argc, char **argv)
|
|||
gProductName = NULL;
|
||||
gBundleID = NULL;
|
||||
gDmgFile = NULL;
|
||||
gMarkerPath = NULL;
|
||||
parse_args(argc, argv);
|
||||
if ((gUpdateURL == NULL) && (gDmgFile == NULL))
|
||||
{
|
||||
|
|
@ -497,11 +503,18 @@ int main(int argc, char **argv)
|
|||
NULL,
|
||||
&retval_mac);
|
||||
}
|
||||
|
||||
|
||||
if(gMarkerPath != 0)
|
||||
{
|
||||
// Create a install fail marker that can be used by the viewer to
|
||||
// detect install problems.
|
||||
std::ofstream stream(gMarkerPath);
|
||||
if(stream) stream << -1;
|
||||
}
|
||||
exit(-1);
|
||||
} else {
|
||||
exit(0);
|
||||
}
|
||||
|
||||
// Don't dispose of things, just exit. This keeps the update thread from potentially getting hosed.
|
||||
exit(0);
|
||||
|
||||
if(gWindow != NULL)
|
||||
{
|
||||
|
|
@ -713,6 +726,7 @@ static OSErr findAppBundleOnDiskImage(FSRef *parent, FSRef *app)
|
|||
// This is the one. Return it.
|
||||
*app = ref;
|
||||
found = true;
|
||||
break;
|
||||
} else {
|
||||
llinfos << name << " is not the bundle we are looking for; move along" << llendl;
|
||||
}
|
||||
|
|
@ -721,9 +735,13 @@ static OSErr findAppBundleOnDiskImage(FSRef *parent, FSRef *app)
|
|||
}
|
||||
}
|
||||
}
|
||||
while(!err && !found);
|
||||
while(!err);
|
||||
|
||||
llinfos << "closing the iterator" << llendl;
|
||||
|
||||
FSCloseIterator(iterator);
|
||||
|
||||
llinfos << "closed" << llendl;
|
||||
}
|
||||
|
||||
if(!err && !found)
|
||||
|
|
@ -1084,12 +1102,19 @@ void *updatethreadproc(void*)
|
|||
throw 0;
|
||||
}
|
||||
|
||||
sendProgress(0, 0, CFSTR("Searching for the app bundle..."));
|
||||
err = findAppBundleOnDiskImage(&mountRef, &sourceRef);
|
||||
if(err != noErr)
|
||||
{
|
||||
llinfos << "Couldn't find application bundle on mounted disk image." << llendl;
|
||||
throw 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
llinfos << "found the bundle." << llendl;
|
||||
}
|
||||
|
||||
sendProgress(0, 0, CFSTR("Preparing to copy files..."));
|
||||
|
||||
FSRef asideRef;
|
||||
char aside[MAX_PATH]; /* Flawfinder: ignore */
|
||||
|
|
|
|||
|
|
@ -72,8 +72,19 @@ int ll_install_update(std::string const & script, std::string const & updatePath
|
|||
LLProcessLauncher launcher;
|
||||
launcher.setExecutable(actualScriptPath);
|
||||
launcher.addArgument(updatePath);
|
||||
launcher.addArgument(ll_install_failed_marker_path().c_str());
|
||||
int result = launcher.launch();
|
||||
launcher.orphan();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
std::string const & ll_install_failed_marker_path(void)
|
||||
{
|
||||
static std::string path;
|
||||
if(path.empty()) {
|
||||
path = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "SecondLifeInstallFailed.marker");
|
||||
}
|
||||
return path;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,4 +47,11 @@ int ll_install_update(
|
|||
LLInstallScriptMode mode=LL_COPY_INSTALL_SCRIPT_TO_TEMP); // Run in place or copy to temp?
|
||||
|
||||
|
||||
//
|
||||
// Returns the path which points to the failed install marker file, should it
|
||||
// exist.
|
||||
//
|
||||
std::string const & ll_install_failed_marker_path(void);
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -378,7 +378,19 @@ bool LLUpdaterServiceImpl::onMainLoop(LLSD const & event)
|
|||
{
|
||||
mTimer.stop();
|
||||
LLEventPumps::instance().obtain("mainloop").stopListening(sListenerName);
|
||||
mUpdateChecker.check(mProtocolVersion, mUrl, mPath, mChannel, mVersion);
|
||||
|
||||
// Check for failed install.
|
||||
if(LLFile::isfile(ll_install_failed_marker_path()))
|
||||
{
|
||||
// TODO: notify the user.
|
||||
llinfos << "found marker " << ll_install_failed_marker_path() << llendl;
|
||||
llinfos << "last install attempt failed" << llendl;
|
||||
LLFile::remove(ll_install_failed_marker_path());
|
||||
}
|
||||
else
|
||||
{
|
||||
mUpdateChecker.check(mProtocolVersion, mUrl, mPath, mChannel, mVersion);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,3 +1,9 @@
|
|||
#! /bin/bash
|
||||
|
||||
open ../Resources/mac-updater.app --args -dmg "$1" -name "Second Life Viewer 2"
|
||||
#
|
||||
# The first argument contains the path to the installer app. The second a path
|
||||
# to a marker file which should be created if the installer fails.q
|
||||
#
|
||||
|
||||
open ../Resources/mac-updater.app --args -dmg "$1" -name "Second Life Viewer 2" -marker "$2"
|
||||
exit 0
|
||||
|
|
|
|||
|
|
@ -106,6 +106,12 @@ int ll_install_update(std::string const &, std::string const &, LLInstallScriptM
|
|||
return 0;
|
||||
}
|
||||
|
||||
std::string const & ll_install_failed_marker_path()
|
||||
{
|
||||
static std::string wubba;
|
||||
return wubba;
|
||||
}
|
||||
|
||||
/*
|
||||
#pragma warning(disable: 4273)
|
||||
llus_mock_llifstream::llus_mock_llifstream(const std::string& _Filename,
|
||||
|
|
|
|||
Loading…
Reference in New Issue