Index: branches/czw_branch/20101203/ippTools/share/chiptool_processedimfile.sql
===================================================================
--- branches/czw_branch/20101203/ippTools/share/chiptool_processedimfile.sql	(revision 30586)
+++ branches/czw_branch/20101203/ippTools/share/chiptool_processedimfile.sql	(revision 30587)
@@ -29,6 +29,8 @@
     rawImfile.magicked AS raw_magicked,
     rawImfile.burntool_state,
-    magicDSRun.state AS dsRun_state,
-    IFNULL(magicDSRun.magic_ds_id, 0) AS magic_ds_id
+    IFNULL(magicDSRun.magic_ds_id, 0) AS magic_ds_id,
+    IFNULL(magicDSRun.state,0) AS dsRun_state,
+    IFNULL(magicDSFile.fault,0) AS dsFile_fault,
+    IFNULL(magicDSFile.data_state,0) AS dsFile_data_state
 FROM chipRun
 JOIN chipImfile
@@ -43,2 +45,3 @@
 LEFT JOIN magicDSRun
     ON stage_id = chip_id AND stage = 'chip' AND magicDSRun.re_place AND magicDSRun.state != 'drop'
+LEFT JOIN magicDSFile ON magicDSRun.magic_ds_id = magicDSFile.magic_ds_id AND chipProcessedImfile.class_id = magicDSFile.component
Index: branches/czw_branch/20101203/ippTools/share/difftool_pendingcleanupskyfile.sql
===================================================================
--- branches/czw_branch/20101203/ippTools/share/difftool_pendingcleanupskyfile.sql	(revision 30586)
+++ branches/czw_branch/20101203/ippTools/share/difftool_pendingcleanupskyfile.sql	(revision 30587)
@@ -9,5 +9,5 @@
     USING(diff_id)
 WHERE
