Revision: 839 http://trac.macosforge.org/projects/darwinbuild/changeset/839 Author: wsiegrist@apple.com Date: 2010-06-14 13:54:32 -0700 (Mon, 14 Jun 2010) Log Message: ----------- Add -r option to tell finder to restart when finished. Modified Paths: -------------- branches/PR-7872907/darwinup/Utils.cpp branches/PR-7872907/darwinup/Utils.h branches/PR-7872907/darwinup/darwinup.1 branches/PR-7872907/darwinup/main.cpp Modified: branches/PR-7872907/darwinup/Utils.cpp =================================================================== --- branches/PR-7872907/darwinup/Utils.cpp 2010-06-14 19:13:53 UTC (rev 838) +++ branches/PR-7872907/darwinup/Utils.cpp 2010-06-14 20:54:32 UTC (rev 839) @@ -402,6 +402,20 @@ return -1; } + +int tell_finder_to_restart() { + int res = 0; + + const char *args[] = { + "/usr/bin/osascript", "-e", + "tell app \"Finder\" to restart", + NULL, + }; + + res = exec_with_args(args); + + return res; +} #endif void __data_hex(FILE* f, uint8_t* data, uint32_t size) { @@ -425,4 +439,3 @@ fprintf(stdout, "==============================================" "=======================================\n"); } - Modified: branches/PR-7872907/darwinup/Utils.h =================================================================== --- branches/PR-7872907/darwinup/Utils.h 2010-06-14 19:13:53 UTC (rev 838) +++ branches/PR-7872907/darwinup/Utils.h 2010-06-14 20:54:32 UTC (rev 839) @@ -82,6 +82,7 @@ #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 int build_number_for_path(char** build, const char* path); +int tell_finder_to_restart(); #endif void __data_hex(FILE* f, uint8_t* data, uint32_t size); Modified: branches/PR-7872907/darwinup/darwinup.1 =================================================================== --- branches/PR-7872907/darwinup/darwinup.1 2010-06-14 19:13:53 UTC (rev 838) +++ branches/PR-7872907/darwinup/darwinup.1 2010-06-14 20:54:32 UTC (rev 839) @@ -61,6 +61,9 @@ Prefix path. Normally, darwinup will operate on the boot partition. You can use the -p option to have darwinup work on another partition. You can provide any arbitrary path, it does not need to be a mount point. +.It \-r +Restart. Gracefully restart after all operations are complete by telling +Finder to restart. .It \-v Verbose. This option causes darwinup to print extra information. You can pass 2 or 3 v's for even more information, but that is usually only needed Modified: branches/PR-7872907/darwinup/main.cpp =================================================================== --- branches/PR-7872907/darwinup/main.cpp 2010-06-14 19:13:53 UTC (rev 838) +++ branches/PR-7872907/darwinup/main.cpp 2010-06-14 20:54:32 UTC (rev 839) @@ -56,6 +56,9 @@ fprintf(stderr, " -f force operation to succeed at all costs \n"); fprintf(stderr, " -n dry run \n"); fprintf(stderr, " -p DIR operate on roots under DIR (default: /) \n"); +#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 + fprintf(stderr, " -r gracefully restart when finished \n"); +#endif fprintf(stderr, " -v verbose (use -vv for extra verbosity) \n"); fprintf(stderr, " \n"); fprintf(stderr, "commands: \n"); @@ -106,11 +109,12 @@ char* path = NULL; #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 bool disable_automation = false; + bool restart = false; #endif int ch; #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 - while ((ch = getopt(argc, argv, "dfnp:vh")) != -1) { + while ((ch = getopt(argc, argv, "dfnp:rvh")) != -1) { #else while ((ch = getopt(argc, argv, "fnp:vh")) != -1) { #endif @@ -140,6 +144,11 @@ } join_path(&path, optarg, "/"); break; +#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 + case 'r': + restart = true; + break; +#endif case 'v': verbosity <<= 1; verbosity |= VERBOSE; @@ -159,7 +168,8 @@ if (dryrun) IF_DEBUG("option: dry run\n"); if (force) IF_DEBUG("option: forcing operations\n"); #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 - if (!disable_automation) IF_DEBUG("option: helpful automation disabled\n"); + if (disable_automation) IF_DEBUG("option: helpful automation disabled\n"); + if (restart) IF_DEBUG("option: restart when finished\n"); #endif if (!path) { @@ -254,6 +264,12 @@ } free(sle_path); } + if (restart && res == 0) { + res = tell_finder_to_restart(); + if (res) fprintf(stderr, "Warning: tried to tell Finder to restart" + "but failed.\n"); + res = 0; + } #endif }
participants (1)
-
source_changes@macosforge.org