Index: trunk/ippTools/share/Makefile.am
===================================================================
--- trunk/ippTools/share/Makefile.am	(revision 37789)
+++ trunk/ippTools/share/Makefile.am	(revision 37833)
@@ -524,4 +524,7 @@
 	remotetool_definebyquery_warp.sql \
 	remotetool_definebyquery_stack.sql \
+	remotetool_definebyquery_staticsky.sql \
 	remotetool_dropcomponent.sql \
+	remotetool_listcomponent.sql \
+	remotetool_doneprep.sql \
 	remotetool_updatepoll.sql
Index: trunk/ippTools/share/pxadmin_create_tables.sql
===================================================================
--- trunk/ippTools/share/pxadmin_create_tables.sql	(revision 37789)
+++ trunk/ippTools/share/pxadmin_create_tables.sql	(revision 37833)
@@ -2385,4 +2385,7 @@
     remote_id BIGINT,
     stage_id  BIGINT,
+    jobs      INT
+    state     VARCHAR(64) NOT NULL,
+    path_base VARCHAR(255),
     KEY (stage_id),
     FOREIGN KEY (remote_id) REFERENCES remoteRun(remote_id)
Index: trunk/ippTools/share/remotetool_definebyquery_cam.sql
===================================================================
--- trunk/ippTools/share/remotetool_definebyquery_cam.sql	(revision 37789)
+++ trunk/ippTools/share/remotetool_definebyquery_cam.sql	(revision 37833)
@@ -11,9 +11,9 @@
 LEFT JOIN
 
-(SELECT remote_id,remoteRun.stage,remoteRun.label,remoteComponent.stage_id,remoteRun.state 
-   FROM remoteRun 
+(SELECT remote_id,remoteRun.stage,remoteRun.label,remoteComponent.stage_id,remoteRun.state
+   FROM remoteRun
    JOIN remoteComponent USING (remote_id)
 WHERE
-remoteRun.stage = 'camera'
+remoteRun.stage = 'camera' and remoteComponent.state != 'retry'
 -- where hook %s
 ) AS R
Index: trunk/ippTools/share/remotetool_definebyquery_chip.sql
===================================================================
--- trunk/ippTools/share/remotetool_definebyquery_chip.sql	(revision 37789)
+++ trunk/ippTools/share/remotetool_definebyquery_chip.sql	(revision 37833)
@@ -11,9 +11,9 @@
 LEFT JOIN
 
-(SELECT remote_id,remoteRun.stage,remoteRun.label,remoteComponent.stage_id,remoteRun.state 
-   FROM remoteRun 
+(SELECT remote_id,remoteRun.stage,remoteRun.label,remoteComponent.stage_id,remoteRun.state
+   FROM remoteRun
    JOIN remoteComponent USING (remote_id)
 WHERE
-remoteRun.stage = 'chip'
+remoteRun.stage = 'chip' and remoteComponent.state != 'retry'
 -- where hook %s
 ) AS R
@@ -24,3 +24,3 @@
 
 
-       
+
Index: trunk/ippTools/share/remotetool_definebyquery_stack.sql
===================================================================
--- trunk/ippTools/share/remotetool_definebyquery_stack.sql	(revision 37789)
+++ trunk/ippTools/share/remotetool_definebyquery_stack.sql	(revision 37833)
@@ -15,5 +15,5 @@
    JOIN remoteComponent USING (remote_id)
 WHERE
-remoteRun.stage = 'stack'
+remoteRun.stage = 'stack' and remoteComponent.state != 'retry'
 -- where hook %s
 ) AS R
Index: trunk/ippTools/share/remotetool_definebyquery_staticsky.sql
===================================================================
--- trunk/ippTools/share/remotetool_definebyquery_staticsky.sql	(revision 37833)
+++ trunk/ippTools/share/remotetool_definebyquery_staticsky.sql	(revision 37833)
@@ -0,0 +1,21 @@
+SELECT stage_id FROM
+
+( SELECT sky_id AS stage_id
+    FROM staticskyRun
+WHERE
+staticskyRun.state = 'new'
+-- where hook %s
+GROUP BY sky_id
+) AS W
+
+LEFT JOIN
+
+(SELECT remote_id,remoteRun.stage,remoteRun.label,remoteComponent.stage_id,remoteRun.state
+   FROM remoteRun
+   JOIN remoteComponent USING(remote_id)
+WHERE
+remoteRun.stage = 'staticsky' AND remoteComponent.state != 'retry'
+-- where hook %s
+) AS R
+USING(stage_id)
+WHERE R.remote_id IS NULL
Index: trunk/ippTools/share/remotetool_definebyquery_warp.sql
===================================================================
--- trunk/ippTools/share/remotetool_definebyquery_warp.sql	(revision 37789)
+++ trunk/ippTools/share/remotetool_definebyquery_warp.sql	(revision 37833)
@@ -17,5 +17,5 @@
    JOIN remoteComponent USING (remote_id)
 WHERE
-remoteRun.stage = 'warp'
+remoteRun.stage = 'warp' and remoteComponent.state != 'retry'
 -- where hook %s
 ) AS R
Index: trunk/ippTools/share/remotetool_doneprep.sql
===================================================================
--- trunk/ippTools/share/remotetool_doneprep.sql	(revision 37833)
+++ trunk/ippTools/share/remotetool_doneprep.sql	(revision 37833)
@@ -0,0 +1,30 @@
+SELECT * FROM
+ (SELECT
+ remote_id,
+ remoteRun.path_base,
+ stage,
+ count(stage_id) as Ndone
+FROM remoteRun
+JOIN remoteComponent
+USING (remote_id)
+WHERE
+((remoteComponent.state = 'prep_done') OR (remoteComponent.state = 'prep_fail') OR (remoteComponent.state = 'fail'))
+-- and hook %s
+GROUP BY remote_id)
+AS DONE
+
+JOIN
+
+(SELECT
+remote_id,
+count(stage_id) as Njobs
+FROM remoteRun
+JOIN remoteComponent
+USING (remote_id)
+-- where hook %s
+GROUP BY remote_id)
+AS JOBS
+
+using (remote_id)
+
+where Ndone = Njobs
Index: trunk/ippTools/share/remotetool_listcomponent.sql
===================================================================
--- trunk/ippTools/share/remotetool_listcomponent.sql	(revision 37833)
+++ trunk/ippTools/share/remotetool_listcomponent.sql	(revision 37833)
@@ -0,0 +1,11 @@
+SELECT DISTINCT
+    remoteComponent.remote_id,
+    remoteComponent.stage_id,
+    remoteComponent.jobs,
+    remoteComponent.state,
+    remoteComponent.path_base,
+    remoteRun.stage,
+    remoteRun.path_base as run_path_base
+FROM remoteRun
+JOIN remoteComponent
+    USING(remote_id)
Index: trunk/ippTools/src/remotetool.c
===================================================================
--- trunk/ippTools/src/remotetool.c	(revision 37789)
+++ trunk/ippTools/src/remotetool.c	(revision 37833)
@@ -21,4 +21,7 @@
 static bool listrunMode(pxConfig *config);
 static bool listcomponentMode(pxConfig *config);
+
+// list remoteRuns with all remoteComponents in state 'prep_done' or 'prep_fail'
+static bool doneprepMode(pxConfig *config);
 
 // Update
@@ -26,6 +29,8 @@
 static bool updaterunMode(pxConfig *config);
 static bool updatepollMode(pxConfig *config);
+static bool updatecomponentMode(pxConfig *config);
 static bool revertrunMode(pxConfig *config);
 static bool revertauthMode(pxConfig *config);
+static bool revertcomponentMode(pxConfig *config);
 
 # define MODECASE(caseName, func) \
