diff options
| author | Nat Goodspeed <nat@lindenlab.com> | 2013-10-22 01:35:01 -0400 | 
|---|---|---|
| committer | Nat Goodspeed <nat@lindenlab.com> | 2013-10-22 01:35:01 -0400 | 
| commit | 8881b47d22a7cd17824e8162e0658af71bbe3dea (patch) | |
| tree | ed7eb472de76c23f30f513ff942b5f23c524dd25 /indra/viewer_components/updater/scripts | |
| parent | c7057c141c38492bfdc2bfe9d82de97a7364f01b (diff) | |
MAINT-3331: On update, remove com.secondlife.indra.viewer.savedState.
Diffstat (limited to 'indra/viewer_components/updater/scripts')
| -rwxr-xr-x | indra/viewer_components/updater/scripts/darwin/update_install.py | 37 | 
1 files changed, 32 insertions, 5 deletions
| diff --git a/indra/viewer_components/updater/scripts/darwin/update_install.py b/indra/viewer_components/updater/scripts/darwin/update_install.py index 2fc6fcdb29..10d507c9ef 100755 --- a/indra/viewer_components/updater/scripts/darwin/update_install.py +++ b/indra/viewer_components/updater/scripts/darwin/update_install.py @@ -17,6 +17,7 @@ $/LicenseInfo$  import os  import sys  import cgitb +from contextlib import contextmanager  import errno  import glob  import plistlib @@ -32,6 +33,11 @@ import Tkinter, tkMessageBox  TITLE = "Second Life Viewer Updater"  # Magic bundle identifier used by all Second Life viewer bundles  BUNDLE_IDENTIFIER = "com.secondlife.indra.viewer" +# Magic OS directory name that causes Cocoa viewer to crash on OS X 10.7.5 +# (see MAINT-3331) +STATE_DIR = os.path.join( +    os.environ["HOME"], "Library", "Saved Application State", +    BUNDLE_IDENTIFIER + ".savedState")  # Global handle to the MessageFrame so we can update message  FRAME = None @@ -137,6 +143,23 @@ def write_marker(markerfile, markertext):          log("%s exception: %s" % (err.__class__.__name__, err))  # **************************************************************************** +#   Utility +# **************************************************************************** +@contextmanager +def allow_errno(errn): +    """ +    Execute body of 'with' statement, accepting OSError with specific errno +    'errn'. Propagate any other exception, or an OSError with any other errno. +    """ +    try: +        # run the body of the 'with' statement +        yield +    except OSError, err: +        # unless errno == passed errn, re-raise the exception +        if err.errno != errn: +            raise + +# ****************************************************************************  #   Main script logic  # ****************************************************************************  def main(dmgfile, markerfile, markertext): @@ -158,12 +181,9 @@ def main(dmgfile, markerfile, markertext):          # Move the old updater.log file out of the way          logname = os.path.join(logsdir, "updater.log") -        try: +        # Nonexistence is okay. Anything else, not so much. +        with allow_errno(errno.ENOENT):              os.rename(logname, logname + ".old") -        except OSError, err: -            # Nonexistence is okay. Anything else, not so much. -            if err.errno != errno.ENOENT: -                raise          # Open new updater.log.          global LOGF @@ -345,6 +365,13 @@ def main(dmgfile, markerfile, markertext):              log("touch " + appdir)              os.utime(appdir, None)      # set to current time +            # MAINT-3331: remove STATE_DIR. Empirically, this resolves a +            # persistent, mysterious crash after updating our viewer on an OS +            # X 10.7.5 system. +            log("rm -rf '%s'" % STATE_DIR) +            with allow_errno(errno.ENOENT): +                shutil.rmtree(STATE_DIR) +              command = ["open", appdir]              log(' '.join(command))              subprocess.check_call(command, stdout=LOGF, stderr=subprocess.STDOUT) | 
