Commit e9e20c84 by Russell Belfer

Update cl_git_pass to return more info

This adds a failure reporting function that is called by
cl_git_pass which captures the actual error return code and
the error message if available in the failure report.
parent 60406162
...@@ -2,6 +2,16 @@ ...@@ -2,6 +2,16 @@
#include "posix.h" #include "posix.h"
#include "path.h" #include "path.h"
void cl_git_report_failure(
int error, const char *file, int line, const char *fncall)
{
char msg[4096];
const git_error *last = giterr_last();
p_snprintf(msg, 4096, "error %d - %s",
error, last ? last->message : "<no message>");
clar__assert(0, file, line, fncall, msg, 1);
}
void cl_git_mkfile(const char *filename, const char *content) void cl_git_mkfile(const char *filename, const char *content)
{ {
int fd; int fd;
......
...@@ -6,17 +6,17 @@ ...@@ -6,17 +6,17 @@
#include "common.h" #include "common.h"
/** /**
* Special wrapper for `clar_must_pass` that passes * Replace for `clar_must_pass` that passes the last library error as the
* the last library error as the test failure message. * test failure message.
* *
* Use this wrapper around all `git_` library calls that * Use this wrapper around all `git_` library calls that return error codes!
* return error codes!
*/ */
#define cl_git_pass(expr) do { \ #define cl_git_pass(expr) do { \
int _lg2_error; \
giterr_clear(); \ giterr_clear(); \
if ((expr) != 0) \ if ((_lg2_error = (expr)) != 0) \
clar__assert(0, __FILE__, __LINE__, "Function call failed: " #expr, giterr_last() ? giterr_last()->message : NULL, 1); \ cl_git_report_failure(_lg2_error, __FILE__, __LINE__, "Function call failed: " #expr); \
} while(0) } while (0)
/** /**
* Wrapper for `clar_must_fail` -- this one is * Wrapper for `clar_must_fail` -- this one is
...@@ -25,6 +25,10 @@ ...@@ -25,6 +25,10 @@
*/ */
#define cl_git_fail(expr) cl_must_fail(expr) #define cl_git_fail(expr) cl_must_fail(expr)
#define cl_git_fail_with(expr, error) cl_assert_equal_i(error,expr)
void cl_git_report_failure(int, const char *, int, const char *);
#define cl_assert_equal_sz(sz1,sz2) cl_assert((sz1) == (sz2)) #define cl_assert_equal_sz(sz1,sz2) cl_assert((sz1) == (sz2))
/* /*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment