diff options
author | Jelmer Vernooij <jelmer@jelmer.uk> | 2016-07-11 20:46:53 +0000 |
---|---|---|
committer | Jelmer Vernooij <jelmer@jelmer.uk> | 2016-07-11 20:51:56 +0000 |
commit | c7e5e2f7245bb4b09cf77168e6d8bebe48d3dbe4 (patch) | |
tree | dc70d6d17cbbf66fc926de57743e7eae01883e18 /subvertpy | |
parent | 24e763e096ea49333f8a24ddb6ab5511bf03517f (diff) |
Support old_value argument to change_rev_prop()>
Diffstat (limited to 'subvertpy')
-rw-r--r-- | subvertpy/_ra.c | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/subvertpy/_ra.c b/subvertpy/_ra.c index 7d45f115..ed14fc72 100644 --- a/subvertpy/_ra.c +++ b/subvertpy/_ra.c @@ -1380,13 +1380,15 @@ static PyObject *ra_change_rev_prop(PyObject *self, PyObject *args) svn_revnum_t rev; char *name; RemoteAccessObject *ra = (RemoteAccessObject *)self; - char *value; - int vallen; + char *value, *oldvalue = NULL; + int vallen, oldvallen = -2; apr_pool_t *temp_pool; svn_string_t *val_string; + const svn_string_t *old_val_string; + const svn_string_t *const *old_val_string_p; - if (!PyArg_ParseTuple(args, "lss#:change_rev_prop", &rev, &name, &value, - &vallen)) + if (!PyArg_ParseTuple(args, "lss#|z#:change_rev_prop", &rev, &name, &value, + &vallen, &oldvalue, &oldvallen)) return NULL; if (ra_check_busy(ra)) return NULL; @@ -1395,9 +1397,35 @@ static PyObject *ra_change_rev_prop(PyObject *self, PyObject *args) if (temp_pool == NULL) return NULL; val_string = svn_string_ncreate(value, vallen, temp_pool); +#if ONLY_BEFORE_SVN(1, 7) + if (oldvallen != -2) { + PyErr_SetString(PyExc_NotImplementedError, + "Atomic revision property updates only supported on svn >= 1.7"); + ra->busy = false; + apr_pool_destroy(temp_pool); + return NULL; + } +#else + if (oldvallen != -2) { + if (oldvalue == NULL) { + old_val_string = NULL; + } else { + old_val_string = svn_string_ncreate(oldvalue, oldvallen, temp_pool); + } + old_val_string_p = &old_val_string; + } else { + old_val_string_p = NULL; + } +#endif +#if ONLY_SINCE_SVN(1, 7) RUN_RA_WITH_POOL(temp_pool, ra, - svn_ra_change_rev_prop(ra->ra, rev, name, val_string, + svn_ra_change_rev_prop2(ra->ra, rev, name, old_val_string_p, val_string, temp_pool)); +#else + RUN_RA_WITH_POOL(temp_pool, ra, + svn_ra_change_rev_prop(ra->ra, rev, name, val_string, + temp_pool)); +#endif apr_pool_destroy(temp_pool); Py_RETURN_NONE; } |