@@ -47,12 +52,15 @@
 
   switch (config->mode) {
-    MODECASE(REMOTETOOL_MODE_DEFINEBYQUERY, definebyqueryMode);
-    MODECASE(REMOTETOOL_MODE_LISTRUN,       listrunMode);
-    MODECASE(REMOTETOOL_MODE_LISTCOMPONENT, listcomponentMode);
-    MODECASE(REMOTETOOL_MODE_DROPCOMPONENT, dropcomponentMode);
-    MODECASE(REMOTETOOL_MODE_UPDATERUN,     updaterunMode);
-    MODECASE(REMOTETOOL_MODE_UPDATEPOLL,    updatepollMode);
-    MODECASE(REMOTETOOL_MODE_REVERTRUN,     revertrunMode);
-    MODECASE(REMOTETOOL_MODE_REVERTAUTH,    revertauthMode);
+    MODECASE(REMOTETOOL_MODE_DEFINEBYQUERY,   definebyqueryMode);
+    MODECASE(REMOTETOOL_MODE_LISTRUN,         listrunMode);
+    MODECASE(REMOTETOOL_MODE_DONEPREP,         doneprepMode);
+    MODECASE(REMOTETOOL_MODE_LISTCOMPONENT,   listcomponentMode);
+    MODECASE(REMOTETOOL_MODE_DROPCOMPONENT,   dropcomponentMode);
+    MODECASE(REMOTETOOL_MODE_UPDATERUN,       updaterunMode);
+    MODECASE(REMOTETOOL_MODE_UPDATEPOLL,      updatepollMode);
+    MODECASE(REMOTETOOL_MODE_UPDATECOMPONENT, updatecomponentMode);
+    MODECASE(REMOTETOOL_MODE_REVERTRUN,       revertrunMode);
+    MODECASE(REMOTETOOL_MODE_REVERTAUTH,      revertauthMode);
+    MODECASE(REMOTETOOL_MODE_REVERTCOMPONENT, revertcomponentMode);
 
   default:
@@ -92,5 +100,5 @@
   PXOPT_LOOKUP_BOOL(simple,    config->args, "-simple",       false);
   PXOPT_LOOKUP_BOOL(pretend,   config->args, "-pretend",      false);
-  
+
   set_label = set_label ? set_label : label;
 
@@ -105,5 +113,5 @@
       return(false);
     }
-    
+
     if (label) {
       psStringAppend(&whereOption, "\n AND (label = '%s')", label);
@@ -116,9 +124,9 @@
       return(false);
     }
-    
+
     if (label) {
       psStringAppend(&whereOption, "\n AND (label = '%s')", label);
     }
-  }    
+  }
   else if (!strcmp(stage,"warp")) {
     query = pxDataGet("remotetool_definebyquery_warp.sql");
@@ -127,5 +135,5 @@
       return(false);
     }
-    
+
     if (label) {
       // Because warp has to check to see if something other than the state is set correctly, I have to use this wonky way to pass the label in.
@@ -133,5 +141,5 @@
       psStringAppend(&whereOption, "\n AND (label = '%s')", label);
     }
-  }    
+  }
   else if (!strcmp(stage,"stack")) {
     query = pxDataGet("remotetool_definebyquery_stack.sql");
@@ -140,9 +148,20 @@
       return(false);
     }
-    
+
     if (label) {
       psStringAppend(&whereOption, "\n AND (label = '%s')", label);
     }
-  }    
+  }
+  else if (!strcmp(stage,"staticsky")) {
+    query = pxDataGet("remotetool_definebyquery_staticsky.sql");
+    if (!query) {
+      psError(PXTOOLS_ERR_SYS,false, "failed to retreive SQL statement");
+      return(false);
+    }
+
+    if (label) {
+      psStringAppend(&whereOption, "\n AND (label = '%s')", label);
+    }
+  }
   else {
     psError(PS_ERR_UNKNOWN, true, "unknown value for stage: %s", stage);
@@ -191,17 +210,17 @@
   // Insert the top level run object
   remoteRunRow *run = remoteRunRowAlloc(0, // remote_id
-					"new", // state
-					stage,
-					set_label,
-					path_base,
-					-1, // job_id
-					NULL, // last_poll
-					0   // fault
-					  );
+                                        "new", // state
+                                        stage,
+                                        set_label,
+                                        path_base,
+                                        -1, // job_id
+                                        NULL, // last_poll
+                                        0   // fault
+                                          );
   if (!run) {
-    psError(PS_ERR_UNKNOWN, false, "failed to alloc lapRun object");
+    psError(PS_ERR_UNKNOWN, false, "failed to alloc remoteRun object");
     return(true);
   }
