Commit Graph

195 Commits

Author SHA1 Message Date
Robert Knight a42e9475b5 Disable the window close button in the update dialog on Mac.
This prevents the dialog being closed part-way through update installation,
leaving the user unable to restart the application afterwards by clicking
the 'Finish' button.
2011-08-24 10:56:08 +01:00
Robert Knight 91f402afa2 Fix warnings about conversion from string literal to char*
UpdaterOptions::parse() will probably not have a need to modify its
arguments but for consistency with the declaration of main() it takes a char*,
so strdup() the strings.
2011-08-24 10:52:07 +01:00
Robert Knight 4c574bde87 Merge branch 'master' of ssh://gitweb/git/desktop/standalone-updater 2011-08-24 10:46:17 +01:00
Robert Knight 3a7b636f42 Fix possible out-of-bounds array access if an empty command-line argument is passed to ProcessUtils::runElevated() on Windows 2011-08-24 10:30:06 +01:00
Robert Knight 61e7561615 Refactor similar UpdateDialogGtk::Message and UpdateDialogWin32::Message class into a single shared UpdateMessage class. 2011-08-24 10:17:57 +01:00
Robert Knight 0ca5928f08 Merge branch 'master' of ssh://gitweb/git/desktop/standalone-updater 2011-08-24 09:38:38 +01:00
Robert Knight f4199ed706 Remove logging spam 2011-08-23 23:59:09 +01:00
Robert Knight 4f00c51c8f Write log output to a file instead of just stderr
* Log output to a file (currently update-log.txt in the updater's current directory)
 * Use correct stream type for Log::m_output
2011-08-23 23:54:37 +01:00
Robert Knight a5bf5becad Aesthetic tweaks to the GTK version of the update dialog
* Make the window non-resizable
 * Left-align the label
 * Right-align the 'Finish' button
 * Center the window
2011-08-23 23:46:49 +01:00
Robert Knight 6dac1d8c0e Add pre-built zlib library to build tree for Windows builds
The zlib build system is not integrated with the updater's build
system.  Rather than write a small CMakeLists.txt for the build,
this commit just adds a pre-built version of zlib
2011-08-23 20:38:20 +01:00
Robert Knight 36a296204c Add a further TODO entry 2011-08-23 20:32:12 +01:00
Robert Knight 812cf89c07 Update the TODO file with finished tasks and new tasks 2011-08-23 20:26:41 +01:00
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