~jelmer/subvertpy/unstable

« back to all changes in this revision

Viewing changes to subvertpy/_ra.c

  • Committer: Jelmer Vernooij
  • Date: 2011-10-26 03:07:30 UTC
  • mfrom: (1940.9.173)
  • Revision ID: jelmer@debian.org-20111026030730-8omgd8zi7y7zh0e8
New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
396
396
        if (delta_baton != NULL && delta_handler != NULL) {
397
397
                *delta_baton = (void *)ret;
398
398
                *delta_handler = py_txdelta_window_handler;
 
399
        } else {
 
400
                Py_DECREF(ret);
399
401
        }
400
402
        PyGILState_Release(state);
401
403
        return NULL;
416
418
        if (delta_baton != NULL && delta_handler != NULL) {
417
419
                *delta_baton = (void *)ret;
418
420
                *delta_handler = py_txdelta_window_handler;
 
421
        } else {
 
422
                Py_DECREF(ret);
419
423
        }
420
424
        PyGILState_Release(state);
421
425
        return NULL;
527
531
                Py_DECREF(ret);
528
532
        } else if (PyFile_Check(ret)) {
529
533
                *fp = apr_file_from_object(ret, pool);
 
534
                Py_DECREF(ret);
530
535
                if (!*fp) {
531
 
                        Py_DECREF(ret);
532
536
                        PyGILState_Release(state);
533
537
                        return py_svn_error();
534
538
                }
1265
1269
        if (hash_revprops == NULL) {
1266
1270
                apr_pool_destroy(pool);
1267
1271
                ra->busy = false;
 
1272
                Py_DECREF(commit_callback);
1268
1273
                return NULL;
1269
1274
        }
1270
1275
        Py_BEGIN_ALLOW_THREADS
1277
1282
        if (PyDict_Size(revprops) != 1) {
1278
1283
                PyErr_SetString(PyExc_ValueError, "Only svn:log can be set with Subversion 1.4");
1279
1284
                apr_pool_destroy(pool);
 
1285
                Py_DECREF(commit_callback);
1280
1286
                ra->busy = false;
1281
1287
                return NULL;
1282
1288
        }
1285
1291
        if (py_log_msg == NULL) {
1286
1292
                PyErr_SetString(PyExc_ValueError, "Only svn:log can be set with Subversion 1.4.");
1287
1293
                apr_pool_destroy(pool);
 
1294
                Py_DECREF(commit_callback);
1288
1295
                ra->busy = false;
1289
1296
                return NULL;
1290
1297
        }
1292
1299
        if (!PyString_Check(py_log_msg)) {
1293
1300
                PyErr_SetString(PyExc_ValueError, "svn:log property should be set to string.");
1294
1301
                apr_pool_destroy(pool);
 
1302
                Py_DECREF(commit_callback);
1295
1303
                ra->busy = false;
1296
1304
                return NULL;
1297
1305
        }
1307
1315
        if (err != NULL) {
1308
1316
                handle_svn_error(err);
1309
1317
                svn_error_clear(err);
 
1318
                Py_DECREF(commit_callback);
1310
1319
                apr_pool_destroy(pool);
1311
1320
                ra->busy = false;
1312
1321
                return NULL;
1387
1396
                Py_INCREF(py_dirents);
1388
1397
        } else {
1389
1398
                py_dirents = PyDict_New();
 
1399
                if (py_dirents == NULL) {
 
1400
                        apr_pool_destroy(temp_pool);
 
1401
                        return NULL;
 
1402
                }
1390
1403
                idx = apr_hash_first(temp_pool, dirents);
1391
1404
                while (idx != NULL) {
1392
 
                        PyObject *item;
 
1405
                        PyObject *item, *pykey;
1393
1406
                        apr_hash_this(idx, (const void **)&key, &klen, (void **)&dirent);
1394
1407
                        item = py_dirent(dirent, dirent_fields);
1395
1408
                        if (item == NULL) {
1396
 
                                Py_DECREF(py_dirents);
1397
 
                                return NULL;
1398
 
                        }
1399
 
                        PyDict_SetItemString(py_dirents, key, item);
 
1409
                                apr_pool_destroy(temp_pool);
 
1410
                                Py_DECREF(py_dirents);
 
1411
                                return NULL;
 
1412
                        }
 
1413
                        if (key == NULL) {
 
1414
                                pykey = Py_None;
 
1415
                                Py_INCREF(pykey);
 
1416
                        } else {
 
1417
                                pykey = PyString_FromString((char *)key);
 
1418
                        }
 
1419
                        if (PyDict_SetItem(py_dirents, pykey, item) != 0) {
 
1420
                                Py_DECREF(py_dirents);
 
1421
                                Py_DECREF(item);
 
1422
                                Py_DECREF(pykey);
 
1423
                                apr_pool_destroy(temp_pool);
 
1424
                                return NULL;
 
1425
                        }
 
1426
                        Py_DECREF(pykey);
1400
1427
                        Py_DECREF(item);
1401
1428
                        idx = apr_hash_next(idx);
1402
1429
                }
1404
1431
 
1405
1432
        py_props = prop_hash_to_dict(props);
1406
1433
        if (py_props == NULL) {
 
1434
                Py_DECREF(py_dirents);
1407
1435
                apr_pool_destroy(temp_pool);
1408
1436
                return NULL;
1409
1437
        }
1656
1684
        RUN_RA_WITH_POOL(temp_pool, ra, svn_ra_get_locks(ra->ra, &hash_locks, path, temp_pool));
1657
1685
 
1658
1686
        ret = PyDict_New();
 
1687
        if (ret == NULL) {
 
1688
                apr_pool_destroy(temp_pool);
 
1689
                return NULL;
 
1690
        }
1659
1691
        for (idx = apr_hash_first(temp_pool, hash_locks); idx != NULL;
1660
1692
                 idx = apr_hash_next(idx)) {
1661
1693
                PyObject *pyval;
1662
1694
                apr_hash_this(idx, (const void **)&key, &klen, (void **)&lock);
1663
1695
                pyval = pyify_lock(lock);
1664
1696
                if (pyval == NULL) {
1665
 
                        apr_pool_destroy(temp_pool);
1666
 
                        return NULL;
1667
 
                }
1668
 
                PyDict_SetItemString(ret, key, pyval);
 
1697
                        Py_DECREF(ret);
 
1698
                        apr_pool_destroy(temp_pool);
 
1699
                        return NULL;
 
1700
                }
 
1701
                if (PyDict_SetItemString(ret, key, pyval) != 0) {
 
1702
                        apr_pool_destroy(temp_pool);
 
1703
                        Py_DECREF(pyval);
 
1704
                        Py_DECREF(ret);
 
1705
                        return NULL;
 
1706
                }
1669
1707
                Py_DECREF(pyval);
1670
1708
        }
1671
1709
 
1706
1744
                                        temp_pool));
1707
1745
        ret = PyDict_New();
1708
1746
        if (ret == NULL) {
1709
 
                PyErr_NoMemory();
1710
1747
                apr_pool_destroy(temp_pool);
1711
1748
                return NULL;
1712
1749
        }
1713
1750
 
1714
 
        for (idx = apr_hash_first(temp_pool, hash_locations); idx != NULL; 
 
1751
        for (idx = apr_hash_first(temp_pool, hash_locations); idx != NULL;
1715
1752
                idx = apr_hash_next(idx)) {
1716
1753
                apr_hash_this(idx, (const void **)&key, &klen, (void **)&val);
1717
 
                PyDict_SetItem(ret, PyInt_FromLong(*key), PyString_FromString(val));
 
1754
                if (PyDict_SetItem(ret, PyInt_FromLong(*key), PyString_FromString(val)) != 0) {
 
1755
                        Py_DECREF(ret);
 
1756
                        apr_pool_destroy(temp_pool);
 
1757
                        return NULL;
 
1758
                }
1718
1759
        }
1719
1760
        apr_pool_destroy(temp_pool);
1720
1761
        return ret;
1732
1773
        int i;
1733
1774
 
1734
1775
        ret = PyList_New(rangelist->nelts);
 
1776
        if (ret == NULL)
 
1777
                return NULL;
1735
1778
 
1736
1779
        for (i = 0; i < rangelist->nelts; i++) {
1737
 
                PyObject *pyval = range_to_tuple(APR_ARRAY_IDX(rangelist, i, svn_merge_range_t *));
1738
 
                if (pyval == NULL)
1739
 
                        return NULL;
1740
 
                PyList_SetItem(ret, i, pyval);
 
1780
                PyObject *pyval;
 
1781
                pyval = range_to_tuple(APR_ARRAY_IDX(rangelist, i, svn_merge_range_t *));
 
1782
                if (pyval == NULL) {
 
1783
                        Py_DECREF(ret);
 
1784
                        return NULL;
 
1785
                }
 
1786
                if (PyList_SetItem(ret, i, pyval) != 0) {
 
1787
                        Py_DECREF(ret);
 
1788
                        Py_DECREF(pyval);
 
1789
                        return NULL;
 
1790
                }
1741
1791
        }
 
1792
 
1742
1793
        return ret;
1743
1794
}
1744
1795
 
