VirtualBox

Ignore:
Timestamp:
Mar 13, 2020 11:47:05 AM (5 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
136434
Message:

added displaying help information for the cloud commands. The information is shown if there are not all needed parameters in the CLI or the one argument "help" was passed.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageCloud.cpp

    r83170 r83279  
    111111    {
    112112        { "--compartment-id", 'c', RTGETOPT_REQ_STRING },
    113         { "--state",          's', RTGETOPT_REQ_STRING }
     113        { "--state",          's', RTGETOPT_REQ_STRING },
     114        { "help",             1001, RTGETOPT_REQ_NOTHING },
     115        { "--help",           1002, RTGETOPT_REQ_NOTHING }
    114116    };
    115117    RTGETOPTSTATE GetState;
     
    117119    int vrc = RTGetOptInit(&GetState, a->argc, a->argv, s_aOptions, RT_ELEMENTS(s_aOptions), iFirst, 0);
    118120    AssertRCReturn(vrc, RTEXITCODE_FAILURE);
     121    if (a->argc == iFirst)
     122    {
     123        RTPrintf("Empty command parameter list, show help.\n");
     124        printHelp(g_pStdOut);
     125        return RTEXITCODE_SUCCESS;
     126    }
    119127
    120128    Utf8Str strCompartmentId;
     
    156164                break;
    157165            }
    158 
     166            case 1001:
     167            case 1002:
     168                printHelp(g_pStdOut);
     169                return RTEXITCODE_SUCCESS;
    159170            case VINF_GETOPT_NOT_OPTION:
    160171                return errorUnknownSubcommand(ValueUnion.psz);
     
    166177
    167178    HRESULT hrc = S_OK;
     179
     180    /* Delayed check. It allows us to print help information.*/
     181    hrc = checkAndSetCommonOptions(a, pCommonOpts);
     182    if (FAILED(hrc))
     183        return RTEXITCODE_FAILURE;
     184
    168185    ComPtr<IVirtualBox> pVirtualBox = a->virtualBox;
    169186
     
    266283    {
    267284        { "--compartment-id", 'c', RTGETOPT_REQ_STRING },
    268         { "--state",          's', RTGETOPT_REQ_STRING }
     285        { "--state",          's', RTGETOPT_REQ_STRING },
     286        { "help",             1001, RTGETOPT_REQ_NOTHING },
     287        { "--help",           1002, RTGETOPT_REQ_NOTHING }
    269288    };
    270289    RTGETOPTSTATE GetState;
     
    272291    int vrc = RTGetOptInit(&GetState, a->argc, a->argv, s_aOptions, RT_ELEMENTS(s_aOptions), iFirst, 0);
    273292    AssertRCReturn(vrc, RTEXITCODE_FAILURE);
     293    if (a->argc == iFirst)
     294    {
     295        RTPrintf("Empty command parameter list, show help.\n");
     296        printHelp(g_pStdOut);
     297        return RTEXITCODE_SUCCESS;
     298    }
    274299
    275300    Utf8Str strCompartmentId;
     
    305330                break;
    306331            }
    307 
     332            case 1001:
     333            case 1002:
     334                printHelp(g_pStdOut);
     335                return RTEXITCODE_SUCCESS;
    308336            case VINF_GETOPT_NOT_OPTION:
    309337                return errorUnknownSubcommand(ValueUnion.psz);
     
    316344
    317345    HRESULT hrc = S_OK;
     346
     347    /* Delayed check. It allows us to print help information.*/
     348    hrc = checkAndSetCommonOptions(a, pCommonOpts);
     349    if (FAILED(hrc))
     350        return RTEXITCODE_FAILURE;
     351
    318352    ComPtr<IVirtualBox> pVirtualBox = a->virtualBox;
    319353
     
    411445static RTEXITCODE handleCloudLists(HandlerArg *a, int iFirst, PCLOUDCOMMONOPT pCommonOpts)
    412446{
    413     if (a->argc < 1)
    414         return errorNoSubcommand();
     447    setCurrentCommand(HELP_CMD_CLOUDLIST);
     448    setCurrentSubcommand(HELP_SCOPE_CLOUDLIST);
     449    if (a->argc == iFirst)
     450    {
     451        RTPrintf("Empty command parameter list, show help.\n");
     452        printHelp(g_pStdOut);
     453        return RTEXITCODE_SUCCESS;
     454    }
    415455
    416456    static const RTGETOPTDEF s_aOptions[] =
     
    421461        { "subnets",             1003, RTGETOPT_REQ_NOTHING },
    422462        { "vcns",                1004, RTGETOPT_REQ_NOTHING },
    423         { "objects",             1005, RTGETOPT_REQ_NOTHING }
    424     };
    425 
    426     Bstr bstrProvider(pCommonOpts->provider.pszProviderName);
    427     Bstr bstrProfile(pCommonOpts->profile.pszProfileName);
    428 
    429     /* check for required options */
    430     if (bstrProvider.isEmpty())
    431         return errorSyntax(USAGE_S_NEWCMD, "Parameter --provider is required");
    432     if (bstrProfile.isEmpty())
    433         return errorSyntax(USAGE_S_NEWCMD, "Parameter --profile is required");
     463        { "objects",             1005, RTGETOPT_REQ_NOTHING },
     464        { "help",                1006, RTGETOPT_REQ_NOTHING },
     465        { "--help",              1007, RTGETOPT_REQ_NOTHING }
     466    };
     467
     468//  Bstr bstrProvider(pCommonOpts->provider.pszProviderName);
     469//  Bstr bstrProfile(pCommonOpts->profile.pszProfileName);
     470//
     471//  /* check for required options */
     472//  if (bstrProvider.isEmpty())
     473//      return errorSyntax(USAGE_S_NEWCMD, "Parameter --provider is required");
     474//  if (bstrProfile.isEmpty())
     475//      return errorSyntax(USAGE_S_NEWCMD, "Parameter --profile is required");
    434476
    435477    RTGETOPTSTATE GetState;
     
    444486        {
    445487            case 1000:
    446 //              setCurrentSubcommand(HELP_SCOPE_CLOUDIMAGE_LIST);
     488                setCurrentSubcommand(HELP_SCOPE_CLOUDLIST_IMAGES);
    447489                return listCloudImages(a, GetState.iNext, pCommonOpts);
    448490            case 1001:
    449 //              setCurrentSubcommand(HELP_SCOPE_CLOUDINSTANCE_LIST);
     491                setCurrentSubcommand(HELP_SCOPE_CLOUDLIST_INSTANCES);
    450492                return listCloudInstances(a, GetState.iNext, pCommonOpts);
     493            case 1006:
     494            case 1007:
     495                printHelp(g_pStdOut);
     496                return RTEXITCODE_SUCCESS;
    451497            case VINF_GETOPT_NOT_OPTION:
    452498                return errorUnknownSubcommand(ValueUnion.psz);
     
    463509{
    464510    HRESULT hrc = S_OK;
    465     hrc = checkAndSetCommonOptions(a, pCommonOpts);
    466     if (FAILED(hrc))
    467         return RTEXITCODE_FAILURE;
    468511
    469512    static const RTGETOPTDEF s_aOptions[] =
     
    481524        { "--launch",         'l', RTGETOPT_REQ_STRING },
    482525        { "--public-ssh-key", 'k', RTGETOPT_REQ_STRING },
     526        { "help",             1001, RTGETOPT_REQ_NOTHING },
     527        { "--help",           1002, RTGETOPT_REQ_NOTHING }
    483528    };
    484529    RTGETOPTSTATE GetState;
     
    486531    int vrc = RTGetOptInit(&GetState, a->argc, a->argv, s_aOptions, RT_ELEMENTS(s_aOptions), iFirst, 0);
    487532    AssertRCReturn(vrc, RTEXITCODE_FAILURE);
     533    if (a->argc == iFirst)
     534    {
     535        RTPrintf("Empty command parameter list, show help.\n");
     536        printHelp(g_pStdOut);
     537        return RTEXITCODE_SUCCESS;
     538    }
    488539
    489540    ComPtr<IAppliance> pAppliance;
     
    560611                                     Bstr(ValueUnion.psz).raw(), NULL);
    561612                break;
     613            case 1001:
     614            case 1002:
     615                printHelp(g_pStdOut);
     616                return RTEXITCODE_SUCCESS;
    562617            case VINF_GETOPT_NOT_OPTION:
    563618                return errorUnknownSubcommand(ValueUnion.psz);
     
    566621        }
    567622    }
     623
     624    /* Delayed check. It allows us to print help information.*/
     625    hrc = checkAndSetCommonOptions(a, pCommonOpts);
     626    if (FAILED(hrc))
     627        return RTEXITCODE_FAILURE;
    568628
    569629    if (strPublicSSHKey.isEmpty())
     
    640700    HRESULT hrc = S_OK;
    641701
    642     hrc = checkAndSetCommonOptions(a, pCommonOpts);
    643     if (FAILED(hrc))
    644         return RTEXITCODE_FAILURE;
    645 
    646702    static const RTGETOPTDEF s_aOptions[] =
    647703    {
    648         { "--id", 'i', RTGETOPT_REQ_STRING }
     704        { "--id",   'i', RTGETOPT_REQ_STRING },
     705        { "help",   1001, RTGETOPT_REQ_NOTHING },
     706        { "--help", 1002, RTGETOPT_REQ_NOTHING }
    649707    };
    650708    RTGETOPTSTATE GetState;
     
    652710    int vrc = RTGetOptInit(&GetState, a->argc, a->argv, s_aOptions, RT_ELEMENTS(s_aOptions), iFirst, 0);
    653711    AssertRCReturn(vrc, RTEXITCODE_FAILURE);
     712    if (a->argc == iFirst)
     713    {
     714        RTPrintf("Empty command parameter list, show help.\n");
     715        printHelp(g_pStdOut);
     716        return RTEXITCODE_SUCCESS;
     717    }
    654718
    655719    Utf8Str strInstanceId;
     
    671735                break;
    672736            }
    673 
     737            case 1001:
     738            case 1002:
     739                printHelp(g_pStdOut);
     740                return RTEXITCODE_SUCCESS;
    674741            case VINF_GETOPT_NOT_OPTION:
    675742                return errorUnknownSubcommand(ValueUnion.psz);
     
    680747    }
    681748
     749    /* Delayed check. It allows us to print help information.*/
     750    hrc = checkAndSetCommonOptions(a, pCommonOpts);
     751    if (FAILED(hrc))
     752        return RTEXITCODE_FAILURE;
     753
    682754    if (strInstanceId.isEmpty())
    683755        return errorArgument("Missing parameter: --id");
    684 
    685756
    686757    ComPtr<ICloudProfile> pCloudProfile = pCommonOpts->profile.pCloudProfile;
     
    779850{
    780851    HRESULT hrc = S_OK;
    781     hrc = checkAndSetCommonOptions(a, pCommonOpts);
    782     if (FAILED(hrc))
    783         return RTEXITCODE_FAILURE;
    784852
    785853    static const RTGETOPTDEF s_aOptions[] =
    786854    {
    787         { "--id", 'i', RTGETOPT_REQ_STRING }
     855        { "--id",   'i', RTGETOPT_REQ_STRING },
     856        { "help",   1001, RTGETOPT_REQ_NOTHING },
     857        { "--help", 1002, RTGETOPT_REQ_NOTHING }
    788858    };
    789859    RTGETOPTSTATE GetState;
     
    791861    int vrc = RTGetOptInit(&GetState, a->argc, a->argv, s_aOptions, RT_ELEMENTS(s_aOptions), iFirst, 0);
    792862    AssertRCReturn(vrc, RTEXITCODE_FAILURE);
     863    if (a->argc == iFirst)
     864    {
     865        RTPrintf("Empty command parameter list, show help.\n");
     866        printHelp(g_pStdOut);
     867        return RTEXITCODE_SUCCESS;
     868    }
    793869
    794870    Utf8Str strInstanceId;
     
    810886                break;
    811887            }
    812 
     888            case 1001:
     889            case 1002:
     890                printHelp(g_pStdOut);
     891                return RTEXITCODE_SUCCESS;
    813892            case VINF_GETOPT_NOT_OPTION:
    814893                return errorUnknownSubcommand(ValueUnion.psz);
     
    819898    }
    820899
     900    /* Delayed check. It allows us to print help information.*/
     901    hrc = checkAndSetCommonOptions(a, pCommonOpts);
     902    if (FAILED(hrc))
     903        return RTEXITCODE_FAILURE;
     904
    821905    if (strInstanceId.isEmpty())
    822906        return errorArgument("Missing parameter: --id");
    823 
    824907
    825908    ComPtr<ICloudProfile> pCloudProfile = pCommonOpts->profile.pCloudProfile;
     
    850933{
    851934    HRESULT hrc = S_OK;
    852     hrc = checkAndSetCommonOptions(a, pCommonOpts);
    853 
    854     if (FAILED(hrc))
    855         return RTEXITCODE_FAILURE;
    856935
    857936    static const RTGETOPTDEF s_aOptions[] =
    858937    {
    859         { "--id", 'i', RTGETOPT_REQ_STRING }
     938        { "--id",   'i', RTGETOPT_REQ_STRING },
     939        { "help",   1001, RTGETOPT_REQ_NOTHING },
     940        { "--help", 1002, RTGETOPT_REQ_NOTHING }
    860941    };
    861942    RTGETOPTSTATE GetState;
     
    863944    int vrc = RTGetOptInit(&GetState, a->argc, a->argv, s_aOptions, RT_ELEMENTS(s_aOptions), iFirst, 0);
    864945    AssertRCReturn(vrc, RTEXITCODE_FAILURE);
     946    if (a->argc == iFirst)
     947    {
     948        RTPrintf("Empty command parameter list, show help.\n");
     949        printHelp(g_pStdOut);
     950        return RTEXITCODE_SUCCESS;
     951    }
    865952
    866953    Utf8Str strInstanceId;
     
    882969                break;
    883970            }
    884 
     971            case 1001:
     972            case 1002:
     973                printHelp(g_pStdOut);
     974                return RTEXITCODE_SUCCESS;
    885975            case VINF_GETOPT_NOT_OPTION:
    886976                return errorUnknownSubcommand(ValueUnion.psz);
     
    891981    }
    892982
     983    /* Delayed check. It allows us to print help information.*/
     984    hrc = checkAndSetCommonOptions(a, pCommonOpts);
     985    if (FAILED(hrc))
     986        return RTEXITCODE_FAILURE;
     987
    893988    if (strInstanceId.isEmpty())
    894989        return errorArgument("Missing parameter: --id");
    895 
    896990
    897991    ComPtr<ICloudProfile> pCloudProfile = pCommonOpts->profile.pCloudProfile;
     
    9231017    HRESULT hrc = S_OK;
    9241018
    925     hrc = checkAndSetCommonOptions(a, pCommonOpts);
    926     if (FAILED(hrc))
    927         return RTEXITCODE_FAILURE;
    928 
    9291019    static const RTGETOPTDEF s_aOptions[] =
    9301020    {
    931         { "--id", 'i', RTGETOPT_REQ_STRING }
     1021        { "--id",   'i', RTGETOPT_REQ_STRING },
     1022        { "help",   1001, RTGETOPT_REQ_NOTHING },
     1023        { "--help", 1002, RTGETOPT_REQ_NOTHING }
    9321024    };
    9331025    RTGETOPTSTATE GetState;
     
    9351027    int vrc = RTGetOptInit(&GetState, a->argc, a->argv, s_aOptions, RT_ELEMENTS(s_aOptions), iFirst, 0);
    9361028    AssertRCReturn(vrc, RTEXITCODE_FAILURE);
     1029    if (a->argc == iFirst)
     1030    {
     1031        RTPrintf("Empty command parameter list, show help.\n");
     1032        printHelp(g_pStdOut);
     1033        return RTEXITCODE_SUCCESS;
     1034    }
    9371035
    9381036    Utf8Str strInstanceId;
     
    9541052                break;
    9551053            }
    956 
     1054            case 1001:
     1055            case 1002:
     1056                printHelp(g_pStdOut);
     1057                return RTEXITCODE_SUCCESS;
    9571058            case VINF_GETOPT_NOT_OPTION:
    9581059                return errorUnknownSubcommand(ValueUnion.psz);
     
    9621063        }
    9631064    }
     1065
     1066    /* Delayed check. It allows us to print help information.*/
     1067    hrc = checkAndSetCommonOptions(a, pCommonOpts);
     1068    if (FAILED(hrc))
     1069        return RTEXITCODE_FAILURE;
    9641070
    9651071    if (strInstanceId.isEmpty())
     
    9931099static RTEXITCODE handleCloudInstance(HandlerArg *a, int iFirst, PCLOUDCOMMONOPT pCommonOpts)
    9941100{
    995     if (a->argc < 1)
    996         return errorNoSubcommand();
     1101    setCurrentCommand(HELP_CMD_CLOUDINSTANCE);
     1102    setCurrentSubcommand(HELP_SCOPE_CLOUDINSTANCE);
     1103    if (a->argc == iFirst)
     1104    {
     1105        RTPrintf("Empty command parameter list, show help.\n");
     1106        printHelp(g_pStdOut);
     1107        return RTEXITCODE_SUCCESS;
     1108    }
    9971109
    9981110    static const RTGETOPTDEF s_aOptions[] =
     
    10031115        { "info",           1003, RTGETOPT_REQ_NOTHING },
    10041116        { "update",         1004, RTGETOPT_REQ_NOTHING },
    1005         { "terminate",      1005, RTGETOPT_REQ_NOTHING }
     1117        { "terminate",      1005, RTGETOPT_REQ_NOTHING },
     1118        { "help",           1006, RTGETOPT_REQ_NOTHING },
     1119        { "--help",         1007, RTGETOPT_REQ_NOTHING }
    10061120    };
    10071121
     
    10181132            /* Sub-commands: */
    10191133            case 1000:
    1020 //              setCurrentSubcommand(HELP_SCOPE_CLOUDINSTANCE_CREATE);
     1134                setCurrentSubcommand(HELP_SCOPE_CLOUDINSTANCE_CREATE);
    10211135                return createCloudInstance(a, GetState.iNext, pCommonOpts);
    10221136            case 1001:
     
    10351149                setCurrentSubcommand(HELP_SCOPE_CLOUDINSTANCE_TERMINATE);
    10361150                return terminateCloudInstance(a, GetState.iNext, pCommonOpts);
     1151            case 1006:
     1152            case 1007:
     1153                printHelp(g_pStdOut);
     1154                return RTEXITCODE_SUCCESS;
    10371155            case VINF_GETOPT_NOT_OPTION:
    10381156                return errorUnknownSubcommand(ValueUnion.psz);
     
    10501168{
    10511169    HRESULT hrc = S_OK;
    1052     hrc = checkAndSetCommonOptions(a, pCommonOpts);
    1053     if (FAILED(hrc))
    1054         return RTEXITCODE_FAILURE;
    10551170
    10561171    static const RTGETOPTDEF s_aOptions[] =
     
    10621177        { "--display-name",   'd', RTGETOPT_REQ_STRING },
    10631178        { "--launch-mode",    'm', RTGETOPT_REQ_STRING },
     1179        { "help",             1001, RTGETOPT_REQ_NOTHING },
     1180        { "--help",           1002, RTGETOPT_REQ_NOTHING }
    10641181    };
    10651182    RTGETOPTSTATE GetState;
     
    10671184    int vrc = RTGetOptInit(&GetState, a->argc, a->argv, s_aOptions, RT_ELEMENTS(s_aOptions), iFirst, 0);
    10681185    AssertRCReturn(vrc, RTEXITCODE_FAILURE);
     1186    if (a->argc == iFirst)
     1187    {
     1188        RTPrintf("Empty command parameter list, show help.\n");
     1189        printHelp(g_pStdOut);
     1190        return RTEXITCODE_SUCCESS;
     1191    }
    10691192
    10701193    Utf8Str strCompartmentId;
     
    11041227                Bstr(Utf8Str("launch-mode=").append(ValueUnion.psz)).detachTo(parameters.appendedRaw());
    11051228                break;
     1229            case 1001:
     1230            case 1002:
     1231                printHelp(g_pStdOut);
     1232                return RTEXITCODE_SUCCESS;
    11061233            case VINF_GETOPT_NOT_OPTION:
    11071234                return errorUnknownSubcommand(ValueUnion.psz);
     
    11101237        }
    11111238    }
     1239
     1240    /* Delayed check. It allows us to print help information.*/
     1241    hrc = checkAndSetCommonOptions(a, pCommonOpts);
     1242    if (FAILED(hrc))
     1243        return RTEXITCODE_FAILURE;
    11121244
    11131245    if (strInstanceId.isNotEmpty() && strObjectName.isNotEmpty())
     
    11441276{
    11451277    HRESULT hrc = S_OK;
    1146     hrc = checkAndSetCommonOptions(a, pCommonOpts);
    1147     if (FAILED(hrc))
    1148         return RTEXITCODE_FAILURE;
    11491278
    11501279    static const RTGETOPTDEF s_aOptions[] =
     
    11551284        { "--display-name",   'd', RTGETOPT_REQ_STRING },
    11561285        { "--launch-mode",    'm', RTGETOPT_REQ_STRING },
     1286        { "help",             1001, RTGETOPT_REQ_NOTHING },
     1287        { "--help",           1002, RTGETOPT_REQ_NOTHING }
    11571288    };
    11581289    RTGETOPTSTATE GetState;
     
    11601291    int vrc = RTGetOptInit(&GetState, a->argc, a->argv, s_aOptions, RT_ELEMENTS(s_aOptions), iFirst, 0);
    11611292    AssertRCReturn(vrc, RTEXITCODE_FAILURE);
     1293    if (a->argc == iFirst)
     1294    {
     1295        RTPrintf("Empty command parameter list, show help.\n");
     1296        printHelp(g_pStdOut);
     1297        return RTEXITCODE_SUCCESS;
     1298    }
    11621299
    11631300    Utf8Str strImageId;   /* XXX: this is vbox "image", i.e. medium */
     
    12331370            }
    12341371
     1372            case 1001:
     1373            case 1002:
     1374                printHelp(g_pStdOut);
     1375                return RTEXITCODE_SUCCESS;
     1376
    12351377            case VINF_GETOPT_NOT_OPTION:
    12361378                return errorUnknownSubcommand(ValueUnion.psz);
     
    12401382        }
    12411383    }
     1384
     1385    /* Delayed check. It allows us to print help information.*/
     1386    hrc = checkAndSetCommonOptions(a, pCommonOpts);
     1387    if (FAILED(hrc))
     1388        return RTEXITCODE_FAILURE;
    12421389
    12431390    if (strImageId.isNotEmpty())
     
    13271474{
    13281475    HRESULT hrc = S_OK;
    1329     hrc = checkAndSetCommonOptions(a, pCommonOpts);
    1330     if (FAILED(hrc))
    1331         return RTEXITCODE_FAILURE;
    13321476
    13331477    static const RTGETOPTDEF s_aOptions[] =
     
    13351479        { "--id",             'i', RTGETOPT_REQ_STRING },
    13361480        { "--bucket-name",    'b', RTGETOPT_REQ_STRING },
    1337         { "--object-name",    'o', RTGETOPT_REQ_STRING }
     1481        { "--object-name",    'o', RTGETOPT_REQ_STRING },
     1482        { "help",             1001, RTGETOPT_REQ_NOTHING },
     1483        { "--help",           1002, RTGETOPT_REQ_NOTHING }
    13381484    };
    13391485    RTGETOPTSTATE GetState;
     
    13411487    int vrc = RTGetOptInit(&GetState, a->argc, a->argv, s_aOptions, RT_ELEMENTS(s_aOptions), iFirst, 0);
    13421488    AssertRCReturn(vrc, RTEXITCODE_FAILURE);
     1489    if (a->argc == iFirst)
     1490    {
     1491        RTPrintf("Empty command parameter list, show help.\n");
     1492        printHelp(g_pStdOut);
     1493        return RTEXITCODE_SUCCESS;
     1494    }
    13431495
    13441496    Utf8Str strImageId;
     
    13651517                Bstr(Utf8Str("object-name=").append(ValueUnion.psz)).detachTo(parameters.appendedRaw());
    13661518                break;
     1519            case 1001:
     1520            case 1002:
     1521                printHelp(g_pStdOut);
     1522                return RTEXITCODE_SUCCESS;
    13671523            case VINF_GETOPT_NOT_OPTION:
    13681524                return errorUnknownSubcommand(ValueUnion.psz);
     
    13721528    }
    13731529
     1530    /* Delayed check. It allows us to print help information.*/
     1531    hrc = checkAndSetCommonOptions(a, pCommonOpts);
     1532    if (FAILED(hrc))
     1533        return RTEXITCODE_FAILURE;
     1534
    13741535    ComPtr<ICloudProfile> pCloudProfile = pCommonOpts->profile.pCloudProfile;
    13751536
     
    14011562{
    14021563    HRESULT hrc = S_OK;
    1403     hrc = checkAndSetCommonOptions(a, pCommonOpts);
    1404     if (FAILED(hrc))
    1405         return RTEXITCODE_FAILURE;
    14061564
    14071565    static const RTGETOPTDEF s_aOptions[] =
    14081566    {
    1409         { "--id", 'i', RTGETOPT_REQ_STRING }
     1567        { "--id", 'i', RTGETOPT_REQ_STRING },
     1568        { "help",   1001, RTGETOPT_REQ_NOTHING },
     1569        { "--help", 1002, RTGETOPT_REQ_NOTHING }
    14101570    };
    14111571    RTGETOPTSTATE GetState;
     
    14131573    int vrc = RTGetOptInit(&GetState, a->argc, a->argv, s_aOptions, RT_ELEMENTS(s_aOptions), iFirst, 0);
    14141574    AssertRCReturn(vrc, RTEXITCODE_FAILURE);
     1575    if (a->argc == iFirst)
     1576    {
     1577        RTPrintf("Empty command parameter list, show help.\n");
     1578        printHelp(g_pStdOut);
     1579        return RTEXITCODE_SUCCESS;
     1580    }
    14151581
    14161582    Utf8Str strImageId;
     
    14241590                strImageId = ValueUnion.psz;
    14251591                break;
     1592            case 1001:
     1593            case 1002:
     1594                printHelp(g_pStdOut);
     1595                return RTEXITCODE_SUCCESS;
    14261596            case VINF_GETOPT_NOT_OPTION:
    14271597                return errorUnknownSubcommand(ValueUnion.psz);
     
    14301600        }
    14311601    }
     1602
     1603    /* Delayed check. It allows us to print help information.*/
     1604    hrc = checkAndSetCommonOptions(a, pCommonOpts);
     1605    if (FAILED(hrc))
     1606        return RTEXITCODE_FAILURE;
    14321607
    14331608    ComPtr<ICloudProfile> pCloudProfile = pCommonOpts->profile.pCloudProfile;
     
    14791654{
    14801655    HRESULT hrc = S_OK;
    1481     hrc = checkAndSetCommonOptions(a, pCommonOpts);
    1482     if (FAILED(hrc))
    1483         return RTEXITCODE_FAILURE;
    14841656
    14851657    static const RTGETOPTDEF s_aOptions[] =
    14861658    {
    1487         { "--id", 'i', RTGETOPT_REQ_STRING }
     1659        { "--id", 'i', RTGETOPT_REQ_STRING },
     1660        { "help",   1001, RTGETOPT_REQ_NOTHING },
     1661        { "--help", 1002, RTGETOPT_REQ_NOTHING }
    14881662    };
    14891663    RTGETOPTSTATE GetState;
     
    14911665    int vrc = RTGetOptInit(&GetState, a->argc, a->argv, s_aOptions, RT_ELEMENTS(s_aOptions), iFirst, 0);
    14921666    AssertRCReturn(vrc, RTEXITCODE_FAILURE);
     1667    if (a->argc == iFirst)
     1668    {
     1669        RTPrintf("Empty command parameter list, show help.\n");
     1670        printHelp(g_pStdOut);
     1671        return RTEXITCODE_SUCCESS;
     1672    }
    14931673
    14941674    Utf8Str strImageId;
     
    15111691            }
    15121692
     1693            case 1001:
     1694            case 1002:
     1695                printHelp(g_pStdOut);
     1696                return RTEXITCODE_SUCCESS;
    15131697            case VINF_GETOPT_NOT_OPTION:
    15141698                return errorUnknownSubcommand(ValueUnion.psz);
     
    15181702        }
    15191703    }
     1704
     1705    /* Delayed check. It allows us to print help information.*/
     1706    hrc = checkAndSetCommonOptions(a, pCommonOpts);
     1707    if (FAILED(hrc))
     1708        return RTEXITCODE_FAILURE;
    15201709
    15211710    if (strImageId.isEmpty())
     
    15461735static RTEXITCODE handleCloudImage(HandlerArg *a, int iFirst, PCLOUDCOMMONOPT pCommonOpts)
    15471736{
    1548     if (a->argc < 1)
    1549         return errorNoSubcommand();
     1737    setCurrentCommand(HELP_CMD_CLOUDIMAGE);
     1738    setCurrentSubcommand(HELP_SCOPE_CLOUDIMAGE);
     1739    if (a->argc == iFirst)
     1740    {
     1741        RTPrintf("Empty command parameter list, show help.\n");
     1742        printHelp(g_pStdOut);
     1743        return RTEXITCODE_SUCCESS;
     1744    }
    15501745
    15511746    static const RTGETOPTDEF s_aOptions[] =
     
    15561751        { "info",           1003, RTGETOPT_REQ_NOTHING },
    15571752        { "update",         1004, RTGETOPT_REQ_NOTHING },
    1558         { "delete",         1005, RTGETOPT_REQ_NOTHING }
     1753        { "delete",         1005, RTGETOPT_REQ_NOTHING },
     1754        { "help",           1006, RTGETOPT_REQ_NOTHING },
     1755        { "--help",         1007, RTGETOPT_REQ_NOTHING }
    15591756    };
    15601757
     
    15711768            /* Sub-commands: */
    15721769            case 1000:
    1573 //              setCurrentSubcommand(HELP_SCOPE_CLOUDIMAGE_CREATE);
     1770                setCurrentSubcommand(HELP_SCOPE_CLOUDIMAGE_CREATE);
    15741771                return createCloudImage(a, GetState.iNext, pCommonOpts);
    15751772            case 1001:
    1576 //              setCurrentSubcommand(HELP_SCOPE_CLOUDIMAGE_EXPORT);
     1773                setCurrentSubcommand(HELP_SCOPE_CLOUDIMAGE_EXPORT);
    15771774                return exportCloudImage(a, GetState.iNext, pCommonOpts);
    15781775            case 1002:
    1579 //              setCurrentSubcommand(HELP_SCOPE_CLOUDIMAGE_IMPORT);
     1776                setCurrentSubcommand(HELP_SCOPE_CLOUDIMAGE_IMPORT);
    15801777                return importCloudImage(a, GetState.iNext, pCommonOpts);
    15811778            case 1003:
    1582 //              setCurrentSubcommand(HELP_SCOPE_CLOUDIMAGE_INFO);
     1779                setCurrentSubcommand(HELP_SCOPE_CLOUDIMAGE_INFO);
    15831780                return showCloudImageInfo(a, GetState.iNext, pCommonOpts);
    15841781            case 1004:
     
    15861783                return updateCloudImage(a, GetState.iNext, pCommonOpts);
    15871784            case 1005:
    1588 //              setCurrentSubcommand(HELP_SCOPE_CLOUDIMAGE_DELETE);
     1785                setCurrentSubcommand(HELP_SCOPE_CLOUDIMAGE_DELETE);
    15891786                return deleteCloudImage(a, GetState.iNext, pCommonOpts);
     1787            case 1006:
     1788            case 1007:
     1789                printHelp(g_pStdOut);
     1790                return RTEXITCODE_SUCCESS;
    15901791            case VINF_GETOPT_NOT_OPTION:
    15911792                return errorUnknownSubcommand(ValueUnion.psz);
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette