[118302] trunk/base/src/registry2.0/portimage.tcl

cal at macports.org cal at macports.org
Sat Mar 29 09:41:17 PDT 2014


Revision: 118302
          https://trac.macports.org/changeset/118302
Author:   cal at macports.org
Date:     2014-03-29 09:41:17 -0700 (Sat, 29 Mar 2014)
Log Message:
-----------
base: Print a message when rolling back on user request, prevent rollback interruption

Modified Paths:
--------------
    trunk/base/src/registry2.0/portimage.tcl

Modified: trunk/base/src/registry2.0/portimage.tcl
===================================================================
--- trunk/base/src/registry2.0/portimage.tcl	2014-03-29 16:36:58 UTC (rev 118301)
+++ trunk/base/src/registry2.0/portimage.tcl	2014-03-29 16:41:17 UTC (rev 118302)
@@ -40,6 +40,8 @@
 package require macports 1.0
 package require Pextlib 1.0
 
+package require Tclx
+
 set UI_PREFIX "--> "
 
 # Port Images are installations of the destroot of a port into a compressed
@@ -539,6 +541,19 @@
                         lappend rollback_filelist $file
                     }
                 }
+            } catch {{POSIX SIG SIGINT} eCode eMessage} {
+                # Pressing ^C will (often?) print "^C" to the terminal; send
+                # a linebreak so our message appears after that.
+                ui_msg ""
+                ui_msg "Control-C pressed, rolling back, please wait."
+                # can't do it here since we're already inside a transaction
+                set deactivate_this yes
+                throw
+            } catch {{POSIX SIG SIGTERM} eCode eMessage} {
+                ui_msg "SIGTERM received, rolling back, please wait."
+                # can't do it here since we're already inside a transaction
+                set deactivate_this yes
+                throw
             } catch {*} {
                 ui_debug "Activation failed, rolling back."
                 # can't do it here since we're already inside a transaction
@@ -547,6 +562,10 @@
             }
         }
     } catch {*} {
+        # This code must run to completion, or the installation might be left
+        # in an inconsistent state
+        signal block {TERM INT}
+
         # roll back activation of this port
         if {[info exists deactivate_this]} {
             _deactivate_contents $port $rollback_filelist yes yes
@@ -563,6 +582,11 @@
                 activate [$entry name] [$entry version] [$entry revision] [$entry variants] [list ports_activate_no-exec $noexec]
             }
         }
+
+        # We've completed all critical operations, re-enable the TERM and INT
+        # signals.
+        signal unblock {TERM INT}
+
         # remove temp image dir
         ::file delete -force $extracted_dir
         throw
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/macports-changes/attachments/20140329/4327be67/attachment.html>


More information about the macports-changes mailing list