1745
1796
static PyObject *mergeinfo_to_dict(svn_mergeinfo_t mergeinfo, apr_pool_t *temp_pool)
1746
1797
{
1747
 
        PyObject *ret = PyDict_New();
 
1798
        PyObject *ret;
1748
1799
        char *key;
1749
1800
        apr_ssize_t klen;
1750
1801
        apr_hash_index_t *idx;
1751
1802
        apr_array_header_t *range;
1752
1803
 
 
1804
        ret = PyDict_New();
 
1805
        if (ret == NULL) {
 
1806
                return NULL;
 
1807
        }
 
1808
 
1753
1809
        for (idx = apr_hash_first(temp_pool, mergeinfo); idx != NULL; 
1754
1810
                idx = apr_hash_next(idx)) {
1755
1811
                PyObject *pyval;
1756
1812
                apr_hash_this(idx, (const void **)&key, &klen, (void **)&range);
1757
1813
                pyval = merge_rangelist_to_list(range);
1758
 
                if (pyval == NULL)
1759
 
                        return NULL;
1760
 
                PyDict_SetItemString(ret, key, pyval);
 
1814
                if (pyval == NULL) {
 
1815
                        Py_DECREF(ret);
 
1816
                        return NULL;
 
1817
                }
 
1818
                if (PyDict_SetItemString(ret, key, pyval) != 0) {
 
1819
                        Py_DECREF(ret);
 
1820
                        Py_DECREF(pyval);
 
1821
                        return NULL;
 
1822
                }
1761
1823
                Py_DECREF(pyval);
1762
1824
        }
1763
1825
 
1800
1862
                     temp_pool));
1801
1863
 
1802
1864
        ret = PyDict_New();
 
1865
        if (ret == NULL) {
 
1866
                apr_pool_destroy(temp_pool);
 
1867
                return NULL;
 
1868
        }
1803
1869
 
1804
1870
        if (catalog != NULL) {
1805
1871
                for (idx = apr_hash_first(temp_pool, catalog); idx != NULL; 
1809
1875
                        pyval = mergeinfo_to_dict(val, temp_pool);
1810
1876
                        if (pyval == NULL) {
1811
1877
                                apr_pool_destroy(temp_pool);
1812
 
                                return NULL;
1813
 
                        }
1814
 
                        PyDict_SetItemString(ret, key, pyval);
 
1878
                                Py_DECREF(ret);
 
1879
                                return NULL;
 
1880
                        }
 
1881
                        if (PyDict_SetItemString(ret, key, pyval) != 0) {
 
1882
                                apr_pool_destroy(temp_pool);
 
1883
                                Py_DECREF(pyval);
 
1884
                                Py_DECREF(ret);
 
1885
                                return NULL;
 
1886
                        }
 
1887
 
1815
1888
                        Py_DECREF(pyval);
1816
1889
                }
1817
1890
        }
2834
2907
        if (auth == NULL)
2835
2908
                return NULL;
2836
2909
        auth->pool = Pool(NULL);
2837
 
        if (auth->pool == NULL)
 
2910
        if (auth->pool == NULL) {
 
2911
                PyObject_Del(auth);
2838
2912
                return NULL;
 
2913
        }
2839
2914
        svn_auth_get_username_provider(&auth->provider, auth->pool);
2840
2915
        return (PyObject *)auth;
2841
2916
}
2859
2934
                        return py_svn_error();
2860
2935
                }
2861
2936
                *may_save_plaintext = PyObject_IsTrue(ret);
 
2937
                Py_DECREF(ret);
2862
2938
                PyGILState_Release(state);
2863
2939
        }
2864
2940
 
3027
3103
        const char *provider_types[] = {
3028
3104
                "simple", "ssl_client_cert_pw", "ssl_server_trust", NULL,
3029
3105
        };
3030
 
        PyObject *pylist = PyList_New(0);
 
3106
        PyObject *pylist;
3031
3107
        int i, j;
3032
3108
 
 
3109
        pylist = PyList_New(0);
 
3110
        if (pylist == NULL) {
 
3111
                return NULL;
 
3112
        }
 
3113
 
3033
3114
        for (i = 0; provider_names[i] != NULL; i++) {
3034
3115
                for (j = 0; provider_types[j] != NULL; j++) {
3035
3116
                        svn_auth_provider_object_t *c_provider = NULL;
3067
3148
        PyObject *pylist = PyList_New(0);
3068
3149
        PyObject *provider = NULL;
3069
3150
 
 
3151
        if (pylist == NULL) {
 
3152
                Py_DECREF(pylist);
 
3153
                return NULL;
 
3154
        }
 
3155
 
3070
3156
#if defined(WIN32)
3071
3157
        provider = get_windows_simple_provider(self);
3072
3158
        if (provider == NULL)