Index: trunk/ippTools/src/difftool.c
===================================================================
--- trunk/ippTools/src/difftool.c	(revision 26381)
+++ trunk/ippTools/src/difftool.c	(revision 26567)
@@ -55,4 +55,5 @@
 static bool topurgedskyfileMode(pxConfig *config);
 static bool toscrubbedskyfileMode(pxConfig *config);
+static bool tofullskyfileMode(pxConfig *config);
 
 
@@ -94,7 +95,8 @@
         MODECASE(DIFFTOOL_MODE_EXPORTRUN,             exportrunMode);
         MODECASE(DIFFTOOL_MODE_IMPORTRUN,             importrunMode);
-        MODECASE(DIFFTOOL_MODE_TOCLEANEDSKYFILE,   tocleanedskyfileMode);
-        MODECASE(DIFFTOOL_MODE_TOPURGEDSKYFILE,    topurgedskyfileMode);
-        MODECASE(DIFFTOOL_MODE_TOSCRUBBEDSKYFILE,  toscrubbedskyfileMode);
+        MODECASE(DIFFTOOL_MODE_TOCLEANEDSKYFILE,      tocleanedskyfileMode);
+        MODECASE(DIFFTOOL_MODE_TOPURGEDSKYFILE,       topurgedskyfileMode);
+        MODECASE(DIFFTOOL_MODE_TOSCRUBBEDSKYFILE,     toscrubbedskyfileMode);
+        MODECASE(DIFFTOOL_MODE_TOFULLSKYFILE,         tofullskyfileMode);
 
         default:
@@ -2036,4 +2038,11 @@
   PXOPT_LOOKUP_STR(skycell_id, config->args, "-skycell_id", true, false);
 
+
+  psS64 magicked = 0;
+  if (!strcmp(data_state, "full")) {
+      PXOPT_LOOKUP_S64(set_magicked, config->args, "-magicked", 0, false);
+      magicked = set_magicked;
+  } 
+
   psString query = pxDataGet("difftool_change_skyfile_data_state.sql");
 
@@ -2043,7 +2052,18 @@
   }
 
+  psString set_magicked_skyfile = psStringCopy("");
+  psString set_magicked_run = psStringCopy("");
+  if (magicked != 0 && !strcmp(data_state, "full")) {
+    psStringAppend(&set_magicked_skyfile,  "\n , diffSkyfile.magicked = %" PRId64, magicked);
+    psStringAppend(&set_magicked_run,      "\n , diffRun.magicked = %" PRId64, magicked);
+
+  } else if (!strcmp(data_state, "cleaned") || !strcmp(data_state, "purged")) {
+    psStringAppend(&set_magicked_skyfile, "\n, diffSkyfile.magicked = IF(diffSkyfile.magicked = 0, 0, -1)");
+    psStringAppend(&set_magicked_run, "\n, diffRun.magicked = IF(diffRun.magicked = 0, 0, -1)");
+  }
+
   // Uses the unconstrained (diffRun.state [NEED NOT EQUAL] run_state) version from warptool.c
 
-  if (!p_psDBRunQueryF(config->dbh, query, data_state, diff_id, skycell_id)) {
+  if (!p_psDBRunQueryF(config->dbh, query, data_state, set_magicked_skyfile, diff_id, skycell_id)) {
     psError(PS_ERR_UNKNOWN, false, "database error");
     // rollback
@@ -2052,10 +2072,12 @@
     }
     psError(PS_ERR_UNKNOWN, false, "database error");
+    psFree(set_magicked_skyfile);
     return(false);
   }
+  psFree(set_magicked_skyfile);
   psFree(query);
 
   query = pxDataGet("difftool_change_run_state.sql");
-  if (!p_psDBRunQueryF(config->dbh, query, data_state, diff_id, data_state)) {
+  if (!p_psDBRunQueryF(config->dbh, query, data_state, set_magicked_run, diff_id, data_state)) {
     // rollback
     if (!psDBRollback(config->dbh)) {
@@ -2063,4 +2085,5 @@
     }
     psError(PS_ERR_UNKNOWN, false, "database error");
+    psFree(set_magicked_run);
     return(false);
   }
@@ -2068,6 +2091,8 @@
   if (!psDBCommit(config->dbh)) {
     psError(PS_ERR_UNKNOWN, false, "database error");
+    psFree(set_magicked_run);
     return(false);
   }
+  psFree(set_magicked_run);
 
   return(true);
@@ -2082,4 +2107,7 @@
 static bool toscrubbedskyfileMode(pxConfig *config) {
   return change_skyfile_data_state(config, "scrubbed", "goto_scrubbed");
+}
+static bool tofullskyfileMode(pxConfig *config) {
+  return change_skyfile_data_state(config, "full", "update");
 }
 
