You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The current flow of a command's execution runs through the pre_run hook -> run main method -> post_run hook. However, if pre_run or run are interrupted or stopped, post_run is never called.
This means that post_run is effectively limited to pre_run and run working successfully. So in cases where cleanup needs to be performed before an application exits, your only option is to handle it in pre_run, run or the on_error hook method. That leaves 2 possible options for post_run: to call this method after pre_run/run but not directly require them to exit successfully, or to remove it entirely.
Despite my large advocacy for Cling and its structure, I have never used post_run for any existing CLI applications. It was mostly inspired from Cobra's PostRun methods which operates on a similar premise: postRunis deferred and will always run regardless of the state of the PreRun and Run methods. Assuming none of the methods fail, PostRunE/PostRun is called just before execution ends.
Cling does not differentiate between erroneous and non-erroneous execution methods like Cobra does with "E" suffixed methods because exceptions can be raised at any point of the program making everything erroneous. That means post_run could effectively be changed to always be called as the final part of execution, with any exceptions from it or previous hook methods still being funneled to the on_error hook method.
While this sounds like a clear-cut solution, there are some undefined semantics as to what precedence post_run has in regards to exception handling (or rather, ignoring) which up until this point, has been preceded by the on_error hook method. Would this enforce a stricter exception handling structure? What affects would this impose on existing applications? And most importantly, is it worth it?
The text was updated successfully, but these errors were encountered:
The current flow of a command's execution runs through the
pre_run
hook ->run
main method ->post_run
hook. However, ifpre_run
orrun
are interrupted or stopped,post_run
is never called.cling/src/cling/executor.cr
Lines 61 to 66 in 0dcfb17
This means that
post_run
is effectively limited topre_run
andrun
working successfully. So in cases where cleanup needs to be performed before an application exits, your only option is to handle it inpre_run
,run
or theon_error
hook method. That leaves 2 possible options forpost_run
: to call this method afterpre_run
/run
but not directly require them to exit successfully, or to remove it entirely.Despite my large advocacy for Cling and its structure, I have never used
post_run
for any existing CLI applications. It was mostly inspired from Cobra'sPostRun
methods which operates on a similar premise:postRun
is deferred and will always run regardless of the state of thePreRun
andRun
methods. Assuming none of the methods fail,PostRunE
/PostRun
is called just before execution ends.Cling does not differentiate between erroneous and non-erroneous execution methods like Cobra does with "E" suffixed methods because exceptions can be raised at any point of the program making everything erroneous. That means
post_run
could effectively be changed to always be called as the final part of execution, with any exceptions from it or previous hook methods still being funneled to theon_error
hook method.While this sounds like a clear-cut solution, there are some undefined semantics as to what precedence
post_run
has in regards to exception handling (or rather, ignoring) which up until this point, has been preceded by theon_error
hook method. Would this enforce a stricter exception handling structure? What affects would this impose on existing applications? And most importantly, is it worth it?The text was updated successfully, but these errors were encountered: