IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 25822 for trunk


Ignore:
Timestamp:
Oct 9, 2009, 2:02:24 PM (17 years ago)
Author:
bills
Message:

code to clean up magicDSRuns

Location:
trunk
Files:
1 added
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippScripts/Build.PL

    r25299 r25822  
    5959        scripts/magic_destreak.pl
    6060        scripts/magic_destreak_revert.pl
     61        scripts/magic_destreak_cleanup.pl
    6162        scripts/ippdb.pl
    6263        scripts/ipp_cleanup.pl
  • trunk/ippTasks/destreak.pro

    r25708 r25822  
    1010book init magicToDS
    1111book init magicDSToRevert
     12book init magicDSToCleanup
    1213
    1314### indexes into Database lists
    … …  
    1617$magicDSToRevert_DB = 0
    1718$magicDSCompletedRevert_DB = 0
     19$magicDSToCleanup_DB = 0
    1820
    1921#list of stages
    … …  
    3234    book listbook magicToDS
    3335    book listbook magicDSToRevert
     36    book init magicDSToCleanup
    3437end
    3538
    … …  
    3841    book init magicToDS
    3942    book init magicDSToRevert
     43    book init magicDSToCleanup
    4044end
    4145
    … …  
    7175end
    7276
     77macro destreak.cleanup.on
     78    task destreak.cleanup.load
     79        active true
     80    end
     81    task destreak.cleanup.run
     82        active true
     83    end
     84end
     85
    7386### Turn tasks off
    7487macro destreak.off
    … …  
    92105    end
    93106    task destreak.completed.revert
     107        active false
     108    end
     109end
     110macro destreak.cleanup.off
     111    task destreak.cleanup.load
     112        active false
     113    end
     114    task destreak.cleanup.run
    94115        active false
    95116    end
    … …  
    489510end
    490511
     512task           destreak.cleanup.load
     513  host         local
     514
     515  periods      -poll $LOADPOLL
     516  periods      -exec $LOADEXEC
     517  periods      -timeout 20
     518  npending     1
     519  active       false
     520
     521  stdout NULL
     522  stderr $LOGSUBDIR/destreak.cleanup.load.log
     523
     524  task.exec
     525    $run = magicdstool -tocleanup
     526    if ($DB:n == 0)
     527      option DEFAULT
     528    else
     529
     530      # save the DB name for the exit tasks
     531      option $DB:$magicDSToCleanup_DB
     532      $run = $run -dbname $DB:$magicDSToCleanup_DB
     533
     534      # only bump database number after we have gone through all of the stages
     535      $magicDSToCleanup_DB ++
     536      if ($magicDSToCleanup_DB >= $DB:n) set magicDSToCleanup_DB = 0
     537    end
     538    add_poll_args run
     539    add_poll_labels run
     540    command $run
     541  end
     542
     543  # success
     544  task.exit    0
     545    # convert 'stdout' to book format
     546    ipptool2book stdout magicDSToCleanup -key magic_ds_id -uniq -setword dbname $options:0 -setword pantaskState INIT
     547    if ($VERBOSE > 2)
     548      book listbook magicDSToCleanup
     549    end
     550
     551    # delete existing entries in the appropriate pantaskStates
     552    process_cleanup magicDSToCleanup
     553  end
     554
     555  # locked list
     556  task.exit    default
     557    showcommand failure
     558  end
     559
     560  task.exit    crash
     561    showcommand crash
     562  end
     563
     564  # operation times out?
     565  task.exit    timeout
     566    showcommand timeout
     567  end
     568end
     569
     570task           destreak.cleanup.run
     571  periods      -poll $RUNPOLL
     572  periods      -exec $RUNEXEC
     573  periods      -timeout 60
     574  active       false
     575
     576  task.exec
     577    stdout $LOGSUBDIR/destreak.cleanup.run.log
     578    stderr $LOGSUBDIR/destreak.cleanup.run.log
     579
     580    book npages magicDSToCleanup -var N
     581    if ($N == 0) break
     582    if ($NETWORK == 0) break
     583   
     584    # look for new images (pantaskState == INIT)
     585    book getpage magicDSToCleanup 0 -var pageName -key pantaskState INIT
     586    if ("$pageName" == "NULL") break
     587
     588    book setword magicDSToCleanup $pageName pantaskState RUN
     589    book getword magicDSToCleanup $pageName magic_ds_id -var MAGIC_DS_ID
     590    book getword magicDSToCleanup $pageName camera -var CAMERA
     591    book getword magicDSToCleanup $pageName outroot -var OUTROOT
     592    book getword magicDSToCleanup $pageName dbname -var DBNAME
     593
     594    sprintf logfile "%s/mds.%s.cleanup.log" $OUTROOT $MAGIC_DS_ID
     595
     596    host anyhost
     597
     598    $run = magic_destreak_cleanup.pl --magic_ds_id $MAGIC_DS_ID --camera $CAMERA --logfile $logfile
     599
     600    add_standard_args run
     601
     602    # save the pageName for future reference below
     603    options $pageName
     604
     605    # create the command line
     606    if ($VERBOSE > 1)
     607      echo command $run
     608    end
     609    command $run
     610  end
     611
     612  # default exit status
     613  task.exit    0
     614    process_exit magicDSToCleanup $options:0 $JOB_STATUS
     615   end
     616
     617  # locked list
     618  task.exit    default
     619    showcommand failure
     620    process_exit magicDSToCleanup $options:0 $JOB_STATUS
     621  end
     622
     623  task.exit    crash
     624    showcommand crash
     625    book setword magicDSToCleanup $options:0 pantaskState CRASH
     626  end
     627
     628  # operation timed out?
     629  task.exit    timeout
     630    showcommand timeout
     631    book setword magicDSToCleanup $options:0 pantaskState TIMEOUT
     632  end
     633end
     634
  • trunk/ippTools/share/Makefile.am

    r25816 r25822  
    3636     chiptool_revertprocessedimfile.sql \
    3737     chiptool_run.sql \
     38     chiptool_runstate.sql \
    3839     chiptool_export_imfile.sql \
    3940     chiptool_export_processed_imfile.sql \
    … …  
    190191     magicdstool_getskycells.sql \
    191192     magicdstool_revertdestreakedfile.sql \
     193     magicdstool_tocleanup.sql \
    192194     magicdstool_todestreak_camera.sql \
    193195     magicdstool_todestreak_chip.sql \
    … …  
    272274     warptool_revertoverlap.sql \
    273275     warptool_revertwarped_delete.sql \
     276     warptool_runstate.sql \
    274277     warptool_scmap.sql \
    275278     warptool_tooverlap.sql \
  • trunk/ippTools/src/chiptool.c

    r25800 r25822  
    5757static bool exportrunMode(pxConfig *config);
    5858static bool importrunMode(pxConfig *config);
     59static bool runstateMode(pxConfig *config);
    5960
    6061# define MODECASE(caseName, func) \
    … …  
    9798        MODECASE(CHIPTOOL_MODE_EXPORTRUN,               exportrunMode);
    9899        MODECASE(CHIPTOOL_MODE_IMPORTRUN,               importrunMode);
     100        MODECASE(CHIPTOOL_MODE_RUNSTATE,                runstateMode);
    99101        default:
    100102            psAbort("invalid option (this should not happen)");
    … …  
    15081510    return true;
    15091511}
     1512
     1513static bool runstateMode(pxConfig *config)
     1514{
     1515    PS_ASSERT_PTR_NON_NULL(config, false);
     1516
     1517    psMetadata *where = psMetadataAlloc();
     1518    PXOPT_COPY_S64(config->args, where, "-chip_id",    "chipRun.chip_id", "==");
     1519    PXOPT_COPY_S64(config->args, where, "-exp_id",     "rawExp.exp_id", "==");
     1520    PXOPT_COPY_STR(config->args, where, "-exp_name",   "rawExp.exp_name", "==");
     1521    pxAddLabelSearchArgs (config, where, "-label",     "chipRun.label", "LIKE");
     1522
     1523//    PXOPT_LOOKUP_BOOL(all, config->args, "-all", false);
     1524    PXOPT_LOOKUP_BOOL(no_magic, config->args, "-no_magic", false);
     1525
     1526    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     1527    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     1528
     1529    psString query = pxDataGet("chiptool_runstate.sql");
     1530    if (!query) {
     1531        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     1532        return false;
     1533    }
     1534
     1535    if (psListLength(where->list)) {
     1536        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     1537        psStringAppend(&query, " WHERE %s", whereClause);
     1538        psFree(whereClause);
     1539    } else {
     1540        psError(PXTOOLS_ERR_DATA, true, "search parameters or -all are required");
     1541        return false;
     1542    }
     1543    psFree(where);
     1544
     1545    // treat limit == 0 as "no limit"
     1546    if (limit) {
     1547        psString limitString = psDBGenerateLimitSQL(limit);
     1548        psStringAppend(&query, " %s", limitString);
     1549        psFree(limitString);
     1550    }
     1551
     1552    if (!p_psDBRunQuery(config->dbh, query)) {
     1553        psError(PS_ERR_UNKNOWN, false, "database error");
     1554        psFree(query);
     1555        return false;
     1556    }
     1557    psFree(query);
     1558
     1559    psArray *output = p_psDBFetchResult(config->dbh);
     1560    if (!output) {
     1561        psErrorCode err = psErrorCodeLast();
     1562        switch (err) {
     1563            case PS_ERR_DB_CLIENT:
     1564                psError(PXTOOLS_ERR_SYS, false, "database error");
     1565            case PS_ERR_DB_SERVER:
     1566                psError(PXTOOLS_ERR_PROG, false, "database error");
     1567            default:
     1568                psError(PXTOOLS_ERR_PROG, false, "unknown error");
     1569        }
     1570
     1571        return false;
     1572    }
     1573    if (!psArrayLength(output)) {
     1574        psTrace("chiptool", PS_LOG_INFO, "no rows found");
     1575        psFree(output);
     1576        return true;
     1577    }
     1578
     1579    if (psArrayLength(output)) {
     1580        // negative simple so the default is true
     1581        if (!ippdbPrintMetadatas(stdout, output, "chipRunState", !simple)) {
     1582            psError(PS_ERR_UNKNOWN, false, "failed to print array");
     1583            psFree(output);
     1584            return false;
     1585        }
     1586    }
     1587
     1588    psFree(output);
     1589
     1590    return true;
     1591}
  • trunk/ippTools/src/chiptool.h

    r25324 r25822  
    4747    CHIPTOOL_MODE_TOSCRUBBEDIMFILE,
    4848    CHIPTOOL_MODE_EXPORTRUN,
    49     CHIPTOOL_MODE_IMPORTRUN
     49    CHIPTOOL_MODE_IMPORTRUN,
     50    CHIPTOOL_MODE_RUNSTATE
    5051} chiptoolMode;
    5152
  • trunk/ippTools/src/chiptoolConfig.c

    r25800 r25822  
    271271    psMetadataAddStr(importrunArgs, PS_LIST_TAIL, "-infile",  0,          "import from this file (required)", NULL);
    272272
     273    // -runstate
     274    psMetadata *runstateArgs = psMetadataAlloc();
     275    psMetadataAddS64(runstateArgs, PS_LIST_TAIL, "-chip_id", 0,           "search by chip ID", 0);
     276    psMetadataAddS64(runstateArgs, PS_LIST_TAIL, "-exp_id", 0,            "search by exposure tag", 0);
     277    psMetadataAddStr(runstateArgs, PS_LIST_TAIL, "-exp_name", 0,          "search by exposure tag", 0);
     278    psMetadataAddStr(runstateArgs, PS_LIST_TAIL,  "-label",  PS_META_DUPLICATE_OK, "search by warpRun label", NULL);
     279    psMetadataAddBool(runstateArgs, PS_LIST_TAIL, "-no_magic",  0,        "magic is not necessary for result", false);
     280
     281    psMetadataAddU64(runstateArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
     282    psMetadataAddBool(runstateArgs, PS_LIST_TAIL, "-simple",  0,          "use the simple output format", false);
     283
    273284    psMetadata *argSets = psMetadataAlloc();
    274285    psMetadata *modes = psMetadataAlloc();
    … …  
    281292    PXOPT_ADD_MODE("-updateprocessedimfile","change procesed imfile properties",    CHIPTOOL_MODE_UPDATEPROCESSEDIMFILE,updateprocessedimfileArgs);
    282293    PXOPT_ADD_MODE("-revertprocessedimfile","undo a processed imfile",              CHIPTOOL_MODE_REVERTPROCESSEDIMFILE,revertprocessedimfileArgs);
     294    PXOPT_ADD_MODE("-runstate",             "list the states of chip run",          CHIPTOOL_MODE_RUNSTATE,             runstateArgs);
    283295    PXOPT_ADD_MODE("-advanceexp",           "advance completed exposures",          CHIPTOOL_MODE_ADVANCEEXP,           advanceexpArgs);
    284296    PXOPT_ADD_MODE("-block",                "set a label block",                    CHIPTOOL_MODE_BLOCK,                blockArgs);
  • trunk/ippTools/src/magicdstool.c

    r25792 r25822  
    4343static bool torevertMode(pxConfig *config);
    4444static bool completedrevertMode(pxConfig *config);
     45static bool tocleanupMode(pxConfig *config);
    4546
    4647static bool setmagicDSRunState(pxConfig *config, psS64 magic_id, psMetadata *where, const char *state);
    … …  
    7677        MODECASE(MAGICDSTOOL_MODE_TOREVERT,            torevertMode);
    7778        MODECASE(MAGICDSTOOL_MODE_COMPLETEDREVERT,     completedrevertMode);
     79        MODECASE(MAGICDSTOOL_MODE_TOCLEANUP,           tocleanupMode);
    7880        default:
    7981            psAbort("invalid option (this should not happen)");
    … …  
    12211223
    12221224
     1225static bool tocleanupMode(pxConfig *config)
     1226{
     1227    PS_ASSERT_PTR_NON_NULL(config, false);
     1228
     1229    psMetadata *where = psMetadataAlloc();
     1230
     1231    PXOPT_COPY_S64(config->args, where, "-stage", "stage", "==");
     1232    PXOPT_COPY_S64(config->args, where, "-magic_ds_id", "magic_ds_id", "==");
     1233    PXOPT_COPY_S64(config->args, where, "-magic_id", "magic_id", "==");
     1234    pxAddLabelSearchArgs (config, where, "-label", "magicDSRun.label", "==");
     1235
     1236    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     1237    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     1238
     1239    psString query = pxDataGet("magicdstool_tocleanup.sql");
     1240    if (!query) {
     1241        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     1242        return false;
     1243    }
     1244
     1245    if (psListLength(where->list)) {
     1246        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     1247        psStringAppend(&query, " AND %s", whereClause);
     1248        psFree(whereClause);
     1249    }
     1250    psFree(where);
     1251
     1252    // treat limit == 0 as "no limit"
     1253    if (limit) {
     1254        psString limitString = psDBGenerateLimitSQL(limit);
     1255        psStringAppend(&query, " %s", limitString);
     1256        psFree(limitString);
     1257    }
     1258
     1259    if (!p_psDBRunQuery(config->dbh, query)) {
     1260        psError(PS_ERR_UNKNOWN, false, "database error");
     1261        psFree(query);
     1262        return false;
     1263    }
     1264    psFree(query);
     1265
     1266    psArray *output = p_psDBFetchResult(config->dbh);
     1267    if (!output) {
     1268        psErrorCode err = psErrorCodeLast();
     1269        switch (err) {
     1270            case PS_ERR_DB_CLIENT:
     1271                psError(PXTOOLS_ERR_SYS, false, "database error");
     1272            case PS_ERR_DB_SERVER:
     1273                psError(PXTOOLS_ERR_PROG, false, "database error");
     1274            default:
     1275                psError(PXTOOLS_ERR_PROG, false, "unknown error");
     1276        }
     1277
     1278        return false;
     1279    }
     1280    if (!psArrayLength(output)) {
     1281        psTrace("magicdstool", PS_LOG_INFO, "no rows found");
     1282        psFree(output);
     1283        return true;
     1284    }
     1285
     1286    if (psArrayLength(output)) {
     1287        // negative simple so the default is true
     1288        if (!ippdbPrintMetadatas(stdout, output, "tocleanup", !simple)) {
     1289            psError(PS_ERR_UNKNOWN, false, "failed to print array");
     1290            psFree(output);
     1291            return false;
     1292        }
     1293    }
     1294
     1295    psFree(output);
     1296
     1297    return true;
     1298}
  • trunk/ippTools/src/magicdstool.h

    r25465 r25822  
    3636    MAGICDSTOOL_MODE_TOREVERT,
    3737    MAGICDSTOOL_MODE_COMPLETEDREVERT,
     38    MAGICDSTOOL_MODE_TOCLEANUP,
    3839} MAGICDStoolMode;
    3940
  • trunk/ippTools/src/magicdstoolConfig.c

    r25792 r25822  
    157157    psMetadataAddU64(advancerunArgs, PS_LIST_TAIL, "-limit", 0, "limit result set to N items", 0);
    158158
     159    // -tocleanup
     160    psMetadata *tocleanupArgs = psMetadataAlloc();
     161    psMetadataAddS64(tocleanupArgs, PS_LIST_TAIL, "-magic_ds_id", 0, "search by magic Destreak ID", 0);
     162    psMetadataAddS64(tocleanupArgs, PS_LIST_TAIL, "-magic_id", 0, "search by magic ID", 0);
     163    psMetadataAddStr(tocleanupArgs, PS_LIST_TAIL, "-stage", 0, "define output directory", NULL);
     164    psMetadataAddStr(tocleanupArgs, PS_LIST_TAIL, "-label", PS_META_DUPLICATE_OK, "define label", NULL);
     165    psMetadataAddU64(tocleanupArgs, PS_LIST_TAIL, "-limit", 0, "limit result set to N items", 0);
     166    psMetadataAddBool(tocleanupArgs, PS_LIST_TAIL, "-simple", 0, "use the simple output format", false);
    159167    psFree(now);
    160168
    … …  
    185193    PXOPT_ADD_MODE("-completedrevert", "change state for runs that have finished reverting",
    186194                    MAGICDSTOOL_MODE_COMPLETEDREVERT, completedrevertArgs);
     195    PXOPT_ADD_MODE("-tocleanup", "destreak runs to clean up",
     196                    MAGICDSTOOL_MODE_TOCLEANUP, tocleanupArgs);
    187197
    188198
  • trunk/ippTools/src/warptool.c

    r25800 r25822  
    5858static bool exportrunMode(pxConfig *config);
    5959static bool importrunMode(pxConfig *config);
     60static bool runstateMode(pxConfig *config);
    6061
    6162static bool parseAndInsertSkyCellMap(pxConfig *config, const char *mapfile);
    … …  
    108109        MODECASE(WARPTOOL_MODE_EXPORTRUN,          exportrunMode);
    109110        MODECASE(WARPTOOL_MODE_IMPORTRUN,          importrunMode);
     111        MODECASE(WARPTOOL_MODE_RUNSTATE,           runstateMode);
    110112
    111113        default:
    … …  
    19151917  return true;
    19161918}
     1919
     1920static bool runstateMode(pxConfig *config)
     1921{
     1922    PS_ASSERT_PTR_NON_NULL(config, false);
     1923
     1924    psMetadata *where = psMetadataAlloc();
     1925    PXOPT_COPY_S64(config->args, where, "-warp_id",    "warpRun.warp_id", "==");
     1926    PXOPT_COPY_S64(config->args, where, "-exp_id",     "rawExp.exp_id", "==");
     1927    PXOPT_COPY_STR(config->args, where, "-exp_name",   "rawExp.exp_name", "==");
     1928    pxAddLabelSearchArgs (config, where, "-label",     "warpRun.label", "LIKE");
     1929
     1930//    PXOPT_LOOKUP_BOOL(all, config->args, "-all", false);
     1931    PXOPT_LOOKUP_BOOL(no_magic, config->args, "-no_magic", false);
     1932
     1933    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     1934    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     1935
     1936    psString query = pxDataGet("warptool_runstate.sql");
     1937    if (!query) {
     1938        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     1939        return false;
     1940    }
     1941
     1942    if (psListLength(where->list)) {
     1943        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     1944        psStringAppend(&query, " WHERE %s", whereClause);
     1945        psFree(whereClause);
     1946    } else {
     1947        psError(PXTOOLS_ERR_DATA, true, "search parameters or -all are required");
     1948        return false;
     1949    }
     1950    psFree(where);
     1951
     1952    // treat limit == 0 as "no limit"
     1953    if (limit) {
     1954        psString limitString = psDBGenerateLimitSQL(limit);
     1955        psStringAppend(&query, " %s", limitString);
     1956        psFree(limitString);
     1957    }
     1958
     1959    if (!p_psDBRunQuery(config->dbh, query)) {
     1960        psError(PS_ERR_UNKNOWN, false, "database error");
     1961        psFree(query);
     1962        return false;
     1963    }
     1964    psFree(query);
     1965
     1966    psArray *output = p_psDBFetchResult(config->dbh);
     1967    if (!output) {
     1968        psErrorCode err = psErrorCodeLast();
     1969        switch (err) {
     1970            case PS_ERR_DB_CLIENT:
     1971                psError(PXTOOLS_ERR_SYS, false, "database error");
     1972            case PS_ERR_DB_SERVER:
     1973                psError(PXTOOLS_ERR_PROG, false, "database error");
     1974            default:
     1975                psError(PXTOOLS_ERR_PROG, false, "unknown error");
     1976        }
     1977
     1978        return false;
     1979    }
     1980    if (!psArrayLength(output)) {
     1981        psTrace("warptool", PS_LOG_INFO, "no rows found");
     1982        psFree(output);
     1983        return true;
     1984    }
     1985
     1986    if (psArrayLength(output)) {
     1987        // negative simple so the default is true
     1988        if (!ippdbPrintMetadatas(stdout, output, "warpRunState", !simple)) {
     1989            psError(PS_ERR_UNKNOWN, false, "failed to print array");
     1990            psFree(output);
     1991            return false;
     1992        }
     1993    }
     1994
     1995    psFree(output);
     1996
     1997    return true;
     1998}
  • trunk/ippTools/src/warptool.h

    r25324 r25822  
    5353    WARPTOOL_MODE_UPDATESKYFILE,
    5454    WARPTOOL_MODE_EXPORTRUN,
    55     WARPTOOL_MODE_IMPORTRUN
     55    WARPTOOL_MODE_IMPORTRUN,
     56    WARPTOOL_MODE_RUNSTATE,
    5657} warptoolMode;
    5758
  • trunk/ippTools/src/warptoolConfig.c

    r25800 r25822  
    318318    psMetadataAddStr(importrunArgs, PS_LIST_TAIL, "-infile",  0,          "import from this file (required)", NULL);
    319319
     320    // -runstate
     321    psMetadata *runstateArgs = psMetadataAlloc();
     322    psMetadataAddS64(runstateArgs, PS_LIST_TAIL, "-warp_id", 0,           "search by warptool ID", 0);
     323//    psMetadataAddStr(runstateArgs, PS_LIST_TAIL, "-tess_id",  0,          "search by tessellation ID", NULL);
     324    psMetadataAddS64(runstateArgs, PS_LIST_TAIL, "-exp_id", 0,            "search by exposure tag", 0);
     325    psMetadataAddStr(runstateArgs, PS_LIST_TAIL, "-exp_name", 0,          "search by exposure tag", 0);
     326    psMetadataAddStr(runstateArgs, PS_LIST_TAIL,  "-label",  PS_META_DUPLICATE_OK, "search by warpRun label", NULL);
     327    psMetadataAddBool(runstateArgs, PS_LIST_TAIL, "-no_magic",  0,        "magic is not necessary for result", false);
     328
     329    psMetadataAddU64(runstateArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
     330    psMetadataAddBool(runstateArgs, PS_LIST_TAIL, "-simple",  0,          "use the simple output format", false);
     331
    320332
    321333    psFree(now);
    … …  
    336348    PXOPT_ADD_MODE("-advancerun",      "", WARPTOOL_MODE_ADVANCERUN,     advancerunArgs);
    337349    PXOPT_ADD_MODE("-warped",          "", WARPTOOL_MODE_WARPED,         warpedArgs);
     350    PXOPT_ADD_MODE("-runstate",        "", WARPTOOL_MODE_RUNSTATE,       runstateArgs);
    338351    PXOPT_ADD_MODE("-revertwarped",    "", WARPTOOL_MODE_REVERTWARPED,   revertwarpedArgs);
    339352    PXOPT_ADD_MODE("-block",                 "set a label block",                    WARPTOOL_MODE_BLOCK,          blockArgs);
Note: See TracChangeset for help on using the changeset viewer.