diff options
author | Steve Bennett <steveb@workware.net.au> | 2024-11-05 08:10:07 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2024-11-05 08:17:56 +1000 |
commit | 50e280a911611a642121fe08f88c79be3fc5991e (patch) | |
tree | ad0fd61acaa26b3a95c4fb6343035ffb20eb6cbe | |
parent | 3a2cfdf696daa0d92c0f2e8d8fc1ff337ba99c62 (diff) | |
download | jimtcl-50e280a911611a642121fe08f88c79be3fc5991e.zip jimtcl-50e280a911611a642121fe08f88c79be3fc5991e.tar.gz jimtcl-50e280a911611a642121fe08f88c79be3fc5991e.tar.bz2 |
add support for 'package forget'
Sometimes useful if replacing a package that has already been loaded
Signed-off-by: Steve Bennett <steveb@workware.net.au>
-rw-r--r-- | jim-package.c | 18 | ||||
-rw-r--r-- | jim_tcl.txt | 7 | ||||
-rw-r--r-- | tests/forget-test.tcl | 3 | ||||
-rw-r--r-- | tests/package.test | 12 |
4 files changed, 40 insertions, 0 deletions
diff --git a/jim-package.c b/jim-package.c index 69af074..18b64fe 100644 --- a/jim-package.c +++ b/jim-package.c @@ -148,6 +148,16 @@ int Jim_PackageRequire(Jim_Interp *interp, const char *name, int flags) return JIM_OK; } +static int package_cmd_forget(Jim_Interp *interp, int argc, Jim_Obj *const *argv) +{ + int i; + + for (i = 0; i < argc; i++) { + Jim_DeleteHashEntry(&interp->packages, Jim_String(argv[i])); + } + return JIM_OK; +} + /* *---------------------------------------------------------------------- * @@ -216,6 +226,14 @@ static int package_cmd_names(Jim_Interp *interp, int argc, Jim_Obj *const *argv) static const jim_subcmd_type package_command_table[] = { { + "forget", + "package ...", + package_cmd_forget, + 1, + -1, + /* Description: Forget that the given packages were loaded */ + }, + { "provide", "name ?version?", package_cmd_provide, diff --git a/jim_tcl.txt b/jim_tcl.txt index 5ea980a..7b321ef 100644 --- a/jim_tcl.txt +++ b/jim_tcl.txt @@ -55,6 +55,7 @@ RECENT CHANGES Changes since 0.83 ~~~~~~~~~~~~~~~~~~ 1. `aio` - support for configurable read and write buffering +2. Add support for `package forget` Changes between 0.82 and 0.83 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -3661,6 +3662,12 @@ See also `socket`, `pid`, `exec` package ~~~~~~~ ++*package forget* '?name ...?'+ + +Removes the knowledge that the given packages were loaded. This allows new, replacement +packages to be loaded. Note that it does not remove any effects of the previous packages +being loaded. + +*package provide* 'name ?version?'+ Indicates that the current script provides the package named +'name'+. diff --git a/tests/forget-test.tcl b/tests/forget-test.tcl new file mode 100644 index 0000000..8d4289b --- /dev/null +++ b/tests/forget-test.tcl @@ -0,0 +1,3 @@ +# This is a dummy package used for testing package forget + +set forgotten 1 diff --git a/tests/package.test b/tests/package.test index b8afa18..1484bd6 100644 --- a/tests/package.test +++ b/tests/package.test @@ -20,5 +20,17 @@ test package-1.3 {package names} -body { expr {"stdlib" in [package names]} } -result 1 +test package-2.1 {package forget} -body { + # First pretend the package was loaded + package provide forget-test + # Now it won't load anything + package require forget-test + # Now forget it and another unloaded test + package forget forget-test missing + # And load the local package + package require forget-test + info exists forgotten +} -result 1 + testreport |