Add subvertpy.wc.WorkingCopy.probe_try.
authorJelmer Vernooij <jelmer@samba.org>
Thu, 17 Feb 2011 13:06:14 +0000 (14:06 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Thu, 17 Feb 2011 13:06:14 +0000 (14:06 +0100)
NEWS
subvertpy/tests/test_wc.py
subvertpy/wc.c

diff --git a/NEWS b/NEWS
index 739042a44f85cf5862a3f0f8c93eda526a89e11f..e7d9a4e9edcc1d1046af1181f6af6b739d0fe22b 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -50,6 +50,8 @@
   * Add subvertpy.wc.WorkingCopy.probe_retrieve, subvertpy.wc.WorkingCopy.retrieve.
     (Jelmer Vernooij)
 
+  * Add subvertpy.wc.WorkingCopy.probe_try. (Jelmer Vernooij)
+
  DEPRECATIONS
 
   * ERR_UNKNOWN_HOSTNAME and ERR_EAI_NONAME are deprecated
index 925ba84849d858cc641e3e0f4c6ba32a25c0ae3d..760b2a73636d6422803e6470a610411f9cd120c9 100644 (file)
@@ -238,3 +238,11 @@ class AdmTests(SubversionTestCase):
         self.assertEquals("bar", bar.name)
         self.assertEquals(NODE_FILE, bar.kind)
         self.assertEquals(wc.SCHEDULE_ADD, bar.schedule)
+
+    def test_probe_try(self):
+        repos_url = self.make_client("repos", "checkout")
+        self.build_tree({"checkout/bar": "la"})
+        self.client_add('checkout/bar')
+        adm = wc.WorkingCopy(None, "checkout", True)
+        self.assertIs(None, adm.probe_try(self.test_dir))
+        self.assertEquals("checkout", adm.probe_try(os.path.join("checkout", "bar")).access_path())
index d82ce0275638ead0d198cddf6ef7f9bbf302f028..882e2ebbec93996c5fe12c29aac25f9f2e4e7608 100644 (file)
@@ -1090,10 +1090,12 @@ static PyObject *adm_repr(PyObject *self)
 {
        AdmObject *admobj = (AdmObject *)self;
 
-       ADM_CHECK_CLOSED(admobj);
-
-       return PyString_FromFormat("<wc.WorkingCopy at '%s'>", 
-                                                          svn_wc_adm_access_path(admobj->adm));
+       if (admobj->adm == NULL) {
+               return PyString_FromFormat("<wc.WorkingCopy (closed) at 0x%p>", admobj);
+       } else {
+               return PyString_FromFormat("<wc.WorkingCopy at '%s'>", 
+                                                                  svn_wc_adm_access_path(admobj->adm));
+       }
 }
 
 static PyObject *adm_remove_lock(PyObject *self, PyObject *args)
@@ -1648,8 +1650,6 @@ static PyObject *retrieve(PyObject *self, PyObject *args)
        return (PyObject *)ret;
 }
 
-
-
 static PyObject *probe_retrieve(PyObject *self, PyObject *args)
 {
        char *path;
@@ -1679,6 +1679,44 @@ static PyObject *probe_retrieve(PyObject *self, PyObject *args)
        return (PyObject *)ret;
 }
 
+static PyObject *probe_try(PyObject *self, PyObject *args)
+{
+       char *path;
+       svn_wc_adm_access_t *result = NULL;
+       AdmObject *admobj = (AdmObject *)self, *ret;
+       apr_pool_t *pool;
+       PyObject *cancelfunc = Py_None;
+       int levels_to_lock = -1;
+       svn_boolean_t writelock = FALSE;
+
+       if (!PyArg_ParseTuple(args, "s|biO", &path, &writelock, &levels_to_lock, &cancelfunc))
+               return NULL;
+
+       ADM_CHECK_CLOSED(admobj);
+
+       pool = Pool(NULL);
+       if (pool == NULL)
+               return NULL;
+
+       RUN_SVN_WITH_POOL(pool, svn_wc_adm_probe_try3(&result, admobj->adm, 
+               svn_path_canonicalize(path, pool), writelock, levels_to_lock,
+               py_cancel_func, cancelfunc, pool));
+
+       if (result == NULL) {
+               apr_pool_destroy(pool);
+               Py_RETURN_NONE;
+       }
+
+       ret = PyObject_New(AdmObject, &Adm_Type);
+       if (ret == NULL)
+               return NULL;
+
+       ret->pool = pool;
+       ret->adm = result;
+
+       return (PyObject *)ret;
+}
+
 static PyMethodDef adm_methods[] = { 
        { "prop_set", adm_prop_set, METH_VARARGS, "S.prop_set(name, value, path, skip_checks=False)" },
        { "access_path", (PyCFunction)adm_access_path, METH_NOARGS, 
@@ -1734,6 +1772,8 @@ static PyMethodDef adm_methods[] = {
                "S.probe_retrieve(path) -> WorkingCopy" },
        { "retrieve", (PyCFunction)retrieve, METH_VARARGS,
                "S.retrieve(path) -> WorkingCopy" },
+       { "probe_try", (PyCFunction)probe_try, METH_VARARGS,
+               "S.probe_try(path, write_lock=False, levels_to_lock=-1)" },
        { NULL, }
 };
 
@@ -1762,7 +1802,7 @@ static PyTypeObject Adm_Type = {
        
        NULL, /*        hashfunc tp_hash;       */
        NULL, /*        ternaryfunc tp_call;    */
-       NULL, /*        reprfunc tp_str;        */
+       adm_repr, /*    reprfunc tp_repr;       */
        NULL, /*        getattrofunc tp_getattro;       */
        NULL, /*        setattrofunc tp_setattro;       */