Robert Knight
a8dcab1f00
Add handling in the UI for failed update installation under Windows.
...
In the event of a failed update, display the details in a message
box and allow the user to restart the old application once the
update has been reverted.
Details of the problem will also be written to the log file.
2011-08-23 20:15:57 +01:00
Robert Knight
3a7d41e630
Avoid closing the updater dialog when the window close button is clicked.
...
This prevents the user closing the dialog whilst the update is in
progress. Once the update has been installed, the user can click
the 'Finish' button to close the dialog and restart the application.
2011-08-23 20:03:55 +01:00
Robert Knight
448d43c5e0
Remove extra new line
2011-08-23 20:00:06 +01:00
Robert Knight
d16da069e9
Add Win++ library to external
...
This is a thin wrapper around the Win32 API used in the Win32
Updater Dialog implementation.
2011-08-23 19:54:52 +01:00
Robert Knight
5cd7d22192
Add Windows implementation of updater dialog
...
The Windows implementation uses Win++, a thin header-only wrapper
around the Windows API
2011-08-23 19:53:03 +01:00
Robert Knight
fe3fd4e05b
Compile the updater as a universal 32/64bit binary on Mac
2011-08-23 16:46:09 +01:00
Robert Knight
e294c35965
Rename UpdaterOptions::script to UpdaterOptions::scriptPath for clarity
2011-08-23 16:34:34 +01:00
Robert Knight
214f2273b9
Fix warning about object being leaked from update installer thread due to a missing autorelease pool
...
Allocate an NSAutoreleasePool in the updater thread and release it just
before the thread exits.
2011-08-23 16:30:17 +01:00
Robert Knight
ff21b77ec1
Add a Cocoa UI for the updater on Mac
...
* Link the updater application with the Cocoa framework on Mac
* Construct a UI in code and display it when running the main install process.
Usually UIs on Mac are contained in a .nib file created with Interface Builder
but in this case the UI is created directly in code to meet the single-binary requirement,
although it may be possible to bundle the .nib into the binary itself.
2011-08-23 16:20:23 +01:00
Robert Knight
eeeafb2c1a
Implement restart of main application once the update is installed.
...
* Add support for entries in the update script being marked with
a boolean <is-main-binary> attribute which is set to true for the main binary.
* In UpdateInstaller::restartMainApp(), look for the file marked with <is-main-binary>
and restart it after installation. With the current structure, this requires that
the main binary is included in the update, which has always been the case up till now.
If we find that we want to do updates that do not affect the main binary, the
<is-main-binary> attribute could be replaced with a <main-binary> string value
at the top of the XML file.
2011-08-23 12:59:04 +01:00
Robert Knight
96b76b0443
Fix incorrect signature for button clicked slot.
...
The first argument to the slot is the sender widget.
2011-08-23 12:51:35 +01:00
Robert Knight
85c4c58dc9
Add a basic GTK update installation dialog and a stub function in UpdateInstaller to restart the main app after the update is complete.
...
* Add optional GTK mode to the updater build. This pulls in a large number of extra dependencies,
but dependencies which should be fairly ubiquitous on Linux systems. If these dependencies prove
to be a problem we could look at providing an alternative, more basic UI and loading the appropriate
UI dynamically.
* Implement update progress dialog for GTK. The dialog needs visual polish but is functional.
2011-08-23 12:29:47 +01:00
Robert Knight
f1367671b6
Use Windows/Unix versions of test binary names in test-update.rb depending on the host OS
2011-08-23 10:31:35 +01:00
Robert Knight
b43d9f33bf
Add missing <string.h> include
2011-08-23 09:40:41 +01:00
Robert Knight
e02e0b21c9
Implement process elevation on Windows using code from existing updater
2011-08-22 19:32:01 +01:00
Robert Knight
25e5a1c66c
Make FileOps::createSymLink() a no-op which logs a warning under Windows instead of reporting an error.
...
This allows the cross-platform unit test to pass on Windows, since it includes creation of a symlink.
2011-08-22 19:21:29 +01:00
Robert Knight
7c62b4c7af
Fix argv[0] not being correctly set to binary path under Windows
...
Add the executable to the start of the command line for the new process in ProcessUtils::runAsync()
2011-08-22 19:17:35 +01:00
Robert Knight
66a6afcb01
Fix typo in FileOps::extractFromZip()
...
Use the correct parameter in the exception message.
2011-08-22 19:08:28 +01:00
Robert Knight
a056e631e4
Adjust the filename of the main app binary to app.exe in the test file_list.xml on Windows
2011-08-22 19:05:31 +01:00
Robert Knight
f35d935eab
Add error code from GetLastError() to IOException::what() message
2011-08-22 18:57:03 +01:00
Robert Knight
50a21f004d
Implement waiting for parent updater process to finish.
...
* Set the --wait argument when launching new updater processes with the ID of the process to wait for.
* Add ProcessUtils::currentProcessId() utility method and PLATFORM_PID define
2011-08-22 18:46:03 +01:00
Robert Knight
57e13d941b
Fix dir iteration on Windows
...
Instead of passing the directory to FindFirstFile(), a wildcard
of the form C:\Path\To\Dir\* needs to be passed.
2011-08-22 18:28:42 +01:00
Robert Knight
66dc8d4720
Catch any file I/O exceptions reported whilst cleaning up the updater directory in UpdateInstaller::cleanup()
2011-08-22 18:04:52 +01:00
Robert Knight
7893fe500a
On Windows, look for the zip tool as part of the Cygwin installation instead of relying on it being in the current path.
...
This is specific to the configuration of build-windows.
2011-08-22 18:03:53 +01:00
Robert Knight
c0d1807252
Implement several FileOps functions under Win32
2011-08-22 18:03:27 +01:00
Robert Knight
2b772611ff
Print details of any exceptions that escape UpdateInstaller::run()
2011-08-22 18:02:51 +01:00
Robert Knight
d7ecf3722a
Implement ProcessUtils::runAsync() and ProcessUtils::currentProcessPath() on Win32
2011-08-22 18:02:18 +01:00
Robert Knight
b57696aa18
Use the correct binary names in the updater test on Win32.
...
Binary names on Windows end with '.exe'
2011-08-22 17:02:09 +01:00
Robert Knight
cf606b0cfe
Catch IO exceptions when trying to remove the existing write-access test file.
2011-08-22 17:00:15 +01:00
Robert Knight
f8d7cb3b4a
Implement FileOps::touch() and FileOps::removeFile() for Win32
2011-08-22 16:59:23 +01:00
Robert Knight
6418b44924
Use zlib from external/zlib to build the minizip library on Win32
2011-08-22 16:37:53 +01:00
Robert Knight
e11cc9193a
Fix MSVC++ compile error due to non-const array dimension values.
2011-08-22 16:36:39 +01:00
Robert Knight
6a264f80b7
Add missing object file to zlib Makefile
2011-08-22 16:34:35 +01:00
Robert Knight
584ff64b49
Add ZLib 1.2.5 to external/zlib from http://www.winimage.com/zLibDll/minizip.html
2011-08-22 16:03:42 +01:00
Robert Knight
b5adf1eb37
Skip compiling the FileOps::toUnixPermissions() helper method on Win32
2011-08-22 15:52:06 +01:00
Robert Knight
48c6a7d5d1
Avoid trying to link against the pthreads library when building on Win32
2011-08-22 15:51:50 +01:00
Robert Knight
fc6101a9ec
Add ProcessUtils::runSync() stub for Windows and fix compilation of waitForProcess()
2011-08-22 15:51:15 +01:00
Robert Knight
9530256732
Get Log and UpdaterOptions classes compiling under Win32
2011-08-22 15:50:39 +01:00
Robert Knight
f4c6f1c1d7
Dir iterator implementation for Win32 - Untested
2011-08-22 15:50:15 +01:00
Robert Knight
28b9d50f0a
Update the TODO file after Mac testing and make a note that elevation on Mac only works when running the app directly on the Mac (as opposed to over an SSH session).
2011-08-22 14:55:31 +01:00
Robert Knight
8149afd091
Implement ProcessUtils::currentProcessPath() on Mac
...
This allows the basic updater unit test to pass.
2011-08-22 14:44:16 +01:00
Robert Knight
4d7ddc91d9
Merge branch 'master' of ssh://gitweb/git/desktop/standalone-updater
2011-08-22 14:39:17 +01:00
Robert Knight
07ed391080
Fix incorrect buffer size calculation in ProcessUtils::runAsyncUnix()
...
The buffer needs one entry for the executable path, args.size()
args for the supplied arguments and one further entry for the null
terminator.
2011-08-22 14:37:39 +01:00
Robert Knight
9516887d48
Fix ProcessUtils compilation on Mac
...
* Enable the Security framework
* Fix variable names in ProcessUtils::runElevatedMac()
2011-08-22 14:20:26 +01:00
Robert Knight
4bcf379839
Fix minizip library compilation under OS X
...
Set the USE_FILE32API flag on Mac since fopen64()
and several related calls do not exist on that platform which
uses 64bit I/O in the standard file methods.
See http://stackoverflow.com/questions/4003479/how-to-enable-large-file-support-under-darwin
for details.
2011-08-22 14:19:07 +01:00
Robert Knight
ced6b097b4
Remove unnecessary <malloc.h> include which is not found on Mac
2011-08-22 14:02:28 +01:00
Robert Knight
5360d05867
Remove dependency on Boost::Thread and use the TinyThread library instead.
...
This saves the need to install Boost::Thread on each of the build systems.
2011-08-22 14:00:00 +01:00
Robert Knight
d295b0323c
Add support for the old-format updater command-line syntax.
...
The old syntax uses a series of Key=Value pairs, instead of
the more standard "--key value" syntax.
This is required so that the old Mendeley Desktop versions can
launch the new updater.
2011-08-22 12:59:08 +01:00
Robert Knight
a280b5d3d1
Support parsing update scripts structured for backwards compatibility with Mendeley Desktop clients <= 1.0
...
* Support XML scripts where the V3 script is wrapped in an <update-v3> element.
* Add some basic unit testing facilities - if we find that something more sophisticated is needed,
we can look at using cppunit, googletest or similar.
* Add a test that parsing the same script with both the old and the new structure
yields equivalent UpdateScript instances.
2011-08-22 12:06:48 +01:00
Robert Knight
c1a5cce3da
Convert Qt permission flags (from QFile::Permissions) to Unix mode_t flags.
...
This fixes the permissions set on files by the updater.
2011-08-22 10:01:25 +01:00