-   ((diffRun.state = 'goto_cleaned'  AND diffSkyfile.data_state = 'full')
+   ((diffRun.state = 'goto_cleaned'  AND (diffSkyfile.data_state = 'full' OR diffSkyfile.data_state = 'update'))
     OR
     (diffRun.state = 'goto_scrubbed' AND diffSkyfile.data_state != 'scrubbed')
Index: branches/czw_branch/20101203/ippTools/share/difftool_setskyfiletoupdate.sql
===================================================================
--- branches/czw_branch/20101203/ippTools/share/difftool_setskyfiletoupdate.sql	(revision 30586)
+++ branches/czw_branch/20101203/ippTools/share/difftool_setskyfiletoupdate.sql	(revision 30587)
@@ -1,11 +1,9 @@
 UPDATE diffRun
     JOIN diffSkyfile USING(diff_id)
-    LEFT JOIN magicDSRun ON (stage_id = diff_id AND stage = 'diff')
-    LEFT JOIN magicDSFile ON (magicDSRun.magic_ds_id = magicDSFile.magic_ds_id
-                              AND component = skycell_id)
 SET diffRun.state = 'update', 
-    diffSkyfile.data_state = 'update'
+    diffSkyfile.data_state = 'update',
+    diffSkyfile.fault = 0
     -- set hook %s
 WHERE diff_id = %lld
     AND (diffRun.state = 'cleaned' OR diffRun.state = 'update')
-    AND (diffSkyfile.data_state = 'cleaned')
+    AND (diffSkyfile.data_state = 'cleaned' OR diffSkyfile.data_state = 'update')
Index: branches/czw_branch/20101203/ippTools/share/magicdstool_setfiletoupdate.sql
===================================================================
--- branches/czw_branch/20101203/ippTools/share/magicdstool_setfiletoupdate.sql	(revision 30586)
+++ branches/czw_branch/20101203/ippTools/share/magicdstool_setfiletoupdate.sql	(revision 30587)
@@ -7,3 +7,3 @@
 WHERE magic_ds_id = %lld
     AND (magicDSRun.state = 'cleaned' OR magicDSRun.state = 'update')
-    AND (magicDSFile.data_state = 'cleaned')
+    AND (magicDSFile.data_state = 'cleaned' OR magicDSFile.data_state ='update')
Index: branches/czw_branch/20101203/ippTools/share/warptool_change_skyfile_data_state.sql
===================================================================
--- branches/czw_branch/20101203/ippTools/share/warptool_change_skyfile_data_state.sql	(revision 30586)
+++ branches/czw_branch/20101203/ippTools/share/warptool_change_skyfile_data_state.sql	(revision 30587)
@@ -1,5 +1,5 @@
 -- handle changes in warpSkyfile.data_state.
 -- Used for the modes tofullskyfile, tocleanedskyfile and topurgedskyfile
--- args are new data_state, string for magic hook, warp_id, skycell_id and current expected state for warpRun
+-- arguments are are new data_state, string for magic hook, warp_id, skycell_id
 UPDATE warpSkyfile
 JOIN warpRun USING(warp_id)
Index: branches/czw_branch/20101203/ippTools/share/warptool_scmap.sql
===================================================================
--- branches/czw_branch/20101203/ippTools/share/warptool_scmap.sql	(revision 30586)
+++ branches/czw_branch/20101203/ippTools/share/warptool_scmap.sql	(revision 30587)
@@ -12,4 +12,5 @@
     IFNULL(magicDSRun.magic_ds_id, 0) AS magic_ds_id,
     IFNULL(magicDSRun.state, 0) AS dsRun_state,
+    IFNULL(magicDSFile.data_state, 0) AS dsFile_data_state,
     IFNULL(magicDSFile.fault, 0) as dsFile_fault
 FROM warpRun
Index: branches/czw_branch/20101203/ippTools/share/warptool_setskyfiletoupdate.sql
===================================================================
--- branches/czw_branch/20101203/ippTools/share/warptool_setskyfiletoupdate.sql	(revision 30586)
+++ branches/czw_branch/20101203/ippTools/share/warptool_setskyfiletoupdate.sql	(revision 30587)
@@ -1,11 +1,9 @@
 UPDATE warpRun
     JOIN warpSkyfile USING(warp_id)
-    LEFT JOIN magicDSRun ON (stage_id = warp_id AND stage = 'warp')
-    LEFT JOIN magicDSFile ON (magicDSRun.magic_ds_id = magicDSFile.magic_ds_id
-                              AND component = skycell_id)
 SET warpRun.state = 'update', 
-    warpSkyfile.data_state = 'update'
+    warpSkyfile.data_state = 'update',
+    warpSkyfile.fault = 0
     -- set hook %s
 WHERE warp_id = %lld
     AND (warpRun.state = 'cleaned' OR warpRun.state = 'update')
-    AND (warpSkyfile.data_state = 'cleaned')
+    AND (warpSkyfile.data_state = 'cleaned' OR warpSkyfile.data_state = 'update')
Index: branches/czw_branch/20101203/ippTools/share/warptool_towarped.sql
===================================================================
--- branches/czw_branch/20101203/ippTools/share/warptool_towarped.sql	(revision 30586)
+++ branches/czw_branch/20101203/ippTools/share/warptool_towarped.sql	(revision 30587)
@@ -11,4 +11,5 @@
     exp_tag,
     workdir,
+    label,
     magicked,
     path_base,
@@ -23,4 +24,5 @@
         warpRun.state,
         warpRun.reduction,
+        warpRun.label,
         camRun.cam_id,
         rawExp.camera,
@@ -76,4 +78,5 @@
         warpRun.state,
         warpRun.reduction,
+        warpRun.label,
         camRun.cam_id,
         rawExp.camera,
Index: branches/czw_branch/20101203/ippTools/src/chiptool.c
===================================================================
--- branches/czw_branch/20101203/ippTools/src/chiptool.c	(revision 30586)
+++ branches/czw_branch/20101203/ippTools/src/chiptool.c	(revision 30587)
@@ -838,4 +838,6 @@
     PXOPT_COPY_S16(config->args, where, "-fault", "chipProcessedImfile.fault", "==");
 
+    PXOPT_LOOKUP_S16(fault, config->args, "-fault", false, false);
+
     if (!psListLength(where->list)
         && !psMetadataLookupBool(NULL, config->args, "-all")) {
@@ -874,4 +876,11 @@
     }
     psFree(query);
+
+    if (!fault) {
+        // If fault has not been supplied, don't revert update faults with the magic value
+        // We don't do this for new runs because then they would never complete
+        // quality should be used to drop bad components
+        psStringAppend(&query_update, " AND (chipProcessedImfile.fault != %d)", PXTOOL_DO_NOT_REVERT_FAULT);
+    }
     if (!p_psDBRunQuery(config->dbh, query_update)) {
         psError(PS_ERR_UNKNOWN, false, "database error");
@@ -1919,4 +1928,7 @@
     }
 
+    // we do not update components with the magic fault value. They are non-updateable
+    psStringAppend(&query, " AND (chipProcessedImfile.fault != %d)", PXTOOL_DO_NOT_REVERT_FAULT);
+
     if (!p_psDBRunQueryF(config->dbh, query, setHook, chip_id)) {
         psError(PS_ERR_UNKNOWN, false, "database error");
Index: branches/czw_branch/20101203/ippTools/src/difftool.c
===================================================================
--- branches/czw_branch/20101203/ippTools/src/difftool.c	(revision 30586)
+++ branches/czw_branch/20101203/ippTools/src/difftool.c	(revision 30587)
@@ -917,4 +917,6 @@
     PXOPT_COPY_S16(config->args, where, "-fault",     "fault", "==");
 
+    PXOPT_LOOKUP_S16(fault, config->args, "-fault", false, false);
+
     if (!psListLength(where->list) && !psMetadataLookupBool(NULL, config->args, "-all")) {
         psFree(where);
@@ -950,4 +952,10 @@
         psLogMsg("difftool", PS_LOG_INFO, "Deleted %" PRIu64 " rows", psDBAffectedRows(config->dbh));
 
+        if (!fault) {
+            // If fault has not been supplied, don't revert update faults with the magic value
+            // We don't do this for new runs because then they would never complete
+            // quality should be used to drop bad components
+            psStringAppend(&query_updated, " AND (diffSkyfile.fault != %d)", PXTOOL_DO_NOT_REVERT_FAULT);
+        }
         if (!p_psDBRunQuery(config->dbh, query_updated)) {
             psError(PS_ERR_UNKNOWN, false, "database error");
@@ -3198,4 +3206,7 @@
         psStringAppend(&query, " AND (diffSkyfile.skycell_id = '%s')", skycell_id);
     }
+    // we do not update components with the magic fault value. They are non-updateable
+    // (But can be recovered with "difftool -revertwarped -fault 26" (PXTOOL_DO_NOT_REVERT_FAULT)
+    psStringAppend(&query, " AND (diffSkyfile.fault != %d)", PXTOOL_DO_NOT_REVERT_FAULT);
 
     if (!p_psDBRunQueryF(config->dbh, query, setHook, diff_id)) {
Index: branches/czw_branch/20101203/ippTools/src/disttool.c
===================================================================
--- branches/czw_branch/20101203/ippTools/src/disttool.c	(revision 30586)
+++ branches/czw_branch/20101203/ippTools/src/disttool.c	(revision 30587)
@@ -1185,5 +1185,5 @@
     PXOPT_COPY_S64(config->args, where, "-stage_id", "stage_id", "==");
     PXOPT_COPY_STR(config->args, where, "-state", "state", "==");
-    PXOPT_COPY_STR(config->args, where, "-label", "label", "==");
+    pxAddLabelSearchArgs(config, where, "-label", "label", "==");
     PXOPT_COPY_S16(config->args, where, "-fault", "rcDSFileset.fault", "==");
 
Index: branches/czw_branch/20101203/ippTools/src/disttoolConfig.c
===================================================================
--- branches/czw_branch/20101203/ippTools/src/disttoolConfig.c	(revision 30586)
+++ branches/czw_branch/20101203/ippTools/src/disttoolConfig.c	(revision 30587)
@@ -197,5 +197,5 @@
     psMetadataAddS64(revertfilesetArgs, PS_LIST_TAIL, "-stage_id",0, "define stage_id", 0);
     psMetadataAddStr(revertfilesetArgs, PS_LIST_TAIL, "-state",   0, "define state", NULL);
-    psMetadataAddStr(revertfilesetArgs, PS_LIST_TAIL, "-label",   0, "define label", NULL);
+    psMetadataAddStr(revertfilesetArgs, PS_LIST_TAIL, "-label",   PS_META_DUPLICATE_OK, "define label", NULL);
     psMetadataAddS16(revertfilesetArgs, PS_LIST_TAIL, "-fault",   0, "define fault code", 0);
     psMetadataAddBool(revertfilesetArgs, PS_LIST_TAIL, "-all",    0, "revert all faulted runs", NULL);
Index: branches/czw_branch/20101203/ippTools/src/magicdstool.c
===================================================================
--- branches/czw_branch/20101203/ippTools/src/magicdstool.c	(revision 30586)
+++ branches/czw_branch/20101203/ippTools/src/magicdstool.c	(revision 30587)
@@ -1112,6 +1112,8 @@
 
     PXOPT_LOOKUP_STR(state, config->args, "-state", false, false);
+    PXOPT_LOOKUP_S16(fault, config->args, "-fault", false, false);
 
     psString queryFile = NULL;
+    bool stateIsUpdate = false;
     if (state) {
         if (! strcmp(state, "new") || !strcmp(state, "goto_restored")) {
@@ -1119,4 +1121,5 @@
         } else if (!strcmp(state, "update")) {
             queryFile = "magicdstool_revertupdated.sql";
+            stateIsUpdate = true;
         } else {
             psError(PXTOOLS_ERR_SYS, true, "%s is not a valid value for state", state);
@@ -1141,4 +1144,12 @@
     }
     psFree(where);
+
+    if (stateIsUpdate && !fault) {
+        // If fault has not been supplied, don't revert update faults with
+        // the magic "do not update" value
+        // We don't do this for new runs because then they would never complete
+        // quality should be used to drop bad components
+        psStringAppend(&query, " AND magicDSFile.fault != %d", PXTOOL_DO_NOT_REVERT_FAULT);
+    }
 
     if (!p_psDBRunQuery(config->dbh, query)) {
@@ -1744,4 +1755,8 @@
     }
 
+    // we do not update components with the magic fault value. They are non-updateable
+    // (But can be recovered with "magicdstool -revertdestreakedfile -fault 26" (PXTOOL_DO_NOT_REVERT_FAULT)
+    psStringAppend(&query, " AND (magicDSFile.fault != %d)", PXTOOL_DO_NOT_REVERT_FAULT);
+
     if (!p_psDBRunQueryF(config->dbh, query, setHook, magic_ds_id)) {
         psError(PS_ERR_UNKNOWN, false, "database error");
Index: branches/czw_branch/20101203/ippTools/src/pstamptool.c
===================================================================
--- branches/czw_branch/20101203/ippTools/src/pstamptool.c	(revision 30586)
+++ branches/czw_branch/20101203/ippTools/src/pstamptool.c	(revision 30587)
@@ -571,4 +571,6 @@
     PXOPT_COPY_S32(config->args, where, "-fault",      "fault", "==");
     PXOPT_COPY_STR(config->args, where, "-state",      "state", "==");
+    PXOPT_COPY_STR(config->args, where, "-reqType",     "reqType", "==");
+    PXOPT_COPY_STR(config->args, where, "-name",     "name", "LIKE");
     PXOPT_COPY_TIME(config->args, where, "-timestamp_begin", "timestamp", ">=");
     PXOPT_COPY_TIME(config->args, where, "-timestamp_end", "timestamp", "<=");
@@ -586,5 +588,5 @@
         psStringAppend(&query, ", state = '%s'", state);
         if (!strcmp(state, "goto_cleaned")) {
-            psStringAppend(&stateCheck, " AND state != 'cleaned'");
+            psStringAppend(&stateCheck, " AND (state != 'cleaned' AND state != 'goto_cleaned')");
         }
     }
Index: branches/czw_branch/20101203/ippTools/src/pstamptoolConfig.c
===================================================================
--- branches/czw_branch/20101203/ippTools/src/pstamptoolConfig.c	(revision 30586)
+++ branches/czw_branch/20101203/ippTools/src/pstamptoolConfig.c	(revision 30587)
@@ -104,4 +104,6 @@
     psMetadataAddS16(updatereqArgs, PS_LIST_TAIL, "-fault", 0,        "search by fault code", 0);
     psMetadataAddStr(updatereqArgs, PS_LIST_TAIL, "-state", 0,        "search by state", NULL);
+    psMetadataAddStr(updatereqArgs, PS_LIST_TAIL, "-reqType", 0,      "search by reqType", NULL);
+    psMetadataAddStr(updatereqArgs, PS_LIST_TAIL, "-name", 0,      "search by reqType (LIKE comparsion)", NULL);
     psMetadataAddStr(updatereqArgs, PS_LIST_TAIL, "-label", PS_META_DUPLICATE_OK, "search by pstampJob label (LIKE comparision)", NULL);
     psMetadataAddTime(updatereqArgs, PS_LIST_TAIL, "-timestamp_begin", 0, "search by timestamp (>=)", NULL);
Index: branches/czw_branch/20101203/ippTools/src/pxtools.h
===================================================================
--- branches/czw_branch/20101203/ippTools/src/pxtools.h	(revision 30586)
+++ branches/czw_branch/20101203/ippTools/src/pxtools.h	(revision 30587)
@@ -51,4 +51,7 @@
 # define MAX_ROWS 10e9
 # define PXTOOL_MODE_NONE 0x0
+// we do not revert or update components with this fault value
+// This is the same value as PSTAMP_GONE
+# define PXTOOL_DO_NOT_REVERT_FAULT 26
 
 bool pxIsValidState(const char *state);
Index: branches/czw_branch/20101203/ippTools/src/regtool.c
===================================================================
--- branches/czw_branch/20101203/ippTools/src/regtool.c	(revision 30586)
+++ branches/czw_branch/20101203/ippTools/src/regtool.c	(revision 30587)
@@ -211,5 +211,5 @@
   // convert regular class_id format to summitImfile.class_id format
   rep = psStringCopy(class_id);
-  psFree(class_id);
+
   class_id = rep;
   
@@ -320,5 +320,5 @@
   psStringSubstitute(&query,dateobs_end,"@DATEOBS_END@");
 
-  // fprintf(stderr,"%s",query);
+   fprintf(stderr,"%s",query);
 
   if (!p_psDBRunQuery(config->dbh, query)) {
@@ -345,5 +345,5 @@
   }
 
-  // fprintf (stderr, "found %ld rows\n", output->n);
+  fprintf (stderr, "found %ld rows\n", output->n);
   if (!psArrayLength(output)) {
     psTrace("regtool", PS_LOG_INFO, "no rows found");
@@ -370,5 +370,5 @@
     char *tmp_id = psMetadataLookupStr(&status,row,"summit_class_id");
     if (!status) {
-      //      fprintf (stderr, "incomplete on %s\n", psMetadataLookupStr(NULL,row,"exp_name"));
+            fprintf (stderr, "incomplete on %s\n", psMetadataLookupStr(NULL,row,"exp_name"));
         continue;
     }
@@ -440,5 +440,5 @@
         already_burned = false;
 
-	//	fprintf (stderr, "missing uri: %s %s\n", psMetadataLookupStr(NULL,row,"exp_name"), this_class_id);
+	fprintf (stderr, "missing uri: %s %s\n", psMetadataLookupStr(NULL,row,"exp_name"), this_class_id);
 
         // Save this round for next round.
@@ -1903,7 +1903,7 @@
   psFree(query);
   query = rep;
-  psStringSubstitute(&class_id,"ota","XY");
   psStringSubstitute(&query,class_id,"@CLASS_ID@");
-    
+  psStringSubstitute(&query,"ota","XY");
+  
   if (!date) {
     if (!dateobs_begin || !dateobs_end) {
Index: branches/czw_branch/20101203/ippTools/src/warptool.c
===================================================================
--- branches/czw_branch/20101203/ippTools/src/warptool.c	(revision 30586)
+++ branches/czw_branch/20101203/ippTools/src/warptool.c	(revision 30587)
@@ -1485,4 +1485,6 @@
     PXOPT_COPY_S16(config->args, where, "-fault",      "warpSkyfile.fault", "==");
 
+    PXOPT_LOOKUP_S16(fault, config->args, "-fault", false, false);
+
     if (!psListLength(where->list)
         && !psMetadataLookupBool(NULL, config->args, "-all")) {
@@ -1510,4 +1512,11 @@
     }
     psFree(where);
+
+    if (!fault) {
+        // If fault has not been supplied, don't revert update faults with the magic value
+        // We don't do this for new runs because then they would never complete
+        // quality should be used to drop bad components
+        psStringAppend(&query_updated, " AND warpSkyfile.fault != %d", PXTOOL_DO_NOT_REVERT_FAULT);
+    }
 
     if (!p_psDBRunQuery(config->dbh, query)) {
@@ -2003,5 +2012,5 @@
 // shared code for the modes -tocleanedskyfile -tofullskyfile -topurgedskyfile
 
-static bool change_skyfile_data_state(pxConfig *config, psString data_state, psString run_state)
+static bool change_skyfile_data_state(pxConfig *config, psString data_state)
 {
     PS_ASSERT_PTR_NON_NULL(config, false);
@@ -2065,17 +2074,17 @@
 static bool tocleanedskyfileMode(pxConfig *config)
 {
-    return change_skyfile_data_state(config, "cleaned", "goto_cleaned");
+    return change_skyfile_data_state(config, "cleaned");
 }
 static bool tofullskyfileMode(pxConfig *config)
 {
-    return change_skyfile_data_state(config, "full", "update");
+    return change_skyfile_data_state(config, "full");
 }
 static bool topurgedskyfileMode(pxConfig *config)
 {
-    return change_skyfile_data_state(config, "purged", "goto_purged");
+    return change_skyfile_data_state(config, "purged");
 }
 static bool toscrubbedskyfileMode(pxConfig *config)
 {
-     return change_skyfile_data_state(config, "scrubbed", "goto_scrubbed");
+     return change_skyfile_data_state(config, "scrubbed");
 }
 
@@ -2101,11 +2110,11 @@
     else {
       if (strcmp(state,"error_cleaned") == 0) {
-        change_skyfile_data_state(config,"error_cleaned","goto_cleaned");
+        change_skyfile_data_state(config,"error_cleaned");
       }
       else if (strcmp(state, "error_scrubbed") == 0) {
-        change_skyfile_data_state(config,"error_scrubbed","goto_scrubbed");
+        change_skyfile_data_state(config,"error_scrubbed");
       }
       else if (strcmp(state, "error_purged") == 0) {
-        change_skyfile_data_state(config,"error_purged","goto_purged");
+        change_skyfile_data_state(config,"error_purged");
       }
       else {
@@ -2526,4 +2535,7 @@
         psStringAppend(&query, " AND (warpSkyfile.skycell_id = '%s')", skycell_id);
     }
+    // we do not update components with the magic fault value. They are non-updateable
+    // (But can be recovered with "warptool -revertwarped -fault 26" (PXTOOL_DO_NOT_REVERT_FAULT)
+    psStringAppend(&query, " AND (warpSkyfile.fault != %d)", PXTOOL_DO_NOT_REVERT_FAULT);
 
     if (!p_psDBRunQueryF(config->dbh, query, setHook, warp_id)) {
