1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
From 8117ca137b45816865554d6e86b96d9e633a7e08 Mon Sep 17 00:00:00 2001
From: Alex Merry <alex.merry@kde.org>
Date: Sun, 16 Aug 2015 23:59:35 +0100
Subject: [PATCH] Make subversion plugin compile with subversion 1.9.
The plugin was formerly using private API, which was hidden in 1.9.
REVIEW: 124783
(cherry picked from commit cfb7f8d89e4749c7b07c7880b3065bf8a86be22c)
---
plugins/subversion/kdevsvncpp/client_ls.cpp | 69 +++++++++++++++++++++++++++++
plugins/subversion/kdevsvncpp/dirent.cpp | 4 +-
plugins/subversion/kdevsvncpp/dirent.hpp | 2 +-
3 files changed, 72 insertions(+), 3 deletions(-)
diff --git a/plugins/subversion/kdevsvncpp/client_ls.cpp b/plugins/subversion/kdevsvncpp/client_ls.cpp
index 6cd79bb..95fd6cb 100644
--- plugins/subversion/kdevsvncpp/client_ls.cpp
+++ plugins/subversion/kdevsvncpp/client_ls.cpp
@@ -29,6 +29,7 @@
#include "svn_client.h"
#include "svn_path.h"
#include "svn_sorts.h"
+#include "svn_version.h"
//#include "svn_utf.h"
// svncpp
@@ -37,6 +38,8 @@
#include "kdevsvncpp/exception.hpp"
+#if SVN_VER_MAJOR == 1 && SVN_VER_MINOR < 8
+
static int
compare_items_as_paths(const svn_sort__item_t *a, const svn_sort__item_t *b)
{
@@ -90,6 +93,72 @@ namespace svn
}
}
+#else
+
+#include <algorithm>
+
+static svn_error_t* store_entry(
+ void *baton,
+ const char *path,
+ const svn_dirent_t *dirent,
+ const svn_lock_t *,
+ const char *abs_path,
+ const char *,
+ const char *,
+ apr_pool_t *scratch_pool)
+{
+ svn::DirEntries *entries = reinterpret_cast<svn::DirEntries*>(baton);
+ if (path[0] == '\0') {
+ if (dirent->kind == svn_node_file) {
+ // for compatibility with svn_client_ls behaviour, listing a file
+ // stores that file name
+ entries->push_back(svn::DirEntry(svn_path_basename(abs_path, scratch_pool), dirent));
+ }
+ } else {
+ entries->push_back(svn::DirEntry(path, dirent));
+ }
+ return SVN_NO_ERROR;
+}
+
+static bool sort_by_path(svn::DirEntry const& a, svn::DirEntry const& b)
+{
+ return svn_path_compare_paths(a.name(), b.name()) < 0;
+}
+
+namespace svn
+{
+ DirEntries
+ Client::list(const char * pathOrUrl,
+ svn_opt_revision_t * revision,
+ bool recurse) throw(ClientException)
+ {
+ Pool pool;
+ DirEntries entries;
+
+ svn_error_t * error =
+ svn_client_list3(pathOrUrl,
+ revision,
+ revision,
+ SVN_DEPTH_INFINITY_OR_IMMEDIATES(recurse),
+ SVN_DIRENT_ALL,
+ FALSE, // fetch locks
+ FALSE, // include externals
+ &store_entry,
+ &entries,
+ *m_context,
+ pool);
+
+ if (error != SVN_NO_ERROR)
+ throw ClientException(error);
+
+ std::sort(entries.begin(), entries.end(), &sort_by_path);
+
+ return entries;
+ }
+}
+
+#endif
+
/* -----------------------------------------------------------------
* local variables:
* eval: (load-file "../../rapidsvn-dev.el")
diff --git a/plugins/subversion/kdevsvncpp/dirent.cpp b/plugins/subversion/kdevsvncpp/dirent.cpp
index f911e91..75dd29c 100644
--- plugins/subversion/kdevsvncpp/dirent.cpp
+++ plugins/subversion/kdevsvncpp/dirent.cpp
@@ -47,7 +47,7 @@ public:
{
}
- Data(const char * _name, svn_dirent_t * dirEntry)
+ Data(const char * _name, const svn_dirent_t * dirEntry)
: name(_name), kind(dirEntry->kind), size(dirEntry->size),
hasProps(dirEntry->has_props != 0),
createdRev(dirEntry->created_rev), time(dirEntry->time)
@@ -78,7 +78,7 @@ public:
{
}
- DirEntry::DirEntry(const char * name, svn_dirent_t * DirEntry)
+ DirEntry::DirEntry(const char * name, const svn_dirent_t * DirEntry)
: m(new Data(name, DirEntry))
{
}
diff --git a/plugins/subversion/kdevsvncpp/dirent.hpp b/plugins/subversion/kdevsvncpp/dirent.hpp
index cabef7e..2f0f8d8 100644
--- plugins/subversion/kdevsvncpp/dirent.hpp
+++ plugins/subversion/kdevsvncpp/dirent.hpp
@@ -41,7 +41,7 @@ namespace svn
/**
* constructor for existing @a svn_dirent_t entries
*/
- DirEntry(const char * name, svn_dirent_t * dirEntry);
+ DirEntry(const char * name, const svn_dirent_t * dirEntry);
/**
* copy constructor
--
2.6.1
|