IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 27737


Ignore:
Timestamp:
Apr 23, 2010, 11:19:20 AM (16 years ago)
Author:
bills
Message:

Fix very slow query for -towarped. Re-enable update processing;
Add -setskyfiletoupdate mode to queue updates for a single skycell.
Add -listrun.
Various other changes to support the postage stamp server.

Location:
trunk/ippTools
Files:
2 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippTools/share/warptool_pendingcleanupskyfile.sql

    r24186 r27737  
    1010    USING(warp_id)
    1111WHERE
    12    ((warpRun.state = 'goto_cleaned'  AND warpSkyfile.data_state = 'full')
     12   ((warpRun.state = 'goto_cleaned'  AND (warpSkyfile.data_state = 'full'
     13                                      OR  warpSkyfile.data_state = 'update'))
    1314    OR
    1415    (warpRun.state = 'goto_scrubbed' AND warpSkyfile.data_state != 'scrubbed')
  • trunk/ippTools/share/warptool_scmap.sql

    r19092 r27737  
    33    chipProcessedImfile.uri,
    44    chipProcessedImfile.path_base as chip_path_base,
    5     camProcessedExp.path_base as cam_path_base
     5    camProcessedExp.path_base as cam_path_base,
     6    chipProcessedImfile.chip_id,
     7    chipRun.state,
     8    chipProcessedImfile.data_state,
     9    chipProcessedImfile.magicked,
     10    rawImfile.magicked AS raw_magicked
    611FROM warpRun
    712JOIN warpSkyCellMap
     
    1823    ON chipRun.chip_id = chipProcessedImfile.chip_id
    1924    AND warpSkyCellMap.class_id = chipProcessedImfile.class_id
     25JOIN rawImfile
     26    ON chipRun.exp_id = rawImfile.exp_id
     27    AND chipProcessedImfile.class_id = rawImfile.class_id
    2028WHERE
    21 --    warpRun.state = 'new'
    22     fakeRun.state = 'full'
    23     AND camRun.state = 'full'
    24     AND chipRun.state = 'full'
     29    1
  • trunk/ippTools/share/warptool_towarped.sql

    r27503 r27737  
     1SELECT
     2    warp_id,
     3    warp_skyfile_id,
     4    skycell_id,
     5    tess_id,
     6    fake_id,
     7    state,
     8    reduction,
     9    cam_id,
     10    camera,
     11    exp_tag,
     12    workdir,
     13    magicked
     14FROM (
    115    SELECT DISTINCT
    216        warpSkyCellMap.warp_id,
     
    4559        AND warpSkyCellMap.fault = 0
    4660        -- where hook 1 %s
     61        -- limit hook 1 %s
     62UNION
     63    SELECT
     64        warpSkyCellMap.warp_id,
     65        warpImfile.warp_skyfile_id,
     66        warpSkyCellMap.skycell_id,
     67        warpSkyCellMap.tess_id,
     68        warpRun.fake_id,
     69        warpRun.state,
     70        warpRun.reduction,
     71        camRun.cam_id,
     72        rawExp.camera,
     73        rawExp.exp_tag,
     74        warpRun.workdir,
     75        MIN(chipProcessedImfile.magicked) AS magicked
     76    FROM warpRun
     77    JOIN warpImfile USING(warp_id)
     78    JOIN warpSkyCellMap USING(warp_id, skycell_id)
     79    JOIN warpSkyfile USING(warp_id, skycell_id)
     80    JOIN fakeRun USING(fake_id)
     81    JOIN camRun USING(cam_id)
     82    JOIN chipRun USING(chip_id)
     83    JOIN rawExp USING(exp_id)
     84    LEFT JOIN chipProcessedImfile USING(chip_id, class_id)
     85    WHERE warpRun.state = 'update'
     86        AND warpSkyfile.data_state = 'update'
     87        AND warpSkyfile.fault = 0
     88        AND camRun.state = 'full'
     89        AND chipProcessedImfile.data_state = 'full'
     90        -- if warpSkyfile was magicked previously require inputs to be magicked
     91        -- this blocks processing until all the chip inputs have been destreaked
     92        AND (warpSkyfile.magicked = 0 OR chipProcessedImfile.magicked >= 0)
     93        -- where hook 2 %s
     94    GROUP BY warp_id, skycell_id
     95    HAVING COUNT(warpSkyCellMap.class_id) = COUNT(chipProcessedImfile.class_id)
     96    -- limit hook 2 %s
     97) as towarped
     98
  • trunk/ippTools/share/warptool_warped.sql

    r25791 r27737  
    2121JOIN rawExp
    2222    ON chipRun.exp_id  = rawExp.exp_id
    23 WHERE
    24 -- bogus test; just here so there there is a 'WHERE' stmt to append conditionals too
    25 -- XXX EAM : not needed: fix warptool.c
    26     warpRun.warp_id is NOT NULL
  • trunk/ippTools/src/warptool.c

    r27503 r27737  
    5959static bool importrunMode(pxConfig *config);
    6060static bool runstateMode(pxConfig *config);
     61static bool listrunMode(pxConfig *config);
     62static bool setskyfiletoupdateMode(pxConfig *config);
    6163
    6264static bool parseAndInsertSkyCellMap(pxConfig *config, const char *mapfile);
     
    110112        MODECASE(WARPTOOL_MODE_IMPORTRUN,          importrunMode);
    111113        MODECASE(WARPTOOL_MODE_RUNSTATE,           runstateMode);
     114        MODECASE(WARPTOOL_MODE_LISTRUN,            listrunMode);
     115        MODECASE(WARPTOOL_MODE_SETSKYFILETOUPDATE, setskyfiletoupdateMode);
    112116
    113117        default:
     
    916920
    917921    // treat limit == 0 as "no limit"
     922    psString limitString = psStringCopy("\n");
    918923    if (limit) {
    919         psString limitString = psDBGenerateLimitSQL(limit);
     924        // We apply the limit to both sides of the UNION
     925        // to avoid slow queries and to the query itself
     926        // to satisfy the user's requested limit
     927        psStringAppend(&limitString, psDBGenerateLimitSQL(limit));
    920928        psStringAppend(&query, " %s", limitString);
    921         psFree(limitString);
    922     }
    923 
     929    }
     930
     931#define TWO_WHERES
    924932#ifdef TWO_WHERES
    925     if (!p_psDBRunQueryF(config->dbh, query, whereStr, whereStr)) {
     933    if (!p_psDBRunQueryF(config->dbh, query, whereStr, limitString, whereStr,  limitString)) {
    926934        psError(PS_ERR_UNKNOWN, false, "database error");
    927935        psFree(query);
     
    935943    }
    936944#endif
     945    psFree(limitString);
    937946    psFree(whereStr);
    938947    psFree(query);
     
    9941003    PXOPT_LOOKUP_STR(hostname, config->args, "-hostname", false, false);
    9951004    PXOPT_LOOKUP_F32(good_frac, config->args, "-good_frac", false, false);
    996     PXOPT_LOOKUP_S64(magicked, config->args, "-magicked", false, false);
     1005    PXOPT_LOOKUP_S64(magicked, config->args, "-set_magicked", false, false);
    9971006
    9981007    // default values
     
    12421251    if (psListLength(where->list)) {
    12431252        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
    1244         psStringAppend(&query, " AND %s", whereClause);
     1253        psStringAppend(&query, " WHERE %s", whereClause);
    12451254        psFree(whereClause);
    12461255    } else if (!all && !where2) {
     
    12481257        return false;
    12491258    }
     1259
     1260    if (where2) {
     1261        if (psListLength(where->list)) {
     1262            psStringAppend(&query, " %s", where2);
     1263        } else {
     1264            psStringAppend(&query, " WHERE 1 %s", where2);
     1265        }
     1266    }
    12501267    psFree(where);
    1251 
    1252     if (where2) {
    1253         psStringAppend(&query, " %s", where2);
    1254     }
    12551268
    12561269    // treat limit == 0 as "no limit"
     
    16651678    }
    16661679
    1667     char *set_magicked_skyfile = "";
    1668     char *set_magicked_run = "";
     1680    psString set_magicked_skyfile = psStringCopy("");
     1681    psString set_magicked_run = psStringCopy("");
    16691682    if (!strcmp(data_state, "full")) {
    1670         set_magicked_skyfile = "\n , warpSkyfile.magicked = IF((warpSkyfile.magicked < 0 AND chipRun.magicked = 0), warpSkyfile.magicked, chipRun.magicked)";
    1671         set_magicked_run = "\n,  warpRun.magicked = IF((warpRun.magicked < 0 AND chipRun.magicked = 0), warpRun.magicked, chipRun.magicked)";
    1672 
     1683        // magicked is only an argument for for -tofullskyfile
     1684        PXOPT_LOOKUP_S64(magicked, config->args, "-set_magicked", false, false);
     1685        if (magicked) {
     1686            psStringAppend(&set_magicked_skyfile, "\n , warpSkyfile.magicked = %" PRId64, magicked);
     1687            psStringAppend(&set_magicked_run, "\n,  warpRun.magicked = %" PRId64, magicked);
     1688        }
    16731689    } else if (!strcmp(data_state, "cleaned") || !strcmp(data_state, "purged")) {
    1674         set_magicked_skyfile = "\n, warpSkyfile.magicked = IF(warpSkyfile.magicked = 0, 0, -1)";
    1675         set_magicked_run = "\n, warpRun.magicked = IF(warpRun.magicked = 0, 0, -1)";
     1690        // if magicked is currently nonzero set it to -1
     1691        // Set warpRun.magicked when the first skyfile is cleaned
     1692        psStringAppend(&set_magicked_skyfile, "\n, warpSkyfile.magicked = IF(warpSkyfile.magicked = 0, 0, -1), warpRun.magicked = IF(warpRun.magicked = 0, 0, -1)");
    16761693    }
    16771694
     
    16861703    }
    16871704    psFree(query);
     1705    psFree(set_magicked_skyfile);
    16881706
    16891707    query = pxDataGet("warptool_change_run_state.sql");
     
    16961714        return false;
    16971715    }
     1716    psFree(set_magicked_run);
    16981717
    16991718    if (!psDBCommit(config->dbh)) {
     
    20262045    return true;
    20272046}
     2047
     2048static bool listrunMode(pxConfig *config)
     2049{
     2050    PS_ASSERT_PTR_NON_NULL(config, false);
     2051
     2052    psMetadata *where = psMetadataAlloc();
     2053    PXOPT_COPY_S64(config->args, where, "-warp_id",    "warpRun.warp_id", "==");
     2054    PXOPT_COPY_STR(config->args, where, "-tess_id",    "warpRun.tess_id", "==");
     2055    PXOPT_COPY_STR(config->args, where, "-state",      "warpRun.state", "==");
     2056    PXOPT_COPY_S64(config->args, where, "-exp_id",     "rawExp.exp_id", "==");
     2057    PXOPT_COPY_STR(config->args, where, "-exp_name",   "rawExp.exp_name", "==");
     2058    PXOPT_COPY_S64(config->args, where, "-fake_id",    "fakeRun.fake_id", "==");
     2059    PXOPT_COPY_TIME(config->args, where, "-dateobs_begin", "rawExp.dateobs",  ">=");
     2060    PXOPT_COPY_TIME(config->args, where, "-dateobs_end",   "rawExp.dateobs",  "<=");
     2061    PXOPT_COPY_STR(config->args, where, "-filter",    "rawExp.filter", "LIKE");
     2062    PXOPT_COPY_S64(config->args, where, "-magicked", "warpRun.magicked", "==");
     2063    pxAddLabelSearchArgs (config, where, "-label",   "warpRun.label", "LIKE");
     2064    pxAddLabelSearchArgs (config, where, "-data_group",   "warpRun.data_group", "LIKE");
     2065    pxAddLabelSearchArgs (config, where, "-dist_group",   "warpRun.dist_group", "LIKE");
     2066
     2067    PXOPT_LOOKUP_BOOL(all, config->args, "-all", false);
     2068
     2069    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     2070    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     2071    PXOPT_LOOKUP_BOOL(pstamp_order, config->args, "-pstamp_order", false);
     2072
     2073    // find all rawImfiles matching the default query
     2074    psString query = pxDataGet("warptool_listrun.sql");
     2075    if (!query) {
     2076        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     2077        return false;
     2078    }
     2079
     2080    // generate where strings for arguments that require extra processing
     2081    // beyond PXOPT_COPY*
     2082    psString where2 = NULL;
     2083    if (!pxmagicAddWhere(config, &where2, "warpRun")) {
     2084        psError(psErrorCodeLast(), false, "pxMagicAddWhere failed");
     2085        return false;
     2086    }
     2087    if (!pxspaceAddWhere(config, &where2, "rawExp")) {
     2088        psError(psErrorCodeLast(), false, "pxSpaceAddWhere failed");
     2089        return false;
     2090    }
     2091
     2092    if (psListLength(where->list)) {
     2093        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     2094        psStringAppend(&query, " WHERE %s", whereClause);
     2095        psFree(whereClause);
     2096    } else if (!all && !where2) {
     2097        psError(PXTOOLS_ERR_CONFIG, true, "search parameters or -all are required");
     2098        return false;
     2099    }
     2100
     2101    if (where2) {
     2102        if (psListLength(where->list)) {
     2103            psStringAppend(&query, " %s", where2);
     2104        } else {
     2105            psStringAppend(&query, " WHERE 1 %s", where2);
     2106        }
     2107    }
     2108    psFree(where);
     2109
     2110    if (pstamp_order) {
     2111        // put runs in order of exposure id with newest chip Runs first
     2112        // The postage stamp parser depends on this behavior
     2113        psStringAppend(&query, "\nORDER by exp_id, warp_id DESC");
     2114    }
     2115
     2116
     2117    // treat limit == 0 as "no limit"
     2118    if (limit) {
     2119        psString limitString = psDBGenerateLimitSQL(limit);
     2120        psStringAppend(&query, " %s", limitString);
     2121        psFree(limitString);
     2122    }
     2123
     2124    if (!p_psDBRunQuery(config->dbh, query)) {
     2125        psError(PS_ERR_UNKNOWN, false, "database error");
     2126        psFree(query);
     2127        return false;
     2128    }
     2129    psFree(query);
     2130
     2131    psArray *output = p_psDBFetchResult(config->dbh);
     2132    if (!output) {
     2133        psErrorCode err = psErrorCodeLast();
     2134        switch (err) {
     2135            case PS_ERR_DB_CLIENT:
     2136                psError(PXTOOLS_ERR_SYS, false, "database error");
     2137            case PS_ERR_DB_SERVER:
     2138                psError(PXTOOLS_ERR_PROG, false, "database error");
     2139            default:
     2140                psError(PXTOOLS_ERR_PROG, false, "unknown error");
     2141        }
     2142
     2143        return false;
     2144    }
     2145    if (!psArrayLength(output)) {
     2146        psTrace("warptool", PS_LOG_INFO, "no rows found");
     2147        psFree(output);
     2148        return true;
     2149    }
     2150
     2151    if (psArrayLength(output)) {
     2152        // negative simple so the default is true
     2153        if (!ippdbPrintMetadatas(stdout, output, "warpRun", !simple)) {
     2154            psError(PS_ERR_UNKNOWN, false, "failed to print array");
     2155            psFree(output);
     2156            return false;
     2157        }
     2158    }
     2159
     2160    psFree(output);
     2161
     2162    return true;
     2163}
     2164
     2165// a very specfic function to queue a cleaned warpSkyfile to be updated
     2166static bool setskyfiletoupdateMode(pxConfig *config)
     2167{
     2168    PS_ASSERT_PTR_NON_NULL(config, NULL);
     2169
     2170    PXOPT_LOOKUP_S64(warp_id, config->args, "-warp_id", true, false);
     2171    PXOPT_LOOKUP_STR(skycell_id, config->args, "-skycell_id", false, false);
     2172    PXOPT_LOOKUP_STR(label, config->args, "-set_label", false, false);
     2173
     2174    psString query = pxDataGet("warptool_setskyfiletoupdate.sql");
     2175    if (!query) {
     2176        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     2177        return false;
     2178    }
     2179
     2180    psString setHook = psStringCopy("");
     2181    if (label) {
     2182        psStringAppend(&setHook, "\n , warpRun.label = '%s'", label);
     2183    }
     2184
     2185    if (skycell_id) {
     2186        psStringAppend(&query, " AND (warpSkyfile.skycell_id = '%s')", skycell_id);
     2187    }
     2188
     2189    if (!p_psDBRunQueryF(config->dbh, query, setHook, warp_id)) {
     2190        psError(PS_ERR_UNKNOWN, false, "database error");
     2191        return false;
     2192    }
     2193
     2194    psFree(setHook);
     2195    psFree(query);
     2196
     2197    return true;
     2198}
  • trunk/ippTools/src/warptool.h

    r25822 r27737  
    5555    WARPTOOL_MODE_IMPORTRUN,
    5656    WARPTOOL_MODE_RUNSTATE,
     57    WARPTOOL_MODE_LISTRUN,
     58    WARPTOOL_MODE_SETSKYFILETOUPDATE,
    5759} warptoolMode;
    5860
  • trunk/ippTools/src/warptoolConfig.c

    r27389 r27737  
    217217    psMetadataAddStr(addwarpedArgs, PS_LIST_TAIL, "-hostname", 0,            "define hostname", 0);
    218218    psMetadataAddF32(addwarpedArgs, PS_LIST_TAIL, "-good_frac",  0,            "define %% of good pixels", NAN);
    219     psMetadataAddS64(addwarpedArgs, PS_LIST_TAIL, "-magicked",  0, "define if this skycell has been magicked", 0);
     219    psMetadataAddS64(addwarpedArgs, PS_LIST_TAIL, "-set_magicked",  0, "define if this skycell has been magicked", 0);
    220220    psMetadataAddS16(addwarpedArgs, PS_LIST_TAIL, "-fault",  0,            "set fault code", 0);
    221221    psMetadataAddS16(addwarpedArgs, PS_LIST_TAIL, "-quality",  0,            "set quality", 0);
     
    236236    psMetadataAddStr(warpedArgs, PS_LIST_TAIL,  "-label",  PS_META_DUPLICATE_OK, "search by warpRun label", NULL);
    237237    psMetadataAddStr(warpedArgs, PS_LIST_TAIL,  "-data_group",  PS_META_DUPLICATE_OK, "search by warpRun data_group", NULL);
     238    psMetadataAddStr(warpedArgs, PS_LIST_TAIL,  "-dist_group",  PS_META_DUPLICATE_OK, "search by warpRun dist_group", NULL);
    238239    // add magic related arguments
    239240    pxmagicAddArguments(warpedArgs);
     
    244245    psMetadataAddU64(warpedArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
    245246    psMetadataAddBool(warpedArgs, PS_LIST_TAIL, "-simple",  0,          "use the simple output format", false);
     247
     248    // -listrun
     249    psMetadata *listrunArgs = psMetadataAlloc();
     250    psMetadataAddS64(listrunArgs, PS_LIST_TAIL, "-warp_id", 0,           "search by warptool ID", 0);
     251    psMetadataAddStr(listrunArgs, PS_LIST_TAIL, "-tess_id",  0,          "search by tessellation ID", NULL);
     252    psMetadataAddStr(listrunArgs, PS_LIST_TAIL, "-state",  0,            "search by state", NULL);
     253    psMetadataAddS64(listrunArgs, PS_LIST_TAIL, "-exp_id", 0,            "search by exposure tag", 0);
     254    psMetadataAddStr(listrunArgs, PS_LIST_TAIL, "-exp_name", 0,          "search by exposure tag", 0);
     255    psMetadataAddS64(listrunArgs, PS_LIST_TAIL, "-fake_id", 0,           "search by phase 3 version of exposure tag", 0);
     256    psMetadataAddTime(listrunArgs, PS_LIST_TAIL, "-dateobs_begin", 0,    "search for exposures by time (>=)", NULL);
     257    psMetadataAddTime(listrunArgs, PS_LIST_TAIL, "-dateobs_end", 0,      "search for exposures by time (<=)", NULL);
     258    psMetadataAddStr(listrunArgs, PS_LIST_TAIL,  "-filter", 0,           "search for exposures by filter", NULL);
     259    psMetadataAddS16(listrunArgs, PS_LIST_TAIL,  "-fault",  0,           "search by fault code", 0);
     260    psMetadataAddStr(listrunArgs, PS_LIST_TAIL,  "-label",  PS_META_DUPLICATE_OK, "search by warpRun label", NULL);
     261    psMetadataAddStr(listrunArgs, PS_LIST_TAIL,  "-data_group",  PS_META_DUPLICATE_OK, "search by warpRun data_group", NULL);
     262    psMetadataAddStr(listrunArgs, PS_LIST_TAIL,  "-dist_group",  PS_META_DUPLICATE_OK, "search by warpRun dist_group", NULL);
     263    // add magic related arguments
     264    pxmagicAddArguments(listrunArgs);
     265    // add arguments for spatial search
     266    pxspaceAddArguments(listrunArgs);
     267
     268    psMetadataAddBool(listrunArgs, PS_LIST_TAIL, "-pstamp_order",  0,    "order results for postage stamp server", false);
     269
     270    psMetadataAddBool(listrunArgs, PS_LIST_TAIL, "-all",  0,             "search without arguments", false);
     271    psMetadataAddU64(listrunArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
     272    psMetadataAddBool(listrunArgs, PS_LIST_TAIL, "-simple",  0,          "use the simple output format", false);
    246273
    247274    // -revertwarped
     
    315342    psMetadataAddS64(tofullskyfileArgs, PS_LIST_TAIL, "-warp_id", 0,    "warptool ID to update", 0);
    316343    psMetadataAddStr(tofullskyfileArgs, PS_LIST_TAIL, "-skycell_id", 0, "skycell ID to update", NULL);
     344    psMetadataAddS64(tofullskyfileArgs, PS_LIST_TAIL, "-set_magicked",  0, "new value for magicked", 0);
    317345
    318346    // -updateskyfile
     
    345373    psMetadataAddU64(runstateArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
    346374    psMetadataAddBool(runstateArgs, PS_LIST_TAIL, "-simple",  0,          "use the simple output format", false);
     375
     376    // -setskyfiletoupdate
     377    psMetadata *setskyfiletoupdateArgs = psMetadataAlloc();
     378    psMetadataAddS64(setskyfiletoupdateArgs, PS_LIST_TAIL, "-warp_id", 0,           "search by warptool ID (required)", 0);
     379    psMetadataAddStr(setskyfiletoupdateArgs, PS_LIST_TAIL, "-skycell_id",  0,       "search by tessellation ID", NULL);
     380    psMetadataAddStr(setskyfiletoupdateArgs, PS_LIST_TAIL, "-set_label",  0,        "new value for warpRun.label", NULL);
    347381
    348382
     
    364398    PXOPT_ADD_MODE("-advancerun",      "", WARPTOOL_MODE_ADVANCERUN,     advancerunArgs);
    365399    PXOPT_ADD_MODE("-warped",          "", WARPTOOL_MODE_WARPED,         warpedArgs);
     400    PXOPT_ADD_MODE("-listrun",         "", WARPTOOL_MODE_LISTRUN,        listrunArgs);
    366401    PXOPT_ADD_MODE("-runstate",        "", WARPTOOL_MODE_RUNSTATE,       runstateArgs);
    367402    PXOPT_ADD_MODE("-revertwarped",    "", WARPTOOL_MODE_REVERTWARPED,   revertwarpedArgs);
     
    377412    PXOPT_ADD_MODE("-tofullskyfile", "set skyfile as full (updated)", WARPTOOL_MODE_TOFULLSKYFILE, tofullskyfileArgs);
    378413    PXOPT_ADD_MODE("-updateskyfile", "update fault code for skyfile", WARPTOOL_MODE_UPDATESKYFILE, updateskyfileArgs);
     414    PXOPT_ADD_MODE("-setskyfiletoupdate", "set cleaned skyfile to be updated", WARPTOOL_MODE_SETSKYFILETOUPDATE, setskyfiletoupdateArgs);
    379415    PXOPT_ADD_MODE("-exportrun",            "export run for import on other database", WARPTOOL_MODE_EXPORTRUN, exportrunArgs);
    380416    PXOPT_ADD_MODE("-importrun",            "import run from metadata file",           WARPTOOL_MODE_IMPORTRUN, importrunArgs);
Note: See TracChangeset for help on using the changeset viewer.