diff options
author | Michi Henning <michi@zeroc.com> | 2004-12-16 03:15:51 +0000 |
---|---|---|
committer | Michi Henning <michi@zeroc.com> | 2004-12-16 03:15:51 +0000 |
commit | b5c3efca572afd6c9cadbc87e9f4c068d312d928 (patch) | |
tree | e34f481e7ed94f176fcbe266767fea241dc3c764 /cpp/src/FreezeScript/transformdb.cpp | |
parent | remove now returns null if the key is not found (diff) | |
download | ice-b5c3efca572afd6c9cadbc87e9f4c068d312d928.tar.bz2 ice-b5c3efca572afd6c9cadbc87e9f4c068d312d928.tar.xz ice-b5c3efca572afd6c9cadbc87e9f4c068d312d928.zip |
Changed command line parsing to use IceUtil::Options.
Diffstat (limited to 'cpp/src/FreezeScript/transformdb.cpp')
-rw-r--r-- | cpp/src/FreezeScript/transformdb.cpp | 387 |
1 files changed, 134 insertions, 253 deletions
diff --git a/cpp/src/FreezeScript/transformdb.cpp b/cpp/src/FreezeScript/transformdb.cpp index 35bf8ac9280..16162b6a4a2 100644 --- a/cpp/src/FreezeScript/transformdb.cpp +++ b/cpp/src/FreezeScript/transformdb.cpp @@ -14,6 +14,7 @@ #include <Freeze/Initialize.h> #include <Freeze/Transaction.h> #include <Freeze/Catalog.h> +#include <IceUtil/Options.h> #include <db_cxx.h> #include <sys/stat.h> #include <fstream> @@ -182,290 +183,170 @@ run(int argc, char** argv, const Ice::CommunicatorPtr& communicator) { string oldCppArgs; string newCppArgs; - bool debug = false; + bool debug; bool ice = true; // Needs to be true in order to create default definitions. - bool caseSensitive = false; string outputFile; - bool ignoreTypeChanges = false; - bool purgeObjects = false; - bool catastrophicRecover = false; - bool suppress = false; - bool allDb = false; + bool allDb; + bool ignoreTypeChanges; + bool purgeObjects; + bool catastrophicRecover; + bool suppress; string inputFile; vector<string> oldSlice; vector<string> newSlice; - bool evictor = false; + bool evictor; + bool caseSensitive; string keyTypeNames; string valueTypeNames; string dbEnvName, dbName, dbEnvNameNew; - int idx = 1; - while(idx < argc) + IceUtil::Options opts; + opts.addOpt("h", "help"); + opts.addOpt("v", "version"); + opts.addOpt("D", "", IceUtil::Options::NeedArg, "", IceUtil::Options::Repeat); + opts.addOpt("U", "", IceUtil::Options::NeedArg, "", IceUtil::Options::Repeat); + opts.addOpt("d", "debug"); + opts.addOpt("", "ice"); + opts.addOpt("o", "", IceUtil::Options::NeedArg); + opts.addOpt("a"); + opts.addOpt("i"); + opts.addOpt("p"); + opts.addOpt("c"); + opts.addOpt("w"); + opts.addOpt("f", "", IceUtil::Options::NeedArg); + opts.addOpt("", "include-old", IceUtil::Options::NeedArg, "", IceUtil::Options::Repeat); + opts.addOpt("", "include-new", IceUtil::Options::NeedArg, "", IceUtil::Options::Repeat); + opts.addOpt("", "old", IceUtil::Options::NeedArg, "", IceUtil::Options::Repeat); + opts.addOpt("", "new", IceUtil::Options::NeedArg, "", IceUtil::Options::Repeat); + opts.addOpt("e"); + opts.addOpt("", "key", IceUtil::Options::NeedArg); + opts.addOpt("", "value", IceUtil::Options::NeedArg); + opts.addOpt("", "case-sensitive"); + + vector<string> args; + try { - if(strcmp(argv[idx], "-h") == 0 || strcmp(argv[idx], "--help") == 0) - { - usage(argv[0]); - return EXIT_SUCCESS; - } - else if(strcmp(argv[idx], "-v") == 0 || strcmp(argv[idx], "--version") == 0) - { - cout << ICE_STRING_VERSION << endl; - return EXIT_SUCCESS; - } - else if(strncmp(argv[idx], "-D", 2) == 0 || strncmp(argv[idx], "-U", 2) == 0) - { - oldCppArgs += ' '; - oldCppArgs += argv[idx]; - newCppArgs += ' '; - newCppArgs += argv[idx]; - - for(int i = idx ; i + 1 < argc ; ++i) - { - argv[i] = argv[i + 1]; - } - --argc; - } - else if(strcmp(argv[idx], "-d") == 0 || strcmp(argv[idx], "--debug") == 0) - { - debug = true; - for(int i = idx ; i + 1 < argc ; ++i) - { - argv[i] = argv[i + 1]; - } - --argc; - } - else if(strcmp(argv[idx], "--ice") == 0) - { - ice = true; - for(int i = idx ; i + 1 < argc ; ++i) - { - argv[i] = argv[i + 1]; - } - --argc; - } - else if(strcmp(argv[idx], "--case-sensitive") == 0) - { - caseSensitive = true; - for(int i = idx ; i + 1 < argc ; ++i) - { - argv[i] = argv[i + 1]; - } - --argc; - } - else if(strcmp(argv[idx], "-a") == 0) - { - allDb = true; - for(int i = idx ; i + 1 < argc ; ++i) - { - argv[i] = argv[i + 1]; - } - --argc; - } - else if(strcmp(argv[idx], "-o") == 0) - { - if(idx + 1 >= argc || argv[idx + 1][0] == '-') - { - cerr << argv[0] << ": argument expected for `" << argv[idx] << "'" << endl; - usage(argv[0]); - return EXIT_FAILURE; - } - - outputFile = argv[idx + 1]; - - for(int i = idx ; i + 2 < argc ; ++i) - { - argv[i] = argv[i + 2]; - } - argc -= 2; - } - else if(strcmp(argv[idx], "-i") == 0) - { - ignoreTypeChanges = true; - for(int i = idx ; i + 1 < argc ; ++i) - { - argv[i] = argv[i + 1]; - } - --argc; - } - else if(strcmp(argv[idx], "-p") == 0) - { - purgeObjects = true; - for(int i = idx ; i + 1 < argc ; ++i) - { - argv[i] = argv[i + 1]; - } - --argc; - } - else if(strcmp(argv[idx], "-c") == 0) - { - catastrophicRecover = true; - for(int i = idx ; i + 1 < argc ; ++i) - { - argv[i] = argv[i + 1]; - } - --argc; - } - else if(strcmp(argv[idx], "-w") == 0) - { - suppress = true; - for(int i = idx ; i + 1 < argc ; ++i) - { - argv[i] = argv[i + 1]; - } - --argc; - } - else if(strcmp(argv[idx], "-f") == 0) - { - if(idx + 1 >= argc || argv[idx + 1][0] == '-') - { - cerr << argv[0] << ": argument expected for `" << argv[idx] << "'" << endl; - usage(argv[0]); - return EXIT_FAILURE; - } - - inputFile = argv[idx + 1]; - - for(int i = idx ; i + 2 < argc ; ++i) - { - argv[i] = argv[i + 2]; - } - argc -= 2; - } - else if(strcmp(argv[idx], "--include-old") == 0) - { - oldCppArgs += " -I"; - oldCppArgs += argv[idx + 1]; - - for(int i = idx ; i + 2 < argc ; ++i) - { - argv[i] = argv[i + 2]; - } - argc -= 2; - } - else if(strcmp(argv[idx], "--include-new") == 0) - { - newCppArgs += " -I"; - newCppArgs += argv[idx + 1]; - - for(int i = idx ; i + 2 < argc ; ++i) - { - argv[i] = argv[i + 2]; - } - argc -= 2; - } - else if(strcmp(argv[idx], "--old") == 0) - { - if(idx + 1 >= argc || argv[idx + 1][0] == '-') - { - cerr << argv[0] << ": argument expected for `" << argv[idx] << "'" << endl; - usage(argv[0]); - return EXIT_FAILURE; - } - - oldSlice.push_back(argv[idx + 1]); - - for(int i = idx ; i + 2 < argc ; ++i) - { - argv[i] = argv[i + 2]; - } - argc -= 2; - } - else if(strcmp(argv[idx], "--new") == 0) - { - if(idx + 1 >= argc || argv[idx + 1][0] == '-') - { - cerr << argv[0] << ": argument expected for `" << argv[idx] << "'" << endl; - usage(argv[0]); - return EXIT_FAILURE; - } - - newSlice.push_back(argv[idx + 1]); - - for(int i = idx ; i + 2 < argc ; ++i) - { - argv[i] = argv[i + 2]; - } - argc -= 2; - } - else if(strcmp(argv[idx], "-e") == 0) - { - evictor = true; - for(int i = idx ; i + 1 < argc ; ++i) - { - argv[i] = argv[i + 1]; - } - --argc; - } - else if(strcmp(argv[idx], "--key") == 0) - { - if(idx + 1 >= argc || argv[idx + 1][0] == '-') - { - cerr << argv[0] << ": argument expected for `" << argv[idx] << "'" << endl; - usage(argv[0]); - return EXIT_FAILURE; - } - - keyTypeNames = argv[idx + 1]; + args = opts.parse(argc, argv); + } + catch(const IceUtil::Options::BadOpt& e) + { + cerr << argv[0] << ": " << e.reason << endl; + usage(argv[0]); + return EXIT_FAILURE; + } - for(int i = idx ; i + 2 < argc ; ++i) - { - argv[i] = argv[i + 2]; - } - argc -= 2; - } - else if(strcmp(argv[idx], "--value") == 0) - { - if(idx + 1 >= argc || argv[idx + 1][0] == '-') - { - cerr << argv[0] << ": argument expected for `" << argv[idx] << "'" << endl; - usage(argv[0]); - return EXIT_FAILURE; - } + if(opts.isSet("h") || opts.isSet("help")) + { + usage(argv[0]); + return EXIT_SUCCESS; + } + if(opts.isSet("v") || opts.isSet("version")) + { + cout << ICE_STRING_VERSION << endl; + return EXIT_SUCCESS; + } + if(opts.isSet("D")) + { + vector<string> optargs = opts.argVec("D"); + for(vector<string>::const_iterator i = optargs.begin(); i != optargs.end(); ++i) + { + oldCppArgs += " -D" + *i; + newCppArgs += " -D" + *i; + } + } + if(opts.isSet("U")) + { + vector<string> optargs = opts.argVec("U"); + for(vector<string>::const_iterator i = optargs.begin(); i != optargs.end(); ++i) + { + oldCppArgs += " -U" + *i; + newCppArgs += " -U" + *i; + } + } + debug = opts.isSet("d") || opts.isSet("debug"); - valueTypeNames = argv[idx + 1]; + // No need to set --ice here, it is always true. - for(int i = idx ; i + 2 < argc ; ++i) - { - argv[i] = argv[i + 2]; - } - argc -= 2; - } - else if(argv[idx][0] == '-') - { - cerr << argv[0] << ": unknown option `" << argv[idx] << "'" << endl; - usage(argv[0]); - return EXIT_FAILURE; - } - else - { - ++idx; - } + if(opts.isSet("o")) + { + outputFile = opts.optArg("o"); + } + allDb = opts.isSet("a"); + ignoreTypeChanges = opts.isSet("i"); + purgeObjects = opts.isSet("p"); + catastrophicRecover = opts.isSet("c"); + suppress = opts.isSet("w"); + if(opts.isSet("f")) + { + inputFile = opts.optArg("f"); + } + if(opts.isSet("include-old")) + { + vector<string> optargs = opts.argVec("include-old"); + for(vector<string>::const_iterator i = optargs.begin(); i != optargs.end(); ++i) + { + oldCppArgs += " -I" + *i; + } + } + if(opts.isSet("include-new")) + { + vector<string> optargs = opts.argVec("include-new"); + for(vector<string>::const_iterator i = optargs.begin(); i != optargs.end(); ++i) + { + newCppArgs += " -I" + *i; + } + } + if(opts.isSet("old")) + { + vector<string> optargs = opts.argVec("old"); + for(vector<string>::const_iterator i = optargs.begin(); i != optargs.end(); ++i) + { + oldSlice.push_back(*i); + } + } + if(opts.isSet("new")) + { + vector<string> optargs = opts.argVec("new"); + for(vector<string>::const_iterator i = optargs.begin(); i != optargs.end(); ++i) + { + newSlice.push_back(*i); + } + } + evictor = opts.isSet("e"); + if(opts.isSet("key")) + { + keyTypeNames = opts.optArg("key"); + } + if(opts.isSet("value")) + { + valueTypeNames = opts.optArg("value"); } + caseSensitive = opts.isSet("case-sensitive"); - if(outputFile.empty() && (allDb && argc != 3 || !allDb && argc != 4)) + if(outputFile.empty() && (allDb && args.size() != 2 || !allDb && args.size() != 3)) { usage(argv[0]); return EXIT_FAILURE; } - if(argc > 1) + if(!args.empty()) { - dbEnvName = argv[1]; + dbEnvName = args[0]; } - if(argc > 2) + if(args.size() > 1) { if(allDb) { - dbEnvNameNew = argv[2]; + dbEnvNameNew = args[1]; } else { - dbName = argv[2]; + dbName = args[1]; } } - if(argc > 3) + if(args.size() > 2) { - dbEnvNameNew = argv[3]; + dbEnvNameNew = args[2]; } Slice::UnitPtr oldUnit = Slice::Unit::createUnit(true, true, ice, caseSensitive); |