Alien-SVN
view release on metacpan or search on metacpan
src/subversion/subversion/tests/libsvn_wc/op-depth-test.c view on Meta::CPAN
#ifdef _MSC_VER
#pragma warning(disable: 4221) /* nonstandard extension used */
#endif
/* This macro is not available in 1.8.x, but let's just use it here */
#ifndef SVN_VA_NULL
struct svn_null_pointer_constant_stdarg_sentinel_t;
/** Null pointer constant used as a sentinel in variable argument lists. */
#define SVN_VA_NULL ((struct svn_null_pointer_constant_stdarg_sentinel_t*)0)
#endif
/* Compare strings, like strcmp but either or both may be NULL which
* compares equal to NULL and not equal to any non-NULL string. */
static int
strcmp_null(const char *s1, const char *s2)
{
if (s1 && s2)
return strcmp(s1, s2);
else if (s1 || s2)
return 1;
else
return 0;
}
/* ---------------------------------------------------------------------- */
/* Reading the WC DB */
static svn_error_t *
open_wc_db(svn_sqlite__db_t **sdb,
const char *wc_root_abspath,
const char *const *my_statements,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
SVN_ERR(svn_wc__db_util_open_db(sdb, wc_root_abspath, "wc.db",
svn_sqlite__mode_readwrite,
FALSE /* exclusive */, my_statements,
result_pool, scratch_pool));
return SVN_NO_ERROR;
}
/* ---------------------------------------------------------------------- */
/* Functions for comparing expected and found WC DB data. */
/* Some of the fields from a NODES table row. */
typedef struct nodes_row_t {
int op_depth;
const char *local_relpath;
const char *presence;
svn_revnum_t repo_revnum;
const char *repo_relpath;
svn_boolean_t file_external;
const char *moved_to;
svn_boolean_t moved_here;
const char *props; /* comma-separated list of prop names */
} nodes_row_t;
/* Macro for filling in the REPO_* fields of a non-base NODES_ROW_T
* that has no copy-from info. */
#define NO_COPY_FROM SVN_INVALID_REVNUM, NULL, FALSE
#define MOVED_HERE FALSE, NULL, TRUE
#define NOT_MOVED FALSE, NULL, FALSE
/* Return a comma-separated list of the prop names in PROPS, in lexically
* ascending order, or NULL if PROPS is empty or NULL. (Here, we don't
* care about the difference between 'has no props' and 'can't have props',
* and we choose to represent both of those as NULL.) */
static const char *
props_hash_to_text(apr_hash_t *props, apr_pool_t *pool)
{
apr_array_header_t *props_sorted;
svn_stringbuf_t *str;
int i;
if (! props)
return NULL;
str = svn_stringbuf_create_empty(pool);
props_sorted = svn_sort__hash(props, svn_sort_compare_items_lexically, pool);
for (i = 0; i < props_sorted->nelts; i++)
{
const svn_sort__item_t *item
= &APR_ARRAY_IDX(props_sorted, i, svn_sort__item_t);
if (str->len)
svn_stringbuf_appendbyte(str, ',');
svn_stringbuf_appendcstr(str, item->key);
}
return str->len ? str->data : NULL;
}
/* Return a human-readable string representing ROW. */
static const char *
print_row(const nodes_row_t *row,
apr_pool_t *result_pool)
{
const char *file_external_str, *moved_here_str, *moved_to_str, *props;
if (row == NULL)
return "(null)";
if (row->moved_to)
moved_to_str = apr_psprintf(result_pool, ", moved-to %s", row->moved_to);
else
moved_to_str = "";
if (row->moved_here)
moved_here_str = ", moved-here";
else
moved_here_str = "";
if (row->file_external)
file_external_str = ", file-external";
else
file_external_str = "";
if (row->props)
props = apr_psprintf(result_pool, ", p=(%s)", row->props);
( run in 0.633 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )