On 24.12.2011 17:01, Branko Čibej wrote:
On 24.12.2011 16:57, Stefan Küng wrote:
an assert implies that you _know_ something is wrong and you could
back out without taking the process down with you

No. That is inappropriate usage of assertions. Assert means that if the
condition is not met, you cannot continue. One should not use assertions
for, e.g., validation of public API parameters.

So, in case of e.g. a corrupted working copy which has paths messed up (and you know that the paths are messed up), then you would agree that returning an error like "paths not correct, wc might be corrupted" and let the application continue would be better than just aborting the process? Yes?

Then why are there multiple statements like this in the svn code:
  SVN_ERR_ASSERT_NO_RETURN(svn_dirent_is_absolute(local_abspath));
(example from libsvn_wc\util.c, line 197).

A simple SVN_ERR_ASSERT() would be much better, but no, the whole process is not allowed to proceed (notice the _NO_RETURN) and must be aborted.

That's just one example of many, many more. A simple search for SVN_ERR_ASSERT_NO_RETURN will give you an idea. I only found about two which I would consider real _NO_RETURN situations. All others are completely recoverable.

I have no problems with asserts, or even the _NO_RETURN asserts if they are used right. _NO_RETURN must not be used where the situation is recoverable.

Stefan

--
       ___
  oo  // \\      "De Chelonian Mobile"
 (_,\/ \_/ \     TortoiseSVN
   \ \_/_\_/>    The coolest Interface to (Sub)Version Control
   /_/   \_\     http://tortoisesvn.net

Reply via email to