-  
+
   if (!remoteRunInsertObject(config->dbh, run)) {
     if (!psDBRollback(config->dbh)) {
@@ -213,5 +232,5 @@
   }
   psS64 remote_id = psDBLastInsertID(config->dbh);
-  
+
   psArray *list = psArrayAllocEmpty(limit);
   for (long i=0; i < psArrayLength(output); i++) {
@@ -219,14 +238,13 @@
     psS64 stage_id = psMetadataLookupS64(NULL, md, "stage_id");
 
-    remoteComponentRow *comp = remoteComponentRowAlloc(remote_id,
-						       stage_id);
+    remoteComponentRow *comp = remoteComponentRowAlloc(remote_id, stage_id, 0, "new", NULL);
     if (!comp) {
-      psError(PS_ERR_UNKNOWN, false, "failed to alloc lapRun object");
+      psError(PS_ERR_UNKNOWN, false, "failed to alloc remoteComponent object");
       return(true);
     }
-    
+
     if (!remoteComponentInsertObject(config->dbh, comp)) {
       if (!psDBRollback(config->dbh)) {
-	psError(PS_ERR_UNKNOWN, false, "database error");
+        psError(PS_ERR_UNKNOWN, false, "database error");
       }
       psError(PS_ERR_UNKNOWN, false, "database error");
@@ -237,5 +255,5 @@
     psArrayAdd(list, list->n, comp);
     psFree(comp);
-    
+
   }
   psFree(run);
@@ -245,5 +263,5 @@
     return false;
   }
-  
+
   if (!remoteComponentPrintObjects(stdout, list, !simple)) {
     if (!psDBRollback(config->dbh)) {
@@ -254,8 +272,8 @@
     return false;
   }
-  
+
   psFree(list);
   psFree(output);
-					
+
   return true;
 }
@@ -265,5 +283,5 @@
 {
   psMetadata *where = psMetadataAlloc();
-  
+
   PXOPT_COPY_S64(config->args, where, "-remote_id", "remote_id", "==");
   PXOPT_COPY_STR(config->args, where, "-state", "state", "==");
@@ -274,14 +292,13 @@
   PXOPT_COPY_TIME(config->args, where, "-poll_begin", "last_poll", ">=");
   PXOPT_COPY_TIME(config->args, where, "-poll_end", "last_poll", "<=");
-  
+
   PXOPT_COPY_S16(config->args, where, "-fault", "fault", "==");
 
   PXOPT_LOOKUP_S16(limit,   config->args, "-limit",  false, false);
   PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
-  
 
   psArray *remRuns = NULL;
   remRuns = psDBSelectRows(config->dbh, "remoteRun", where, limit);
-  
+
   if (!ippdbPrintMetadatas(stdout, remRuns, "remoteRun", !simple)) {
     psError(PS_ERR_UNKNOWN, false, "failed to print array");
@@ -299,23 +316,139 @@
 
   PXOPT_COPY_S64(config->args, where, "-remote_id", "remote_id", "==");
+  PXOPT_COPY_S64(config->args, where, "-stage_id",  "stage_id",  "==");
+  PXOPT_COPY_S64(config->args, where, "-jobs",      "jobs",      "==");
+
+  PXOPT_COPY_STR(config->args, where, "-state", "remoteComponent.state", "==");
+  PXOPT_COPY_STR(config->args, where, "-label", "remoteRun.label", "==");
+
   PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
-  
-  psArray *remComps = NULL;
-  remComps = psDBSelectRows(config->dbh, "remoteComponent", where, 0);
-  
-  if (!ippdbPrintMetadatas(stdout, remComps, "remoteComponent", !simple)) {
+  PXOPT_LOOKUP_S16(limit,   config->args, "-limit",  false, false);
+
+  psString query = pxDataGet("remotetool_listcomponent.sql");
+  if (!query) {
+      psError(PXTOOLS_ERR_SYS,false, "failed to retreive SQL statement");
+      return(false);
+  }
+
+  if (psListLength(where->list)) {
+      psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
+      psStringAppend(&query, " WHERE %s", whereClause);
+      psFree(whereClause);
+  }
+  psFree(where);
+
+  if (limit) {
+    psString limitString = psDBGenerateLimitSQL(limit);
+    psStringAppend(&query, " %s", limitString);
+    psFree(limitString);
+  }
+
+  if (!p_psDBRunQuery(config->dbh, query)) {
+      psError(PS_ERR_UNKNOWN, false, "database error");
+      psFree(query);
+      return false;
+  }
+  psFree(query);
+
+  psArray *output = p_psDBFetchResult(config->dbh);
+  if (!output) {
+      psError(PS_ERR_UNKNOWN, false, "database error");
+      return false;
+  }
+  if (!psArrayLength(output)) {
+    psTrace("remotetool", PS_LOG_INFO, "no rows found");
+    psFree(output);
+    return true;
+  }
+
+  if (!ippdbPrintMetadatas(stdout, output, "remoteComponent", !simple)) {
     psError(PS_ERR_UNKNOWN, false, "failed to print array");
-    psFree(remComps);
-    return false;
-  }
-  psFree(remComps);
+    psFree(output);
+    return false;
+  }
+  psFree(output);
 
   return true;
 }
 
+// List
+static bool doneprepMode(pxConfig *config)
+{
+  psMetadata *where = psMetadataAlloc();
+
+  PXOPT_COPY_S64(config->args, where, "-remote_id", "remote_id", "==");
+  PXOPT_COPY_S64(config->args, where, "-job_id", "job_id", "==");
+
+  PXOPT_COPY_STR(config->args, where, "-stage",  "stage",  "==");
+  PXOPT_COPY_STR(config->args, where, "-state", "remoteRun.state", "==");
+  PXOPT_COPY_STR(config->args, where, "-label",  "label",  "==");
+
+  PXOPT_LOOKUP_S16(limit,   config->args, "-limit",  false, false);
+  PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
+
+  psString query = pxDataGet("remotetool_doneprep.sql");
+  if (!query) {
+      psError(PXTOOLS_ERR_SYS,false, "failed to retreive SQL statement");
+      return(false);
+  }
+
+  psString whereDone = NULL;
+  psString whereJobs = NULL;
+  if (psListLength(where->list)) {
+      psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
+      psStringAppend(&whereDone, " \n AND %s", whereClause);
+      psStringAppend(&whereJobs, " \n WHERE %s", whereClause);
+      psFree(whereClause);
+  }
+
+  if (limit) {
+    psString limitString = psDBGenerateLimitSQL(limit);
+    psStringAppend(&query, " %s", limitString);
+    psFree(limitString);
+  }
+
+  // fprintf (stderr, "query: %s\n", query);
+  // fprintf (stderr, "whereDone: %s\n", whereDone);
+  // fprintf (stderr, "whereJobs: %s\n", whereJobs);
+
+  if (!p_psDBRunQueryF(config->dbh, query, whereDone, whereJobs)) {
+      psError(PS_ERR_UNKNOWN, false, "database error");
+      psFree(whereDone);
+      psFree(whereJobs);
+      psFree(query);
+      return false;
+  }
+  psFree(whereDone);
+  psFree(whereJobs);
+  psFree(query);
+
+  psArray *output = p_psDBFetchResult(config->dbh);
+  if (!output) {
+      psError(PS_ERR_UNKNOWN, false, "database error");
+      return false;
+  }
+  if (!psArrayLength(output)) {
+    psTrace("remotetool", PS_LOG_INFO, "no rows found");
+    psFree(output);
+    return true;
+  }
+
+  if (!ippdbPrintMetadatas(stdout, output, "remoteRun", !simple)) {
+    psError(PS_ERR_UNKNOWN, false, "failed to print array");
+    psFree(output);
+    return false;
+  }
+  psFree(output);
+
+  return true;
+}
+
 // Update
 
 static bool dropcomponentMode(pxConfig *config)
 {
+  fprintf (stderr, "do we really want to use -dropcomponent?\n");
+  exit (1);
+
   // Assert that we have a unique component to operate on.
   PXOPT_LOOKUP_S64(remote_id,config->args, "-remote_id",true, false);
@@ -329,5 +462,5 @@
     return false;
   }
-  
+
   if (!psDBTransaction(config->dbh)) {
     psError(PS_ERR_UNKNOWN, false, "database error");
@@ -341,6 +474,4 @@
   }
   psFree(query);
-  
-  
 
   // point of no return
@@ -349,5 +480,5 @@
     return false;
   }
-  
+
   return true;
 }
@@ -364,5 +495,5 @@
   // Wheres
   PXOPT_COPY_S64(config->args, where, "-remote_id", "remote_id", "==");
-  
+
   // Values to set
   PXOPT_COPY_STR(config->args, values, "-set_label", "label", "==");
@@ -374,9 +505,5 @@
   psFree(values);
 
-  if (rows < 1) {
-    psError(PS_ERR_UNKNOWN,false, "no rows affected");
-    return(false);
-  }
-  
+  if (rows < 1) fprintf (stderr, "no rows changed (run may already be in desired state)\n");
   return(true);
 }
@@ -393,5 +520,5 @@
   psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
   psFree(where);
-  
+
   psString query = NULL;
   query = pxDataGet("remotetool_updatepoll.sql");
@@ -412,7 +539,30 @@
   return(true);
 }
-  
-
-  
+
+static bool updatecomponentMode(pxConfig *config)
+{
+  PS_ASSERT_PTR_NON_NULL(config, false);
+  PXOPT_LOOKUP_S64(remote_id,  config->args, "-remote_id",    true, false);
+  psAssert(remote_id,"This should have failed before this point.");
+
+  psMetadata *where = psMetadataAlloc();
+  psMetadata *values = psMetadataAlloc();
+
+  // Wheres
+  PXOPT_COPY_S64(config->args, where, "-remote_id", "remote_id", "==");
+  PXOPT_COPY_S64(config->args, where, "-stage_id",  "stage_id",  "==");
+  PXOPT_COPY_STR(config->args, where, "-state",     "state",     "==");
+
+  // Values to set
+  PXOPT_COPY_S32(config->args, values, "-set_jobs",      "jobs",      "==");
+  PXOPT_COPY_STR(config->args, values, "-set_path_base", "path_base", "==");
+  PXOPT_COPY_STR(config->args, values, "-set_state", "state", "==");
+
+  long rows = psDBUpdateRows(config->dbh, "remoteComponent", where, values);
+  psFree(values);
+
+  if (rows < 1) fprintf (stderr, "no rows changed (component may already be in desired state)\n");
+  return true;
+}
 
 static bool revertrunMode(pxConfig *config)
@@ -426,33 +576,7 @@
   PXOPT_COPY_S64(config->args, where, "-remote_id", "remote_id", "==");
   PXOPT_COPY_STR(config->args, where, "-label", "label", "==");
-  
+  PXOPT_COPY_S16(config->args, where, "-fault", "fault", "==");
   // Value to set
-  PXOPT_COPY_S16(config->args, values, "-fault", "fault", "==");
-  long rows = psDBUpdateRows(config->dbh, "remoteRun", where, values);
-  psFree(values);
-  psFree(where);
-  if (rows < 1) {
-    psError(PS_ERR_UNKNOWN,false, "no rows affected");
-    return(false);
-  }
-
-  return(true);
-}
-
-static bool revertauthMode(pxConfig *config)
-{
-  PS_ASSERT_PTR_NON_NULL(config, false);
-
-  psMetadata *where = psMetadataAlloc();
-  psMetadata *values = psMetadataAlloc();
-
-  // required
-  PXOPT_COPY_S64(config->args, where, "-remote_id", "remote_id", "==");
-  PXOPT_COPY_STR(config->args, where, "-label", "label", "==");
-
-  psMetadataAddStr(where, PS_LIST_TAIL, "state", 0, "==", "auth"); 
-
-  // Value to set
-  psMetadataAddStr(values, PS_LIST_TAIL, "state", 0, "==", "run");
+  psMetadataAddS16(values,PS_LIST_TAIL,"fault",0, "==", 0);
   
   long rows = psDBUpdateRows(config->dbh, "remoteRun", where, values);
@@ -466,3 +590,58 @@
   return(true);
 }
-    
+
+static bool revertcomponentMode(pxConfig *config)
+{
+  PS_ASSERT_PTR_NON_NULL(config,false);
+  psMetadata *where = psMetadataAlloc();
+  psMetadata *values = psMetadataAlloc();
+
+  // required
+  PXOPT_COPY_S64(config->args, where, "-remote_id", "remote_id", "==");
+  PXOPT_COPY_S64(config->args, where, "-stage_id", "stage_id", "==");
+  psMetadataAddStr(where,PS_LIST_TAIL,"state",0, "LIKE", "%fail");
+  
+  // value to set
+  psMetadataAddStr(values, PS_LIST_TAIL, "state",0, "==", "retry");
+  
+
+  long rows = psDBUpdateRows(config->dbh, "remoteComponent", where, values);
+  psFree(values);
+  psFree(where);
+  if (rows < 1) {
+    psError(PS_ERR_UNKNOWN,false, "no rows affected");
+    return(false);
+  }
+
+  return(true);
+}
+  
+  
+
+static bool revertauthMode(pxConfig *config)
+{
+  PS_ASSERT_PTR_NON_NULL(config, false);
+
+  psMetadata *where = psMetadataAlloc();
+  psMetadata *values = psMetadataAlloc();
+
+  // required
+  PXOPT_COPY_S64(config->args, where, "-remote_id", "remote_id", "==");
+  PXOPT_COPY_STR(config->args, where, "-label", "label", "==");
+
+  psMetadataAddStr(where, PS_LIST_TAIL, "state", 0, "==", "auth");
+
+  // Value to set
+  psMetadataAddStr(values, PS_LIST_TAIL, "state", 0, "==", "run");
+
+  long rows = psDBUpdateRows(config->dbh, "remoteRun", where, values);
+  psFree(values);
+  psFree(where);
+  if (rows < 1) {
+    psError(PS_ERR_UNKNOWN,false, "no rows affected");
+    return(false);
+  }
+
+  return(true);
+}
+
Index: trunk/ippTools/src/remotetool.h
===================================================================
--- trunk/ippTools/src/remotetool.h	(revision 37789)
+++ trunk/ippTools/src/remotetool.h	(revision 37833)
@@ -12,10 +12,13 @@
   REMOTETOOL_MODE_DEFINEBYQUERY,
   REMOTETOOL_MODE_LISTRUN,
