Skip to content

Commit

Permalink
Merge branch 'master' into candid-assist
Browse files Browse the repository at this point in the history
  • Loading branch information
chenyan-dfinity authored Feb 16, 2024
2 parents 74e5d17 + e5c9211 commit c1823c8
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 31 deletions.
10 changes: 5 additions & 5 deletions docs/cli-reference/dfx-canister.md
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ You can use the following optional flags with the `dfx canister call` command.
| Flag | Description |
|------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `--async` | Specifies not to wait for the result of the call to be returned by polling the replica. Instead return a response ID. |
| `--query` | Sends a query request instead of an update request. For information about the difference between query and update calls, see [Canisters include both program and state](../../concepts/canisters-code.md#canister-state). |
| `--query` | Sends a query request instead of an update request. For information about the difference between query and update calls, see [Canisters include both program and state](/docs/current/concepts/canisters-code#canister-state). |
| `--update` | Sends an update request to a canister. This is the default if the method is not a query method. |

### Options
Expand All @@ -137,7 +137,7 @@ You can specify the following arguments for the `dfx canister call` command.
|-----------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `canister_name` | Specifies the name of the canister to call. The canister name is a required argument and should match the name you have configured for a project in the `canisters` section of the `dfx.json` configuration file. |
| `method_name` | Specifies the method name to call on the canister. The canister method is a required argument. |
| `argument` | Specifies the argument to pass to the method. Depending on your program logic, the argument can be a required or optional argument. You can specify a data format type using the `--type` option if you pass an argument to the canister. By default, you can specify arguments using the [Candid](../../developer-docs/backend/candid/index.md) (`idl`) syntax for data values. For information about using Candid and its supported types, see [Interact with a service in a terminal](../../developer-docs/backend/candid/candid-howto.md#idl-syntax) and [Supported types](../candid-ref.md). You can use `raw` as the argument type if you want to pass raw bytes to a canister. |
| `argument` | Specifies the argument to pass to the method. Depending on your program logic, the argument can be a required or optional argument. You can specify a data format type using the `--type` option if you pass an argument to the canister. By default, you can specify arguments using the [Candid](/docs/current/developer-docs/backend/candid/index) (`idl`) syntax for data values. For information about using Candid and its supported types, see [Interact with a service in a terminal](/docs/current/developer-docs/backend/candid/candid-howto#idl-syntax) and [Supported types](/docs/current/references/candid-ref). You can use `raw` as the argument type if you want to pass raw bytes to a canister. |

### Examples

Expand Down Expand Up @@ -452,10 +452,10 @@ You can use the following options with the `dfx canister install` command.
| Option | Description |
|---------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `--argument <argument>` | Specifies an argument to pass to the canister during installation. |
| `--argument-type <argument-type>` | Specifies the data format for the argument when you install using the `--argument` option. The valid values are `idl` and `raw`. By default, you can specify arguments using the [Candid](../../developer-docs/backend/candid/index.md) (`idl`) syntax for data values. For information about using Candid and its supported types, see [Interact with a service in a terminal](../../developer-docs/backend/candid/candid-howto.md#idl-syntax) and [Supported types](../candid-ref.md). You can use `raw` as the argument type if you want to pass raw bytes to a canister. |
| `--argument-type <argument-type>` | Specifies the data format for the argument when you install using the `--argument` option. The valid values are `idl` and `raw`. By default, you can specify arguments using the [Candid](/docs/current/developer-docs/backend/candid/index) (`idl`) syntax for data values. For information about using Candid and its supported types, see [Interact with a service in a terminal](/docs/current/developer-docs/backend/candid/candid-howto#idl-syntax) and [Supported types](/docs/current/references/candid-ref). You can use `raw` as the argument type if you want to pass raw bytes to a canister. |
| `-c`, `--compute-allocation <compute-allocation>` | Defines a compute allocation—essentially the equivalent of setting a CPU allocation—for canister execution. You can set this value as a percentage in the range of 0 to 100. |
| `--memory-allocation <memory-allocation>` | Specifies how much memory the canister is allowed to use in total. You can set this value in the range of 0 to 8MB. |
| `-m`, `--mode <mode>` | Specifies whether you want to `install`, `reinstall`, or `upgrade` canisters. Defaults to `install`. For more information about installation modes and canister management, see [Managing canisters](../../developer-docs/setup/manage-canisters.md). |
| `-m`, `--mode <mode>` | Specifies whether you want to `install`, `reinstall`, or `upgrade` canisters. Defaults to `install`. For more information about installation modes and canister management, see [Managing canisters](/docs/current/developer-docs/setup/manage-canisters). |
| `--wasm <file.wasm>` | Specifies a particular WASM file to install, bypassing the dfx.json project settings. |

### Arguments
Expand Down Expand Up @@ -691,7 +691,7 @@ You can specify the following arguments for the `dfx canister sign` command.
|-----------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `canister_name` | Specifies the name of the canister to call. The canister name is a required argument and should match the name you have configured for a project in the `canisters` section of the `dfx.json` configuration file. |
| `method_name` | Specifies the method name to call on the canister. The canister method is a required argument. |
| `argument` | Specifies the argument to pass to the method. Depending on your program logic, the argument can be a required or optional argument. You can specify a data format type using the `--type` option if you pass an argument to the canister. By default, you can specify arguments using the [Candid](../candid-ref.md) (`idl`) syntax for data values. For information about using Candid and its supported types, see [Interact with a service in a terminal](../../developer-docs/backend/candid/candid-howto.md#idl-syntax) and [Supported types](../candid-ref#supported-types). You can use `raw` as the argument type if you want to pass raw bytes. |
| `argument` | Specifies the argument to pass to the method. Depending on your program logic, the argument can be a required or optional argument. You can specify a data format type using the `--type` option if you pass an argument to the canister. By default, you can specify arguments using the [Candid](/docs/current/references/candid-ref) (`idl`) syntax for data values. For information about using Candid and its supported types, see [Interact with a service in a terminal](/docs/current/developer-docs/backend/candid/candid-howto#idl-syntax) and [Supported types](/docs/current/candid-ref#supported-types). You can use `raw` as the argument type if you want to pass raw bytes. |

### Examples

Expand Down
7 changes: 4 additions & 3 deletions public/manifest.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"tags": {
"latest": "0.16.1"
"latest": "0.17.0"
},
"versions": [
"0.5.0",
Expand Down Expand Up @@ -63,6 +63,7 @@
"0.15.2",
"0.15.3",
"0.16.0",
"0.16.1"
"0.16.1",
"0.17.0"
]
}
}
49 changes: 26 additions & 23 deletions src/dfx/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
use crate::config::{dfx_version, dfx_version_str};
use crate::lib::diagnosis::{diagnose, Diagnosis, NULL_DIAGNOSIS};
use crate::lib::environment::{Environment, EnvironmentImpl};
use crate::lib::error::DfxResult;
use crate::lib::logger::{create_root_logger, LoggingMode};
use crate::lib::warning::{is_warning_disabled, DfxWarning::VersionCheck};
use anyhow::Error;
Expand Down Expand Up @@ -160,31 +161,33 @@ fn print_error_and_diagnosis(err: Error, error_diagnosis: Diagnosis) {
}
}

fn main() {
fn get_args_altered_for_extension_run() -> DfxResult<Vec<OsString>> {
let mut args = std::env::args_os().collect::<Vec<OsString>>();
let mut error_diagnosis: Diagnosis = NULL_DIAGNOSIS;
let em = ExtensionManager::new(dfx_version())?;

ExtensionManager::new(dfx_version())
.and_then(|em| {
let installed_extensions = em.installed_extensions_as_clap_commands()?;
if !installed_extensions.is_empty() {
let mut app = CliOpts::command_for_update().subcommands(&installed_extensions);
sort_clap_commands(&mut app);
// here clap will display the help message if no subcommand was provided...
let app = app.get_matches();
// ...therefore we can safely unwrap here because we know a subcommand was provided
let subcmd = app.subcommand().unwrap().0;
if em.is_extension_installed(subcmd) {
let idx = args.iter().position(|arg| arg == subcmd).unwrap();
args.splice(idx..idx, ["extension", "run"].iter().map(OsString::from));
}
}
Ok(())
})
.unwrap_or_else(|err| {
print_error_and_diagnosis(err.into(), error_diagnosis.clone());
std::process::exit(255);
});
let installed_extensions = em.installed_extensions_as_clap_commands()?;
if !installed_extensions.is_empty() {
let mut app = CliOpts::command_for_update().subcommands(&installed_extensions);
sort_clap_commands(&mut app);
// here clap will display the help message if no subcommand was provided...
let app = app.get_matches();
// ...therefore we can safely unwrap here because we know a subcommand was provided
let subcmd = app.subcommand().unwrap().0;
if em.is_extension_installed(subcmd) {
let idx = args.iter().position(|arg| arg == subcmd).unwrap();
args.splice(idx..idx, ["extension", "run"].iter().map(OsString::from));
}
}
Ok(args)
}

fn main() {
let args = get_args_altered_for_extension_run().unwrap_or_else(|err| {
print_error_and_diagnosis(err, NULL_DIAGNOSIS);
std::process::exit(255);
});

let mut error_diagnosis: Diagnosis = NULL_DIAGNOSIS;

let cli_opts = CliOpts::parse_from(args);
let (verbose_level, log) = setup_logging(&cli_opts);
Expand Down

0 comments on commit c1823c8

Please sign in to comment.