From f85f39e662d494796d36f3c9fcb608f7042451b4 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 2 Oct 2021 07:22:33 +0530 Subject: [PATCH] Code to easily develop librsync bindings --- kittens/transfer/librsync.py | 17 +++++++++++++++++ kittens/transfer/rsync.c | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/kittens/transfer/librsync.py b/kittens/transfer/librsync.py index 6777b285d..e8f6616c9 100644 --- a/kittens/transfer/librsync.py +++ b/kittens/transfer/librsync.py @@ -136,3 +136,20 @@ class PatchFile(StreamingJob): def __exit__(self, *a: object) -> None: self.close() + + +def develop() -> None: + import sys + src = sys.argv[-1] + sig_loader = LoadSignature() + with open(src + '.sig', 'wb') as f: + for chunk in signature_of_file(src): + sig_loader(chunk) + f.write(chunk) + sig_loader() + with open(src + '.delta', 'wb') as f, PatchFile(src, src + '.output') as patcher: + for chunk in delta_for_file(src, sig_loader.signature): + f.write(chunk) + patcher.write(chunk) + if not patcher.finished: + patcher.write(b'') diff --git a/kittens/transfer/rsync.c b/kittens/transfer/rsync.c index 7c4572805..58f5116a1 100644 --- a/kittens/transfer/rsync.c +++ b/kittens/transfer/rsync.c @@ -156,7 +156,7 @@ copy_callback(void *opaque, rs_long_t pos, size_t *len, void **buf) { if (!mem) { PyErr_Clear(); return RS_MEM_ERROR; } PyObject *res = PyObject_CallFunction(callback, "OL", mem, p); Py_DECREF(mem); - if (res == NULL) { PyErr_Clear(); return RS_IO_ERROR; } + if (res == NULL) { PyErr_Print(); return RS_IO_ERROR; } rs_result r = RS_DONE; if (PyLong_Check(res)) { *len = PyLong_AsSize_t(res); } else { r = RS_INTERNAL_ERROR; }