From: SourceForge.net <no...@so...> - 2005-03-13 03:59:31
|
Feature Requests item #1162286, was opened at 2005-03-12 22:59 Message generated for change (Tracker Item Submitted) made by Item Submitter You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=360894&aid=1162286&group_id=10894 Category: 38. Package Manager Group: None Status: Open Resolution: None Priority: 5 Submitted By: Hemang Lavana (hemanglavana) Assigned to: Don Porter (dgp) Summary: RFE: invoke "package forget <pkg>" on errors Initial Comment: Hi, The documentation for "package" command recommends that "package provide <pkg> <ver>" should be at the bottom of the library. However, most users are not aware of the problem that can occur if the "package provide" cmd is at the top of the library. This is illustrated in the following example: hlavana-u5:138> cat foo.tcl # foo.tcl package provide foo 0.9.1 proc foo args {puts "PRINT: foo"} set a ;# syntax error: var a is not defined hlavana-u5:139> hlavana-u5:139> cat pkgIndex.tcl # pkgIndex.tcl package ifneeded foo 0.9.1 [list source [file join $dir foo.tcl]] hlavana-u5:140> hlavana-u5:140> cat run_foo.tcl # run_foo.tcl catch {package require foo} out1 puts "First time=$out1" catch {package require foo} out2 puts "Second time=$out2" hlavana-u5:141> hlavana-u5:141> tclsh run_foo.tcl First time=can't read "a": no such variable Second time=0.9.1 hlavana-u5:142> This example shows that a script might end up thinking that the package foo has been loaded successfully even though there were errors in loading it. Moreover, most users like to see the "package provide .." command appear at the top of the library even after I have explained this issue to them. Note that many of the packages in tcllib module have the "package provide" command at the top of the script. To overcome these problems, I would like to request an enhancement: whenever "package require ..." fails to load correctly, it should internally invoke "package forget <pkg>". This specific solution does have one side-effect though: consider that package foo, version 0.9 has been successfully loaded and the script is trying to load package foo, version 1.1. If foo1.1 is not found, then blindly calling "package forget foo" will unload(forget) foo0.9 as well which is not correct. I hope this issue can be resolved in the tcl-core instead of asking users to move "package provide" command to the bottom of the library. Hemang. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=360894&aid=1162286&group_id=10894 |