+  REMOTETOOL_MODE_DONEPREP,
   REMOTETOOL_MODE_LISTCOMPONENT,
   REMOTETOOL_MODE_DROPCOMPONENT,
   REMOTETOOL_MODE_UPDATERUN,
   REMOTETOOL_MODE_UPDATEPOLL,
-  REMOTETOOL_MODE_REVERTRUN,    
-  REMOTETOOL_MODE_REVERTAUTH,   
+  REMOTETOOL_MODE_UPDATECOMPONENT,
+  REMOTETOOL_MODE_REVERTRUN,
+  REMOTETOOL_MODE_REVERTAUTH,
+  REMOTETOOL_MODE_REVERTCOMPONENT,
 } remotetoolMode;
 
Index: trunk/ippTools/src/remotetoolConfig.c
===================================================================
--- trunk/ippTools/src/remotetoolConfig.c	(revision 37789)
+++ trunk/ippTools/src/remotetoolConfig.c	(revision 37833)
@@ -40,5 +40,5 @@
   ADD_OPT(Bool, definebyqueryArgs, "-pretend",       "pretend to do this.", 0);
   ADD_OPT(Bool, definebyqueryArgs,"-simple",         "simple print format",0);
-  
+
   // -listrun
   psMetadata *listrunArgs = psMetadataAlloc();
@@ -59,9 +59,30 @@
   ADD_OPT(S16, listrunArgs,  "-limit",             "limit to number of runs to display", 0);
 
+  // -doneprep
+  psMetadata *doneprepArgs = psMetadataAlloc();
+  ADD_OPT(S64, doneprepArgs, "-remote_id",          "run to list", 0);
+  ADD_OPT(S64, doneprepArgs, "-job_id",             "job_id", 0);
+  ADD_OPT(Str, doneprepArgs, "-stage",              "stage to return", NULL);
+  ADD_OPT(Str, doneprepArgs, "-state",              "state to return", NULL);
+  ADD_OPT(Str, doneprepArgs, "-label",              "remRun label to use", NULL);
+
+  ADD_OPT(Bool, doneprepArgs, "-simple",            "simple print format", false);
+  ADD_OPT(S16, doneprepArgs,  "-limit",             "limit to number of runs to display", 0);
+
+  // -revertcomponent
+  psMetadata   *revertcomponentArgs = psMetadataAlloc();
+  ADD_OPT(S64,  revertcomponentArgs, "-remote_id",       "run to revert components from", 0);
+  ADD_OPT(S64,  revertcomponentArgs, "-stage_id",        "component stage_id to revert", 0);
+  
+  
   // -listcomponents
-  psMetadata *listcomponentArgs = psMetadataAlloc();
-  ADD_OPT(S64, listcomponentArgs, "-remote_id",             "run to list", 0);
-  ADD_OPT(S16, listcomponentArgs, "-limit",              "limit to number of runs to display", 0);
+  psMetadata   *listcomponentArgs = psMetadataAlloc();
+  ADD_OPT(S64,  listcomponentArgs, "-remote_id",         "run to list", 0);
+  ADD_OPT(S64,  listcomponentArgs, "-stage_id",          "run to list", 0);
+  ADD_OPT(S32,  listcomponentArgs, "-jobs",              "run to list", 0);
+  ADD_OPT(Str,  listcomponentArgs, "-state",             "run to list", NULL);
+  ADD_OPT(S16,  listcomponentArgs, "-limit",             "limit to number of runs to display", 0);
   ADD_OPT(Bool, listcomponentArgs, "-simple",            "simple print format", false);
+  ADD_OPT(Str,  listcomponentArgs, "-label",             "label to use", NULL);
 
   // -dropcomponent
@@ -69,5 +90,5 @@
   ADD_OPT(S64, dropcomponentArgs, "-remote_id",         "run to update", 0);
   ADD_OPT(S64, dropcomponentArgs, "-stage_id",          "stage_id to remote", 0);
-  
+
   // -updaterun
   psMetadata *updaterunArgs = psMetadataAlloc();
@@ -83,5 +104,14 @@
   psMetadata *updatepollArgs = psMetadataAlloc();
   ADD_OPT(S64, updatepollArgs, "-remote_id",            "run to update", 0);
-  
+
+  // -updatecomponent
+  psMetadata  *updatecomponentArgs = psMetadataAlloc();
+  ADD_OPT(S64, updatecomponentArgs, "-remote_id",     "remote_id to update", 0);
+  ADD_OPT(S64, updatecomponentArgs, "-stage_id",      "stage_id to update", 0);
+  ADD_OPT(Str, updatecomponentArgs, "-state",         "limit to this remoteComponent state", NULL);
+  ADD_OPT(Str, updatecomponentArgs, "-set_state",     "remoteComponent state to assign", NULL);
+  ADD_OPT(Str, updatecomponentArgs, "-set_path_base", "remoteRun path_base to assign", NULL);
+  ADD_OPT(S32, updatecomponentArgs, "-set_jobs",      "number of jobs for this stage_id", 0);
+
   // -revertrun
   psMetadata *revertrunArgs = psMetadataAlloc();
@@ -89,5 +119,5 @@
   ADD_OPT(Str, revertrunArgs, "-label",      "remRun label to use", NULL);
   ADD_OPT(S16, revertrunArgs, "-fault",              "fault code", 0);
-  
+
   // -revertauth
   psMetadata *revertauthArgs = psMetadataAlloc();
@@ -98,12 +128,15 @@
   psMetadata *modes   = psMetadataAlloc();
 
-  PXOPT_ADD_MODE("-definebyquery",     "", REMOTETOOL_MODE_DEFINEBYQUERY,  definebyqueryArgs);
-  PXOPT_ADD_MODE("-listrun",           "", REMOTETOOL_MODE_LISTRUN,        listrunArgs);
-  PXOPT_ADD_MODE("-listcomponent",     "", REMOTETOOL_MODE_LISTCOMPONENT,  listcomponentArgs);
-  PXOPT_ADD_MODE("-dropcomponent",     "", REMOTETOOL_MODE_DROPCOMPONENT,  dropcomponentArgs);
-  PXOPT_ADD_MODE("-updaterun",         "", REMOTETOOL_MODE_UPDATERUN,      updaterunArgs);
-  PXOPT_ADD_MODE("-updatepoll",        "", REMOTETOOL_MODE_UPDATEPOLL,     updatepollArgs);
-  PXOPT_ADD_MODE("-revertrun",         "", REMOTETOOL_MODE_REVERTRUN,      revertrunArgs);
-  PXOPT_ADD_MODE("-revertauth",        "", REMOTETOOL_MODE_REVERTAUTH,     revertauthArgs);
+  PXOPT_ADD_MODE("-definebyquery",     "", REMOTETOOL_MODE_DEFINEBYQUERY,   definebyqueryArgs);
+  PXOPT_ADD_MODE("-listrun",           "", REMOTETOOL_MODE_LISTRUN,         listrunArgs);
+  PXOPT_ADD_MODE("-doneprep",          "", REMOTETOOL_MODE_DONEPREP,        doneprepArgs);
+  PXOPT_ADD_MODE("-listcomponent",     "", REMOTETOOL_MODE_LISTCOMPONENT,   listcomponentArgs);
+  PXOPT_ADD_MODE("-revertcomponent",   "", REMOTETOOL_MODE_REVERTCOMPONENT, revertcomponentArgs);
+  PXOPT_ADD_MODE("-dropcomponent",     "", REMOTETOOL_MODE_DROPCOMPONENT,   dropcomponentArgs);
+  PXOPT_ADD_MODE("-updaterun",         "", REMOTETOOL_MODE_UPDATERUN,       updaterunArgs);
+  PXOPT_ADD_MODE("-updatepoll",        "", REMOTETOOL_MODE_UPDATEPOLL,      updatepollArgs);
+  PXOPT_ADD_MODE("-updatecomponent",   "", REMOTETOOL_MODE_UPDATECOMPONENT, updatecomponentArgs);
+  PXOPT_ADD_MODE("-revertrun",         "", REMOTETOOL_MODE_REVERTRUN,       revertrunArgs);
+  PXOPT_ADD_MODE("-revertauth",        "", REMOTETOOL_MODE_REVERTAUTH,      revertauthArgs);
 
 
