diff options
author | V3n3RiX <venerix@redcorelinux.org> | 2018-07-14 21:03:06 +0100 |
---|---|---|
committer | V3n3RiX <venerix@redcorelinux.org> | 2018-07-14 21:03:06 +0100 |
commit | 8376ef56580626e9c0f796d5b85b53a0a1c7d5f5 (patch) | |
tree | 7681bbd4e8b05407772df40a4bf04cbbc8afc3fa /dev-vcs/rapidsvn | |
parent | 30a9caf154332f12ca60756e1b75d2f0e3e1822d (diff) |
gentoo resync : 14.07.2018
Diffstat (limited to 'dev-vcs/rapidsvn')
-rw-r--r-- | dev-vcs/rapidsvn/Manifest | 8 | ||||
-rw-r--r-- | dev-vcs/rapidsvn/files/rapidsvn-0.12.1-locale.patch | 23 | ||||
-rw-r--r-- | dev-vcs/rapidsvn/files/rapidsvn-0.12.1-subversion1.9-private-api.patch | 129 | ||||
-rw-r--r-- | dev-vcs/rapidsvn/files/rapidsvn-0.12.1-svncpp_link.patch | 12 | ||||
-rw-r--r-- | dev-vcs/rapidsvn/files/rapidsvn-0.12.1-wx3.0.patch | 192 | ||||
-rw-r--r-- | dev-vcs/rapidsvn/metadata.xml | 10 | ||||
-rw-r--r-- | dev-vcs/rapidsvn/rapidsvn-0.12.1-r3.ebuild | 113 |
7 files changed, 487 insertions, 0 deletions
diff --git a/dev-vcs/rapidsvn/Manifest b/dev-vcs/rapidsvn/Manifest new file mode 100644 index 000000000000..b2538377aaa1 --- /dev/null +++ b/dev-vcs/rapidsvn/Manifest @@ -0,0 +1,8 @@ +AUX rapidsvn-0.12.1-locale.patch 834 BLAKE2B e8080c657627597050b3c0061a465d863526c10338855945578aa578f9c694d57d152870184cbc354d066796a9d21c4202500204cf20f1cf1b86aabe7c2388b5 SHA512 0901b3242edffb128152b9db9982ad446098cc1f21a3b9e41aa8db3217353e8e691091637e609ddf32f23cedbc9007856d900eb53152d34010b1f1b01afbf508 +AUX rapidsvn-0.12.1-subversion1.9-private-api.patch 3602 BLAKE2B 7c49f7e5e92c2d81c9a9a050535d51714fce09b8c8275b1535239bb62978c0191a50b2fb6f0df369cf5714b29ce358589e070bd53d12e8391b089416fe1b96e1 SHA512 90f4f16cfb44d0d7291fdd340be8ca2a86f6fa33353a8af4503abb35e9d91219b9f60319b62f1bbffffde1f6251754b68c120b9fe27939c90543b09955dfac8b +AUX rapidsvn-0.12.1-svncpp_link.patch 336 BLAKE2B b3db001ce73052c733934298b6e04313b08d5a85f86457ddffb782ffcdfdc85a7db26ba9d3f1d9103b085e4db24912267367f16b167744a47693b0225d99b890 SHA512 abcce45777c2c28b08df772ea69305600b0ee18dbb4cc7aa1bc13ec81c962410a2f9fe8685428115e3c9547e5bf21d2323f2712e6566100e7cbfe2271a95efd4 +AUX rapidsvn-0.12.1-wx3.0.patch 5121 BLAKE2B 85dc9f1ca63d38660c4fe8106d642b818a1aeb4888e14daf3f572fa4e0d97389f18e96e6937474de68675de9592b04f62003074ddfcdf7a774be9a41722f40f4 SHA512 90719ee6f3b7cc9f3446afcca1f5ba27496cb3f1bd8311328b4bc01a02f81de769691825f5cba906183fd060a89a118c776a7cf549569505f0a18c12eb6fc6b9 +DIST rapidsvn-0.12.1.tar.gz 1087511 BLAKE2B c3e32766baab520d4de31387915b79b9199557f01269128853e366c2d75d28727bd220770c2683d78969cc1919c43089d4c2b1b81ca893a0028de4d0b9deb427 SHA512 892dab56e8ec19c5f26a0ddfab378187bc0325275f9fcf759c12beead70aab17876f7e5920bcf214fc86354faef58244ce25926ba010158f7354cd144e1c4c07 +DIST svncpp.dox.xz 1684 BLAKE2B 64725edae989b09b38fa3fff04aa0908356b67ffa8ab50abddf42f2562ccdaa80c9599f5c6790d8b1f2c17d707c227ee6dd8e114e8527362b628463690db17f9 SHA512 6314632b2f6a0f21bdd4644f856c8d60951c30135a82e509a7f929908dacb56462a2fa768c2e45cd7baf99face50fa5d4592a0691cfa1f16335bf64892933589 +EBUILD rapidsvn-0.12.1-r3.ebuild 2648 BLAKE2B 004dfbfe503d58751f5c6aa73810de34958f895a0ae442cf81551d143c958c7fce58d3f734b8d92d74241a461c47b81f1bcdfe5d9e9e60de705658ff60966ef1 SHA512 0d062ca454d71b7cb5c8c78dd9b76f41ba6d26760a64257704627ba86df9218b71f03e21b6607cc229d0f709ed693ea51dbd9c4060e95666046c9c07523139fb +MISC metadata.xml 389 BLAKE2B 1cb8d2d932e9fed848d341ff6b4f3a43d29ffb2f4465f3ce231344e8a62ab8d3b165bb849fc569d9936c0b8a4ffc0adc975cd3e1ab7eba27c3dfd73748945f5c SHA512 4f5598218e1d473e47a831b414cfe40edb305a903ff5a021b587ebf3687c5f2e2d775ccbbb4db04ff5d67c1533b59952c59652f9e783e6b16812e4afa0611042 diff --git a/dev-vcs/rapidsvn/files/rapidsvn-0.12.1-locale.patch b/dev-vcs/rapidsvn/files/rapidsvn-0.12.1-locale.patch new file mode 100644 index 000000000000..e1712df85b19 --- /dev/null +++ b/dev-vcs/rapidsvn/files/rapidsvn-0.12.1-locale.patch @@ -0,0 +1,23 @@ +--- rapidsvn-0.12.0dfsg.orig/src/locale/Makefile.in ++++ rapidsvn-0.12.0dfsg/src/locale/Makefile.in +@@ -369,8 +369,7 @@ all: all-mo + distclean: clean + clean: + for i in $(RAPIDSVN_LANGUAGES) ; do \ +- test -f $(srcdir)/$$i/rapidsvn.mo && rm $(srcdir)/$$i/rapidsvn.mo ; \ +- fi ; \ ++ test -f $(srcdir)/$$i/rapidsvn.mo && rm $(srcdir)/$$i/rapidsvn.mo || true; \ + done + .PHONY: all-mo + # Tell versions [3.59,3.63) of GNU make to not export all variables. +--- rapidsvn-0.12.0dfsg.orig/src/locale/Makefile.am ++++ rapidsvn-0.12.0dfsg/src/locale/Makefile.am +@@ -38,7 +38,6 @@ all: all-mo + distclean: clean + clean: + for i in $(RAPIDSVN_LANGUAGES) ; do \ +- test -f $(srcdir)/$$i/rapidsvn.mo && rm $(srcdir)/$$i/rapidsvn.mo ; \ +- fi ; \ ++ test -f $(srcdir)/$$i/rapidsvn.mo && rm $(srcdir)/$$i/rapidsvn.mo || true; \ + done + .PHONY: all-mo diff --git a/dev-vcs/rapidsvn/files/rapidsvn-0.12.1-subversion1.9-private-api.patch b/dev-vcs/rapidsvn/files/rapidsvn-0.12.1-subversion1.9-private-api.patch new file mode 100644 index 000000000000..7c84c8d481fd --- /dev/null +++ b/dev-vcs/rapidsvn/files/rapidsvn-0.12.1-subversion1.9-private-api.patch @@ -0,0 +1,129 @@ +Fix compile errors due to hiding of private API in subversion 1.9. +See also: + https://bugs.gentoo.org/show_bug.cgi?id=558572 + https://slackbuilds.org/cgit/slackbuilds/commit/?id=c2df77021b476ca9484772361003df04fa03038a + https://github.com/RapidSVN/RapidSVN/issues/6 + +--- rapidsvn-0.12.1/src/svncpp/client_ls.cpp ++++ rapidsvn-0.12.1/src/svncpp/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 "svncpp/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 @@ + } + } + ++#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") +--- rapidsvn-0.12.1/include/svncpp/dirent.hpp ++++ rapidsvn-0.12.1/include/svncpp/dirent.hpp +@@ -41,7 +41,7 @@ + /** + * 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 +--- rapidsvn-0.12.1/src/svncpp/dirent.cpp ++++ rapidsvn-0.12.1/src/svncpp/dirent.cpp +@@ -47,7 +47,7 @@ + { + } + +- 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 @@ + { + } + +- 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/dev-vcs/rapidsvn/files/rapidsvn-0.12.1-svncpp_link.patch b/dev-vcs/rapidsvn/files/rapidsvn-0.12.1-svncpp_link.patch new file mode 100644 index 000000000000..e26ecda15d9b --- /dev/null +++ b/dev-vcs/rapidsvn/files/rapidsvn-0.12.1-svncpp_link.patch @@ -0,0 +1,12 @@ +Index: src/svncpp/Makefile.am +=================================================================== +--- rapidsvn-0.12.1/src/svncpp/Makefile.am (revision 7100) ++++ rapidsvn-0.12.1/src/svncpp/Makefile.am (working copy) +@@ -27,3 +27,7 @@ + url.cpp \ + wc.cpp + ++libsvncpp_la_LIBADD= $(SVN_LIBS) \ ++ $(NEON_LIBS) \ ++ $(APR_LIBS) \ ++ -lstdc++ diff --git a/dev-vcs/rapidsvn/files/rapidsvn-0.12.1-wx3.0.patch b/dev-vcs/rapidsvn/files/rapidsvn-0.12.1-wx3.0.patch new file mode 100644 index 000000000000..2862e30b21fd --- /dev/null +++ b/dev-vcs/rapidsvn/files/rapidsvn-0.12.1-wx3.0.patch @@ -0,0 +1,192 @@ +Description: Update for wx 3.0.0 + Update configure to recognise that wx 3.0.0 >= 2.4.2. + Fix code for wx API changes. +Author: Olly Betts <olly@survex.com> +Origin: debian +Forwarded: no +Last-Update: 2014-04-10 + +--- a/configure.ac ++++ b/configure.ac +@@ -171,6 +171,8 @@ + ;; + [2.[5-9].*]) + ;; ++ 3.*) ++ ;; + *) + AC_MSG_ERROR([wxWidgets >= 2.4.2 required, found version $WX_VERSION]) + AC_MSG_ERROR([Try --with-wx-config.]) +--- a/src/filelist_ctrl.cpp ++++ b/src/filelist_ctrl.cpp +@@ -1029,7 +1029,7 @@ + + // Workaround for issue 324 (only local+non-flat+update): + // we chdir to the requested dir and pass "." to svn +- if (!pathUtf8.isUrl() && m->WithUpdate && !m->FlatMode) ++ if (!pathUtf8.isUrl() && m->WithUpdate && !m->FlatMode && !m->Path.empty()) + { + m->IsRelative = true; + ::wxSetWorkingDirectory(m->Path); +@@ -1606,7 +1606,7 @@ + } + } + +-inline void ++bool + FileListCtrl::SetColumnWidth(const int col, const int width) + { + m->ColumnWidth[col] = width; +@@ -1614,8 +1614,9 @@ + int index = m->ColumnIndex[col]; + if (index != -1) + { +- wxListCtrl::SetColumnWidth(index, width); ++ return wxListCtrl::SetColumnWidth(index, width); + } ++ return false; + } + + int +--- a/src/filelist_ctrl.hpp ++++ b/src/filelist_ctrl.hpp +@@ -118,7 +118,7 @@ + * @param col column number + * @param width + */ +- void ++ bool + SetColumnWidth(const int col, const int width); + + /** +--- a/src/hist_val.cpp ++++ b/src/hist_val.cpp +@@ -113,7 +113,7 @@ + } + + // if we have an entry, select it +- if (!comboBox->IsEmpty()) ++ if (!comboBox->IsListEmpty()) + comboBox->SetSelection(0, 0); + } + +--- a/src/listener.cpp ++++ b/src/listener.cpp +@@ -167,7 +167,7 @@ + wxMutexLocker lock(mutex); + wxString localCertFile = wxFileSelector( + _("Select Certificate File"), wxT(""), wxT(""), wxT(""), +- wxT("*.*"), wxOPEN | wxFILE_MUST_EXIST, parent); ++ wxT("*.*"), wxFD_OPEN | wxFD_FILE_MUST_EXIST, parent); + LocalToUtf8(localCertFile, certFile); + + dataReceived = !localCertFile.empty(); +--- a/src/log_dlg.cpp ++++ b/src/log_dlg.cpp +@@ -211,7 +211,7 @@ + + for (size_t idx = 0; idx < str.Length(); idx++) + { +- switch (str[idx]) ++ switch ((wchar_t)str[idx]) + { + case wxT('\r'): + case wxT('\n'): +--- a/src/preferences_dlg.cpp ++++ b/src/preferences_dlg.cpp +@@ -126,7 +126,7 @@ + PreferencesDlg::SelectExecutable(const wxString & title, wxTextCtrl * textCtrl) + { + wxFileDialog dlg(this, title, wxEmptyString, wxEmptyString, +- EXECUTABLE_WILDCARD, wxOPEN); ++ EXECUTABLE_WILDCARD, wxFD_OPEN); + dlg.SetPath(textCtrl->GetValue()); + + if (dlg.ShowModal() != wxID_OK) +--- a/src/verblist.cpp ++++ b/src/verblist.cpp +@@ -71,7 +71,7 @@ + const wxString & + VerbList::GetName(size_t /*index*/) const + { +- return wxT(""); ++ return wxEmptyString; + } + + +--- a/src/checkout_action.cpp ++++ b/src/checkout_action.cpp +@@ -120,7 +120,8 @@ + pegRevision = svn::Revision(revnum); + } + +- wxSetWorkingDirectory(m_data.DestFolder); ++ if (!m_data.DestFolder.empty()) ++ wxSetWorkingDirectory(m_data.DestFolder); + + svn::Path repUrlUtf8(PathUtf8(m_data.RepUrl)); + svn::Path destFolderUtf8(PathUtf8(dest_folder)); +--- a/src/action.cpp ++++ b/src/action.cpp +@@ -218,7 +218,9 @@ + bool + Action::Prepare() + { +- wxSetWorkingDirectory(Utf8ToLocal(m->path.c_str())); ++ const wxString & dir = Utf8ToLocal(m->path.c_str()); ++ if (!dir.empty()) ++ wxSetWorkingDirectory(dir); + + return true; + } +--- a/src/cleanup_action.cpp ++++ b/src/cleanup_action.cpp +@@ -52,7 +52,9 @@ + svn::Client client(GetContext()); + const svn::Path & path = GetPath(); + +- wxSetWorkingDirectory(Utf8ToLocal(path.c_str())); ++ const wxString & dir = Utf8ToLocal(path.c_str()); ++ if (!dir.empty()) ++ wxSetWorkingDirectory(dir); + client.cleanup(path.c_str()); + + return true; +--- a/src/export_action.cpp ++++ b/src/export_action.cpp +@@ -111,7 +111,8 @@ + pegRevision = svn::Revision(revnum); + } + +- wxSetWorkingDirectory(m_data.DestPath); ++ if (!m_data.DestPath.empty()) ++ wxSetWorkingDirectory(m_data.DestPath); + + svn::Path srcPathUtf8(PathUtf8(m_data.SrcPath)); + svn::Path destPathUtf8(PathUtf8(m_data.DestPath)); +--- a/src/get_action.cpp ++++ b/src/get_action.cpp +@@ -56,7 +56,9 @@ + m_data.revision.revnum()); + Trace(msg); + +- wxSetWorkingDirectory(Utf8ToLocal(GetPath().c_str())); ++ const wxString & dir = Utf8ToLocal(GetPath().c_str()); ++ if (!dir.empty()) ++ wxSetWorkingDirectory(dir); + client.update(svn::Path(LocalToUtf8(m_data.path)), + m_data.revision, + true, false); +--- a/src/update_action.cpp ++++ b/src/update_action.cpp +@@ -75,7 +75,9 @@ + } + } + +- wxSetWorkingDirectory(Utf8ToLocal(GetPath().c_str())); ++ const wxString & dir = Utf8ToLocal(GetPath().c_str()); ++ if (!dir.empty()) ++ wxSetWorkingDirectory(dir); + svn::Client client(GetContext()); + + client.update(GetTargets(), revision, m_data.recursive, diff --git a/dev-vcs/rapidsvn/metadata.xml b/dev-vcs/rapidsvn/metadata.xml new file mode 100644 index 000000000000..0302c7d43632 --- /dev/null +++ b/dev-vcs/rapidsvn/metadata.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> + <!-- maintainer-needed --> + <longdescription> +RapidSVN is a cross-platform GUI front-end for the Subversion revision +system written in C++ using the wxWidgets framework. This project also +includes a Subversion client C++ API. +</longdescription> +</pkgmetadata> diff --git a/dev-vcs/rapidsvn/rapidsvn-0.12.1-r3.ebuild b/dev-vcs/rapidsvn/rapidsvn-0.12.1-r3.ebuild new file mode 100644 index 000000000000..b9d42abac214 --- /dev/null +++ b/dev-vcs/rapidsvn/rapidsvn-0.12.1-r3.ebuild @@ -0,0 +1,113 @@ +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=5 + +PYTHON_COMPAT=( python2_7 ) + +WX_GTK_VER=3.0 + +inherit autotools eutils fdo-mime flag-o-matic python-single-r1 versionator wxwidgets + +MY_PV=$(get_version_component_range 1-2) +MY_REL="1" + +DESCRIPTION="Cross-platform GUI front-end for the Subversion revision system" +HOMEPAGE="http://rapidsvn.tigris.org/" +SRC_URI=" + http://www.rapidsvn.org/download/release/${PV}/${P}.tar.gz + doc? ( https://dev.gentoo.org/~jlec/distfiles/svncpp.dox.xz )" + +LICENSE="GPL-2 LGPL-2.1 FDL-1.2" +SLOT="0" +KEYWORDS="amd64 arm ppc ~ppc64 x86 ~amd64-linux ~x86-linux" +IUSE="doc static-libs" + +REQUIRED_USE="${PYTHON_REQUIRED_USE}" + +COMMON_DEP=" + ${PYTHON_DEPS} + dev-libs/apr + dev-libs/apr-util + dev-vcs/subversion + x11-libs/wxGTK:${WX_GTK_VER}[X]" +DEPEND="${COMMON_DEP} + doc? ( + dev-libs/libxslt + app-text/docbook-sgml-utils + app-doc/doxygen + app-text/docbook-xsl-stylesheets + media-gfx/graphviz + )" +RDEPEND="${COMMON_DEP}" + +DOCS=( HACKING.txt TRANSLATIONS ) + +src_prepare() { + need-wxwidgets unicode + if use doc; then + mv "${WORKDIR}"/svncpp.dox doc/svncpp/ || die + fi + strip-linguas $(grep ^RAPIDSVN_LANGUAGES src/locale/Makefile.am | sed 's:RAPIDSVN_LANGUAGES=::g') + sed \ + -e "/^RAPIDSVN_LANGUAGES/s:=.*:=${LINGUAS}:g" \ + -i src/locale/Makefile.am || die + + mv configure.in configure.ac || die + epatch "${FILESDIR}/${P}-svncpp_link.patch" + epatch "${FILESDIR}/${P}-locale.patch" + epatch "${FILESDIR}/${P}-wx3.0.patch" + epatch "${FILESDIR}/${P}-subversion1.9-private-api.patch" + + eautoreconf +} + +src_configure() { + append-cppflags $( apr-1-config --cppflags ) + econf \ + $(use_enable static-libs static) \ + $(use_with doc manpage) \ + $(use_with doc xsltproc) \ + $(use_with doc doxygen) \ + $(use_with doc dot) \ + --with-wx-config="${WX_CONFIG}" \ + --with-svn-lib="${EPREFIX}/usr/$(get_libdir)" \ + --with-svn-include="${EPREFIX}/usr/include" \ + --with-apr-config="${EPREFIX}/usr/bin/apr-1-config" \ + --with-apu-config="${EPREFIX}/usr/bin/apu-1-config" +} + +src_compile() { + default + use doc && emake -C doc/manpage manpage +} + +src_install() { + default + + doicon src/res/rapidsvn.ico src/res/bitmaps/${PN}*.png + make_desktop_entry rapidsvn "RapidSVN ${PV}" \ + "${EPREFIX}/usr/share/pixmaps/rapidsvn_32x32.png" \ + "RevisionControl;Development" + + if use doc ; then + doman doc/manpage/${PN}.1 + dodoc doc/svncpp/html/* + fi + + prune_libtool_files +} + +src_test() { + pushd src/tests/svncpp > /dev/null || die + default + ./svncpptest | grep OK || die +} + +pkg_postinst() { + fdo-mime_desktop_database_update +} + +pkg_postrm() { + fdo-mime_desktop_database_update +} |