1 Source: http://samba.org/~metze/subversion-1.4.0-metze-python-bindings.patch
2 diff -Npur subversion-1.4.0-clean/subversion/bindings/swig/include/apr.swg subversion-1.4.0-patch1/subversion/bindings/swig/include/apr.swg
3 --- subversion-1.4.0-clean/subversion/bindings/swig/include/apr.swg 2005-10-25 06:39:49.000000000 +0200
4 +++ subversion-1.4.0-patch1/subversion/bindings/swig/include/apr.swg 2007-01-26 17:54:33.463524500 +0100
5 @@ -146,14 +146,24 @@ typedef apr_int32_t time_t;
7 /* -----------------------------------------------------------------------
8 create an OUTPUT argument defn for an apr_hash_t ** which is storing
11 +%typemap(python,in,numinputs=0) apr_hash_t **DIRENTHASH = apr_hash_t **OUTPUT;
12 +%typemap(python,argout,fragment="t_output_helper") apr_hash_t **DIRENTHASH {
13 + $result = t_output_helper($result,
14 + svn_swig_py_convert_hash(*$1,
15 + SWIGTYPE_p_svn_dirent_t,
19 +/* -----------------------------------------------------------------------
20 + create an OUTPUT argument defn for an apr_hash_t ** which is storing
24 %typemap(python,in,numinputs=0) apr_hash_t **PROPHASH = apr_hash_t **OUTPUT;
25 -%typemap(python,argout) apr_hash_t **PROPHASH {
26 - /* toss prior result, get new result from the hash */
28 - $result = svn_swig_py_prophash_to_dict(*$1);
29 +%typemap(python,argout,fragment="t_output_helper") apr_hash_t **PROPHASH {
30 + $result = t_output_helper($result, svn_swig_py_prophash_to_dict(*$1));
33 %typemap(perl5,in,numinputs=0) apr_hash_t **PROPHASH = apr_hash_t **OUTPUT;
34 diff -Npur subversion-1.4.0-clean/subversion/bindings/swig/include/proxy_apr.swg subversion-1.4.0-patch1/subversion/bindings/swig/include/proxy_apr.swg
35 --- subversion-1.4.0-clean/subversion/bindings/swig/include/proxy_apr.swg 2006-03-05 08:31:48.000000000 +0100
36 +++ subversion-1.4.0-patch1/subversion/bindings/swig/include/proxy_apr.swg 2007-01-26 17:54:33.795545250 +0100
37 @@ -159,6 +159,28 @@ struct apr_pool_t {
39 if hasattr(self, "_is_valid"):
42 + # Clear out any pool-owned references inserted by typemaps
43 + if hasattr(self, "_owned_refs"):
44 + del self._owned_refs
46 + def _add_owned_ref(self, ref):
47 + """Add a new 'owned' reference -- i.e. a Python object contained in a C
48 + structure allocated in this pool. Used by the typemaps to manage
49 + reference counting semantics."""
50 + if not hasattr(self, "_owned_refs"):
51 + self._owned_refs = {}
52 + if self._owned_refs.has_key(ref):
53 + self._owned_refs[ref] += 1
55 + self._owned_refs[ref] = 1
57 + def _remove_owned_ref(self, ref):
58 + """Remove an existing 'owned' reference. Also used by typemaps."""
59 + if hasattr(self, "_owned_refs") and self._owned_refs.has_key(ref):
60 + self._owned_refs[ref] -= 1
61 + if self._owned_refs[ref] == 0:
62 + del self._owned_refs[ref]
65 """Automatically destroy memory pools, if necessary"""
66 diff -Npur subversion-1.4.0-clean/subversion/bindings/swig/include/svn_types.swg subversion-1.4.0-patch1/subversion/bindings/swig/include/svn_types.swg
67 --- subversion-1.4.0-clean/subversion/bindings/swig/include/svn_types.swg 2006-04-20 04:47:39.000000000 +0200
68 +++ subversion-1.4.0-patch1/subversion/bindings/swig/include/svn_types.swg 2007-01-27 09:05:41.585591500 +0100
70 svn_swig_rb_set_baton($result, (VALUE)$2);
73 +%typemap(python, in) (svn_commit_callback2_t callback, void *callback_baton)
75 + $1 = svn_swig_py_commit_callback2;
76 + $2 = (void *)$input;
79 /* -----------------------------------------------------------------------
80 Callback: svn_cancel_func_t
83 $1 = svn_swig_rb_make_stream($input);
87 +%typemap(in) (svn_commit_callback_t callback, void *callback_baton)
89 + $1 = svn_swig_py_commit_callback;
90 + $2 = (void *)$input;
94 +/* -----------------------------------------------------------------------
95 + Mapper to automatically turn Python objects into void* batons on assignment
99 +%typemap(in) void *PY_AS_VOID (PyObject *newRef) {
101 + if ($input == Py_None) {
102 + $1 = newRef = NULL;
105 + $1 = (void *)$input;
107 + if (svn_swig_py_pool_set_owned_ref(obj0, (PyObject *)arg1->$1_name, newRef)) {
113 /* -----------------------------------------------------------------------
114 Wrap the digest output for functions populating digests.
116 diff -Npur subversion-1.4.0-clean/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c subversion-1.4.0-patch1/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c
117 --- subversion-1.4.0-clean/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c 2006-04-18 21:49:41.000000000 +0200
118 +++ subversion-1.4.0-patch1/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c 2007-01-27 08:57:48.532027500 +0100
119 @@ -104,6 +104,8 @@ static apr_pool_t *_global_pool = NULL;
120 static PyObject *_global_svn_swig_py_pool = NULL;
121 static char assertValid[] = "assert_valid";
122 static char parentPool[] = "_parent_pool";
123 +static char addOwnedRef[] = "_add_owned_ref";
124 +static char removeOwnedRef[] = "_remove_owned_ref";
125 static char wrap[] = "_wrap";
126 static char unwrap[] = "_unwrap";
127 static char setParentPool[] = "set_parent_pool";
128 @@ -166,6 +168,51 @@ static int proxy_set_pool(PyObject **pro
133 +/* Get the parent pool of a proxy object, or return the global application
134 + * pool if one is not set. Returns a BORROWED reference! */
135 +static PyObject *proxy_get_pool(PyObject *proxy)
139 + if (PyObject_HasAttrString(proxy, parentPool)) {
140 + result = PyObject_GetAttrString(proxy, parentPool);
143 + result = _global_svn_swig_py_pool;
149 +/* Change an 'owned reference' allocated in a pool from oldRef to newRef.
150 + * If oldRef is non-NULL and present in the parent pool of proxy, it is removed.
152 +int svn_swig_py_pool_set_owned_ref(PyObject *proxy, PyObject *oldRef,
156 + PyObject *py_pool = proxy_get_pool(proxy);
158 + if (oldRef != NULL) {
159 + temp = PyObject_CallMethod(py_pool, removeOwnedRef, objectTuple, oldRef);
160 + if (temp == NULL) {
166 + if (newRef != NULL) {
167 + temp = PyObject_CallMethod(py_pool, addOwnedRef, objectTuple, newRef);
168 + if (temp == NULL) {
178 /* Wrapper for SWIG_TypeQuery */
179 #define svn_swig_TypeQuery(x) SWIG_TypeQuery(x)
180 @@ -239,14 +286,11 @@ void *svn_swig_MustGetPtr(void *input, s
185 if (py_pool != NULL) {
186 - if (PyObject_HasAttrString(input, parentPool)) {
187 - *py_pool = PyObject_GetAttrString(input, parentPool);
188 - Py_DECREF(*py_pool);
190 - *py_pool = _global_svn_swig_py_pool;
192 + *py_pool = proxy_get_pool((PyObject *) input);
195 if (PyObject_HasAttrString(input, unwrap)) {
196 input = PyObject_CallMethod(input, unwrap, emptyTuple);
198 @@ -486,6 +530,47 @@ PyObject *svn_swig_py_prophash_to_dict(a
199 return convert_hash(hash, convert_svn_string_t, NULL, NULL);
202 +static PyObject *proparray_to_dict(const apr_array_header_t *array)
204 + PyObject *dict = PyDict_New();
207 + if (dict == NULL) {
211 + for (i = 0; i < array->nelts; ++i) {
213 + PyObject *py_key, *py_value;
215 + prop = APR_ARRAY_IDX(array, i, svn_prop_t);
217 + py_key = PyString_FromString(prop.name);
218 + if (py_key == NULL) {
222 + if (prop.value == NULL) {
223 + py_value = Py_None;
224 + Py_INCREF(Py_None);
226 + py_value = PyString_FromStringAndSize((void *)prop.value->data,
228 + if (py_value == NULL) {
234 + PyDict_SetItem(dict, py_key, py_value);
244 PyObject *svn_swig_py_locationhash_to_dict(apr_hash_t *hash)
246 @@ -552,6 +637,8 @@ DECLARE_SWIG_CONSTRUCTOR(lock, svn_lock_
247 DECLARE_SWIG_CONSTRUCTOR(auth_ssl_server_cert_info,
248 svn_auth_ssl_server_cert_info_dup)
249 DECLARE_SWIG_CONSTRUCTOR(info, svn_info_dup)
250 +DECLARE_SWIG_CONSTRUCTOR(commit_info, svn_commit_info_dup)
251 +DECLARE_SWIG_CONSTRUCTOR(wc_notify, svn_wc_dup_notify)
253 static PyObject *convert_log_changed_path(void *value, void *ctx,
255 @@ -1448,6 +1535,14 @@ write_handler_pyio(void *baton, const ch
259 +static svn_error_t *
260 +close_handler_pyio(void *baton)
262 + PyObject *py_io = baton;
264 + return SVN_NO_ERROR;
268 svn_swig_py_make_stream(PyObject *py_io, apr_pool_t *pool)
270 @@ -1458,9 +1553,11 @@ svn_swig_py_make_stream(PyObject *py_io,
271 * bindings, and we will be finished with the py_io object before we return
272 * to python. I.e. DO NOT STORE AWAY THE RESULTING svn_stream_t * for use
273 * over multiple calls into the bindings. */
275 stream = svn_stream_create(py_io, pool);
276 svn_stream_set_read(stream, read_handler_pyio);
277 svn_stream_set_write(stream, write_handler_pyio);
278 + svn_stream_set_close(stream, close_handler_pyio);
282 @@ -1507,6 +1604,40 @@ void svn_swig_py_notify_func(void *baton
283 svn_swig_py_release_py_lock();
286 +void svn_swig_py_notify_func2(void *baton,
287 + const svn_wc_notify_t *notify,
290 + PyObject *function = baton;
292 + svn_error_t *err = SVN_NO_ERROR;
294 + if (function == NULL || function == Py_None) {
298 + svn_swig_py_acquire_py_lock();
300 + if ((result = PyObject_CallFunction(function,
302 + make_ob_wc_notify, notify,
303 + make_ob_pool, pool)) == NULL) {
304 + err = callback_exception_error();
306 + /* The callback shouldn't be returning anything. */
307 + if (result != Py_None) {
308 + err = callback_bad_return_error("Not None");
313 + /* Our error has no place to go. :-( */
315 + svn_error_clear(err);
318 + svn_swig_py_release_py_lock();
321 void svn_swig_py_status_func(void *baton,
323 @@ -2142,3 +2273,353 @@ svn_swig_py_auth_ssl_client_cert_pw_prom
328 +/* svn_ra_callbacks_t */
329 +static svn_error_t *
330 +ra_callbacks_open_tmp_file(apr_file_t **fp,
331 + void *callback_baton,
334 + PyObject *callbacks = (PyObject *)callback_baton;
336 + svn_error_t *err = SVN_NO_ERROR;
338 + svn_swig_py_acquire_py_lock();
340 + if ((result = PyObject_CallMethod(callbacks,
343 + make_ob_pool, pool)) == NULL) {
344 + err = callback_exception_error();
345 + } else if (result == Py_None) {
348 + *fp = svn_swig_py_make_file(result, pool);
350 + err = callback_exception_error();
354 + Py_XDECREF(result);
355 + svn_swig_py_release_py_lock();
360 +svn_swig_py_setup_ra_callbacks(svn_ra_callbacks2_t **callbacks,
362 + PyObject *py_callbacks,
365 + svn_error_t *err = svn_ra_create_callbacks(callbacks, pool);
366 + PyObject *py_auth_baton;
369 + svn_swig_py_svn_exception(err);
373 + (*callbacks)->open_tmp_file = ra_callbacks_open_tmp_file;
375 + py_auth_baton = PyObject_GetAttrString(py_callbacks, "auth_baton");
377 + if (svn_swig_ConvertPtrString(py_auth_baton,
378 + (void **)&((*callbacks)->auth_baton),
379 + "svn_auth_baton_t *")) {
380 + err = type_conversion_error("svn_auth_baton_t *");
381 + svn_swig_py_svn_exception(err);
382 + Py_DECREF(py_auth_baton);
386 + Py_XDECREF(py_auth_baton);
388 + *baton = py_callbacks;
391 +svn_error_t *svn_swig_py_commit_callback2(const svn_commit_info_t *commit_info,
395 + PyObject *receiver = baton;
397 + svn_error_t *err = SVN_NO_ERROR;
399 + if ((receiver == NULL) || (receiver == Py_None)) {
400 + return SVN_NO_ERROR;
403 + svn_swig_py_acquire_py_lock();
405 + if ((result = PyObject_CallFunction(receiver,
407 + make_ob_commit_info, commit_info,
408 + make_ob_pool, pool)) == NULL) {
409 + err = callback_exception_error();
411 + if (result != Py_None) {
412 + err = callback_bad_return_error("Not None");
417 + svn_swig_py_release_py_lock();
422 +svn_error_t *svn_swig_py_commit_callback(svn_revnum_t new_revision,
424 + const char *author,
427 + PyObject *receiver = baton;
429 + svn_error_t *err = SVN_NO_ERROR;
431 + if ((receiver == NULL) || (receiver == Py_None)) {
432 + return SVN_NO_ERROR;
435 + svn_swig_py_acquire_py_lock();
437 + if ((result = PyObject_CallFunction(receiver,
439 + new_revision, date, author)) == NULL) {
440 + err = callback_exception_error();
442 + if (result != Py_None) {
443 + err = callback_bad_return_error("Not None");
448 + svn_swig_py_release_py_lock();
453 +svn_error_t *svn_swig_py_ra_file_rev_handler_func(void *baton,
456 + apr_hash_t *rev_props,
457 + svn_txdelta_window_handler_t *delta_handler,
458 + void **delta_baton,
459 + apr_array_header_t *prop_diffs,
462 + PyObject *handler = baton;
463 + PyObject *result, *py_rev_props = NULL, *py_prop_diffs = NULL;
464 + svn_error_t *err = SVN_NO_ERROR;
466 + if ((handler == NULL) || (handler == Py_None)) {
467 + return SVN_NO_ERROR;
470 + svn_swig_py_acquire_py_lock();
472 + py_rev_props = svn_swig_py_prophash_to_dict(rev_props);
473 + if (py_rev_props == NULL) {
474 + err = type_conversion_error("apr_hash_t *");
478 + py_prop_diffs = proparray_to_dict(prop_diffs);
480 + if (py_prop_diffs == NULL) {
481 + err = type_conversion_error("apr_array_header_t *");
485 + if ((result = PyObject_CallFunction(handler,
487 + path, rev, py_rev_props, py_prop_diffs,
488 + make_ob_pool, pool)) == NULL) {
489 + err = callback_exception_error();
491 + if (result != Py_None) {
492 + err = callback_bad_return_error("Not None");
495 + /* FIXME: Support returned TxDeltaWindow object and
496 + * set delta_handler and delta_baton */
497 + *delta_handler = NULL;
498 + *delta_baton = NULL;
500 + Py_XDECREF(result);
505 + Py_XDECREF(py_rev_props);
506 + Py_XDECREF(py_prop_diffs);
508 + svn_swig_py_release_py_lock();
513 +static svn_error_t *reporter_set_path(void *report_baton,
515 + svn_revnum_t revision,
516 + svn_boolean_t start_empty,
517 + const char *lock_token,
520 + svn_error_t *err = SVN_NO_ERROR;
521 + PyObject *py_reporter = report_baton, *result;
523 + if (py_reporter == NULL || py_reporter == Py_None) {
524 + return SVN_NO_ERROR;
527 + svn_swig_py_acquire_py_lock();
529 + if ((result = PyObject_CallMethod(py_reporter,
530 + (char *)"set_path",
533 + start_empty, lock_token,
534 + make_ob_pool, pool)) == NULL) {
535 + err = callback_exception_error();
536 + } else if (result != Py_None) {
537 + err = callback_bad_return_error("Not None");
540 + Py_XDECREF(result);
542 + svn_swig_py_release_py_lock();
547 +static svn_error_t *reporter_delete_path(void *report_baton,
551 + svn_error_t *err = SVN_NO_ERROR;
552 + PyObject *py_reporter = report_baton, *result;
554 + if (py_reporter == NULL || py_reporter == Py_None) {
555 + return SVN_NO_ERROR;
558 + svn_swig_py_acquire_py_lock();
560 + if ((result = PyObject_CallMethod(py_reporter,
561 + (char *)"delete_path",
564 + make_ob_pool, pool)) == NULL) {
565 + err = callback_exception_error();
566 + } else if (result != Py_None) {
567 + err = callback_bad_return_error("Not None");
570 + Py_XDECREF(result);
572 + svn_swig_py_release_py_lock();
577 +static svn_error_t *reporter_link_path(void *report_baton,
580 + svn_revnum_t revision,
581 + svn_boolean_t start_empty,
582 + const char *lock_token,
585 + svn_error_t *err = SVN_NO_ERROR;
586 + PyObject *py_reporter = report_baton, *result;
588 + if (py_reporter == NULL || py_reporter == Py_None) {
589 + return SVN_NO_ERROR;
592 + svn_swig_py_acquire_py_lock();
594 + if ((result = PyObject_CallMethod(py_reporter,
595 + (char *)"link_path",
597 + path, url, revision,
598 + start_empty, lock_token,
599 + make_ob_pool, pool)) == NULL) {
600 + err = callback_exception_error();
601 + } else if (result != Py_None) {
602 + err = callback_bad_return_error("Not None");
605 + Py_XDECREF(result);
607 + svn_swig_py_release_py_lock();
612 +static svn_error_t *reporter_finish_report(void *report_baton,
615 + svn_error_t *err = SVN_NO_ERROR;
617 + PyObject *py_reporter = report_baton, *result;
619 + if (py_reporter == NULL || py_reporter == Py_None) {
620 + return SVN_NO_ERROR;
623 + svn_swig_py_acquire_py_lock();
625 + if ((result = PyObject_CallMethod(py_reporter,
626 + (char *)"finish_report",
628 + make_ob_pool, pool)) == NULL) {
629 + err = callback_exception_error();
630 + } else if (result != Py_None) {
631 + err = callback_bad_return_error("Not None");
634 + Py_XDECREF(result);
636 + svn_swig_py_release_py_lock();
641 +static svn_error_t *reporter_abort_report(void *report_baton,
644 + svn_error_t *err = SVN_NO_ERROR;
646 + PyObject *py_reporter = report_baton, *result;
648 + if (py_reporter == NULL || py_reporter == Py_None) {
649 + return SVN_NO_ERROR;
652 + svn_swig_py_acquire_py_lock();
654 + if ((result = PyObject_CallMethod(py_reporter,
655 + (char *)"abort_report",
657 + make_ob_pool, pool)) == NULL) {
658 + err = callback_exception_error();
659 + } else if (result != Py_None) {
660 + err = callback_bad_return_error("Not None");
663 + Py_XDECREF(result);
665 + svn_swig_py_release_py_lock();
670 +const svn_ra_reporter2_t swig_py_ra_reporter2 = {
672 + reporter_delete_path,
673 + reporter_link_path,
674 + reporter_finish_report,
675 + reporter_abort_report
677 diff -Npur subversion-1.4.0-clean/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h subversion-1.4.0-patch1/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h
678 --- subversion-1.4.0-clean/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h 2006-04-18 21:49:41.000000000 +0200
679 +++ subversion-1.4.0-patch1/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h 2007-01-27 08:58:32.346765750 +0100
680 @@ -79,6 +79,9 @@ void svn_swig_py_clear_application_pool(
681 SVN_SWIG_SWIGUTIL_EXPORT
682 void svn_swig_get_application_pool(PyObject **py_pool, apr_pool_t **pool);
684 +/* Set a Python 'owned' reference on the pool of the given proxy object */
685 +int svn_swig_py_pool_set_owned_ref(PyObject *proxy, PyObject *oldRef, PyObject *newRef);
688 /*** SWIG Wrappers ***/
690 @@ -198,6 +201,11 @@ void svn_swig_py_notify_func(void *baton
691 svn_wc_notify_state_t prop_state,
692 svn_revnum_t revision);
694 +SVN_SWIG_SWIGUTIL_EXPORT
695 +void svn_swig_py_notify_func2(void *baton,
696 + const svn_wc_notify_t *notify,
699 /* a status function that executes a Python function that is passed in
700 via the baton argument */
701 SVN_SWIG_SWIGUTIL_EXPORT
702 @@ -310,6 +318,45 @@ svn_error_t *svn_swig_py_auth_ssl_client
703 svn_boolean_t may_save,
706 +SVN_SWIG_SWIGUTIL_EXPORT
708 +svn_swig_py_setup_ra_callbacks(svn_ra_callbacks2_t **callbacks,
710 + PyObject *py_callbacks,
712 +SVN_SWIG_SWIGUTIL_EXPORT
713 +svn_error_t *svn_swig_py_commit_callback2(const svn_commit_info_t *commit_info,
717 +SVN_SWIG_SWIGUTIL_EXPORT
718 +svn_error_t *svn_swig_py_commit_callback(svn_revnum_t new_revision,
720 + const char *author,
724 +SVN_SWIG_SWIGUTIL_EXPORT
725 +svn_error_t *svn_swig_py_ra_file_rev_handler_func(
729 + apr_hash_t *rev_props,
730 + svn_txdelta_window_handler_t *delta_handler,
731 + void **delta_baton,
732 + apr_array_header_t *prop_diffs,
735 +SVN_SWIG_SWIGUTIL_EXPORT
736 +extern const svn_ra_reporter2_t swig_py_ra_reporter2;
738 +SVN_SWIG_SWIGUTIL_EXPORT
740 +svn_swig_py_setup_ra_callbacks(svn_ra_callbacks2_t **callbacks,
742 + PyObject *py_callbacks,
747 #endif /* __cplusplus */
748 diff -Npur subversion-1.4.0-clean/subversion/bindings/swig/svn_client.i subversion-1.4.0-patch1/subversion/bindings/swig/svn_client.i
749 --- subversion-1.4.0-clean/subversion/bindings/swig/svn_client.i 2006-04-21 01:25:54.000000000 +0200
750 +++ subversion-1.4.0-patch1/subversion/bindings/swig/svn_client.i 2007-01-27 09:09:48.813042250 +0100
755 +%include constraints.i
757 %include svn_global.swg
763 +%apply Pointer NONNULL {
764 + const svn_opt_revision_t *revision,
765 + const svn_opt_revision_t *peg_revision
768 %apply const apr_array_header_t *STRINGLIST {
769 const apr_array_header_t *targets,
770 const apr_array_header_t *diff_options
774 %apply svn_stream_t *WRAPPED_STREAM { svn_stream_t * };
776 +/* members of svn_client_ctx_t */
777 +%apply void *PY_AS_VOID {
778 + void *notify_baton,
779 + void *log_msg_baton,
780 + void *cancel_baton,
781 + void *notify_baton2,
782 + void *log_msg_baton2,
783 + void *progress_baton
787 /* -----------------------------------------------------------------------
791 /* -----------------------------------------------------------------------
792 + Callback: svn_info_receiver_t
796 +%typemap(python, in) (svn_info_receiver_t receiver,
797 + void *receiver_baton) {
798 + $1 = svn_swig_py_info_receiver_func;
799 + $2 = (void *)$input;
803 +/* -----------------------------------------------------------------------
804 We use 'svn_wc_status_t *' in some custom code, but it isn't in the
805 API anywhere. Thus, SWIG doesn't generate a typemap entry for it. by
806 adding a simple declaration here, SWIG will insert a name for it.
808 %include svn_time_h.swg
809 %include svn_client_h.swg
813 +/* provide Python with access to some thunks. */
814 +%constant svn_cancel_func_t svn_swig_py_cancel_func;
815 +%constant svn_client_get_commit_log2_t svn_swig_py_get_commit_log_func;
816 +%constant svn_wc_notify_func2_t svn_swig_py_notify_func;
823 diff -Npur subversion-1.4.0-clean/subversion/bindings/swig/svn_delta.i subversion-1.4.0-patch1/subversion/bindings/swig/svn_delta.i
824 --- subversion-1.4.0-clean/subversion/bindings/swig/svn_delta.i 2006-08-16 04:53:06.000000000 +0200
825 +++ subversion-1.4.0-patch1/subversion/bindings/swig/svn_delta.i 2007-01-26 17:54:34.759605500 +0100
827 const char *error_info,
828 const char *copyfrom_path,
829 const char *copy_path,
830 - const char *base_checksum
831 + const char *base_checksum,
832 + const char *text_checksum
836 @@ -148,6 +149,17 @@ void svn_swig_py_make_editor(const svn_d
842 +svn_error_t *svn_delta_invoke_txdelta_window_handler (
843 + svn_txdelta_window_handler_t handler,
844 + svn_txdelta_window_t *window, void *baton) {
845 + return handler(window, baton);
851 /* -----------------------------------------------------------------------
852 handle svn_txdelta_window_t::ops
854 diff -Npur subversion-1.4.0-clean/subversion/bindings/swig/svn_ra.i subversion-1.4.0-patch1/subversion/bindings/swig/svn_ra.i
855 --- subversion-1.4.0-clean/subversion/bindings/swig/svn_ra.i 2006-04-20 04:25:35.000000000 +0200
856 +++ subversion-1.4.0-patch1/subversion/bindings/swig/svn_ra.i 2007-01-26 18:20:24.464456000 +0100
861 +%include constraints.i
863 %include svn_global.swg
866 const svn_ra_reporter2_t **reporter,
868 svn_dirent_t **dirent,
871 + const svn_delta_editor_t **
874 %apply apr_hash_t **PROPHASH { apr_hash_t **props };
875 +%apply apr_hash_t **DIRENTHASH { apr_hash_t **dirents };
877 %apply const char *MAY_BE_NULL {
880 svn_swig_rb_setup_ra_callbacks(&$1, &$2, $input, _global_pool);
883 +%typemap(python, in) (const svn_ra_callbacks2_t *callbacks,
884 + void *callback_baton) {
885 + svn_swig_py_setup_ra_callbacks(&$1, &$2, $input, _global_pool);
888 %typemap(perl5, in) apr_hash_t *config {
889 $1 = svn_swig_pl_objs_to_hash_by_name ($input, "svn_config_t *",
892 $1 = svn_swig_rb_hash_to_apr_hash_revnum($input, _global_pool);
896 +%typemap(in) (svn_ra_file_rev_handler_t handler, void *handler_baton)
898 + $1 = svn_swig_py_ra_file_rev_handler_func;
899 + $2 = (void *)$input;
904 +%typemap(in) (const svn_ra_reporter2_t *reporter, void *report_baton)
906 + $1 = (svn_ra_reporter2_t *)&swig_py_ra_reporter2;
907 + $2 = (void *)$input;
911 /* ----------------------------------------------------------------------- */
914 diff -Npur subversion-1.4.0-clean/subversion/bindings/swig/svn_wc.i subversion-1.4.0-patch1/subversion/bindings/swig/svn_wc.i
915 --- subversion-1.4.0-clean/subversion/bindings/swig/svn_wc.i 2006-04-20 04:49:42.000000000 +0200
916 +++ subversion-1.4.0-patch1/subversion/bindings/swig/svn_wc.i 2007-01-26 17:54:34.807608500 +0100
922 +%typemap(in, numinputs=0)
923 + apr_array_header_t **patterns (apr_array_header_t *temp)
927 +%typemap(argout, fragment="t_output_helper")
928 + apr_array_header_t **patterns
930 + $result = t_output_helper($result,
931 + svn_swig_py_array_to_list(*$1));
935 /* -----------------------------------------------------------------------
936 Callback: svn_wc_notify_func_t
939 $2 = $input; /* our function is the baton. */
942 +%typemap(python,in) (svn_wc_notify_func2_t notify_func, void *notify_baton) {
943 + $1 = svn_swig_py_notify_func2;
944 + $2 = $input; /* our function is the baton. */
947 %typemap(perl5,in) (svn_wc_status_func_t status_func, void *status_baton) {
948 $1 = svn_swig_pl_status_func;
949 $2 = $input; /* our function is the baton. */