-
Notifications
You must be signed in to change notification settings - Fork 22
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add options to debug package manager #931
Conversation
@@ -188,6 +194,7 @@ end | |||
""" | |||
install(spec::String, version::String = ""; | |||
interactive::Bool = true, quiet::Bool = false, | |||
debug::Bool = false, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Of course this should also be documented; I'll do that once we settled on what final form this should have.
oldlevel = Wrappers.InfoLevel(Globals.InfoPackageManager) | ||
Wrappers.SetInfoLevel(Globals.InfoPackageManager, 0) | ||
Wrappers.SetInfoLevel(Globals.InfoPackageManager, quiet ? 0 : 3) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wonder if it might not be better to separate debug
and this "verbose" mode: leaving around partial packages could be a stumbling block for non-experts. Yet we may end up asking these very people to use debug
if they report issues installing packages. Of course we can ask them to GAP.Packages.remove("blah")
afterwards, but still...
So one idea would be to also add verbose::Bool = false
as another kwarg. Of course then one can wonder what happens if both quiet
and verbose
are set (an error?). Seeing how quiet
is off by default, perhaps a better alternative would be to add a "verbosity level". So:
verbose::Int = 0
is a new kwarg and directly corresponds to theInfoLevel
- alternative names:
verbosity
,verbosity_level
,infolevel
,info_level
, ... ? - default value is
0
to match the current default ofquiet=true
- alternative names:
- we either drop
quiet
; or keep it as "deprecated" ("please instead use ...")- if set to
true
that setsverbose
to 0, if set tofalse
it sets it to whatever is the default value forInfoPackageManager
(or whatever value we prefer) - implementation: `function foo(quiet::Bool = true, verbose::Int = (quiet ? 0 : 2))
- if set to
- thus if both are given,
verbose
wins (we could of course also usenothing
to detect the case and report an error, but I feel this is overthinking it... on the long run I'd just removequiet
) - we remove the option of "not changing the infolevel (it is redundant if the user has full control over the info level anyway)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My viewpoint was that PackageManager's default info level is reasonable (otherwise this level should be changed there) but that there are situations where we want to suppress all info messages, for example if a package installation is triggered by the request to load a package. This is why quiet
arose instead of access to the various info levels (which are documented in PackageManager).
There is of course no problem with the viewpoint that one should be able to set the info level in each single function call. I do not see why this is helpful here, but it is surely a "conceptual" feature which is currently not supported by PackageManager
(Note that by default, the functions from GAP.Packages
except load
do show the info messages at the current level --the default for the keyword argument quiet
is false
for them. Just for load
, quiet = true
is the default, and the value is handed over to install
when load
was called with the install = true
option.)
Debugging is something different, the current proposal for debug
changes the behaviour of the functions in the sense that RemovePackage
calls are deliberately omitted.
I think that setting debug = true
in the call of a function should imply setting the info level to the highest meaningful value, perhaps except if the info level is explicitly set in the same function call.
orig_PKGMAN_RemoveDir = Globals.PKGMAN_RemoveDir | ||
replace_global!(:PKGMAN_RemoveDir, function(dir) | ||
Globals.ValueOption(GapObj("debug")) == true && return | ||
orig_PKGMAN_RemoveDir(dir) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Of course we can remove this hack once we are using a PackageManager release with gap-packages/PackageManager#119 or something equivalent in it
src/globals.jl
Outdated
Wrappers.MakeReadWriteGlobal(n) | ||
setproperty!(Globals, name, val) | ||
Wrappers.MakeReadOnlyGlobal(n) | ||
end |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The analogous function ReplaceGapFunc
in Oscar.jl/gap/OscarInterface/gap/OscarInterface.gi
creates a global variable Concatenation("_ORIG_", name)
if it does not yet exist. Perhaps do this also here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have made just two comments, one concrete about the code and one about the conceptual questions.
Yes, if setting the info level per function call is supported then an additional quiet
option is not reasonable.
A function call that requests diagnostic output but without using debug
mode would then have a keyword argument info_level = 4
or so.
The current default makes sense:
Show no messages if GAP.Packages.load
is called, but use the current info level of PackageManager for the other functions of GAP.Packages
.
oldlevel = Wrappers.InfoLevel(Globals.InfoPackageManager) | ||
Wrappers.SetInfoLevel(Globals.InfoPackageManager, 0) | ||
Wrappers.SetInfoLevel(Globals.InfoPackageManager, quiet ? 0 : 3) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My viewpoint was that PackageManager's default info level is reasonable (otherwise this level should be changed there) but that there are situations where we want to suppress all info messages, for example if a package installation is triggered by the request to load a package. This is why quiet
arose instead of access to the various info levels (which are documented in PackageManager).
There is of course no problem with the viewpoint that one should be able to set the info level in each single function call. I do not see why this is helpful here, but it is surely a "conceptual" feature which is currently not supported by PackageManager
(Note that by default, the functions from GAP.Packages
except load
do show the info messages at the current level --the default for the keyword argument quiet
is false
for them. Just for load
, quiet = true
is the default, and the value is handed over to install
when load
was called with the install = true
option.)
Debugging is something different, the current proposal for debug
changes the behaviour of the functions in the sense that RemovePackage
calls are deliberately omitted.
I think that setting debug = true
in the call of a function should imply setting the info level to the highest meaningful value, perhaps except if the info level is explicitly set in the same function call.
63d828b
to
63ef854
Compare
eb1e6e7
to
e95cfa5
Compare
e95cfa5
to
2a7ab1c
Compare
I fixed a few issues with this. Overall I agree with your analysis @ThomasBreuer and since you've approved it, I assume we can merge it after CI runs (but since we'll meet in half an hour anyway, we can also talk about it then) |
Codecov Report
@@ Coverage Diff @@
## master #931 +/- ##
==========================================
+ Coverage 75.72% 75.78% +0.05%
==========================================
Files 51 51
Lines 4161 4162 +1
==========================================
+ Hits 3151 3154 +3
+ Misses 1010 1008 -2
|
Motivated by #928.