You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by da...@apache.org on 2011/07/28 23:59:01 UTC
svn commit: r1152016 [1/5] - in /subversion/branches/revprop-packing: ./
build/ build/ac-macros/ build/generator/ build/generator/swig/ notes/
subversion/bindings/swig/ subversion/bindings/swig/perl/native/t/
subversion/include/ subversion/include/priv...
Author: danielsh
Date: Thu Jul 28 21:58:49 2011
New Revision: 1152016
URL: http://svn.apache.org/viewvc?rev=1152016&view=rev
Log:
On the revprop-packing branch, sync from trunk.
Added:
subversion/branches/revprop-packing/subversion/libsvn_subr/gpg_agent.c
- copied unchanged from r1151666, subversion/trunk/subversion/libsvn_subr/gpg_agent.c
subversion/branches/revprop-packing/tools/client-side/detach.py
- copied unchanged from r1151666, subversion/trunk/tools/client-side/detach.py
subversion/branches/revprop-packing/tools/dist/gnupg.py
- copied unchanged from r1151666, subversion/trunk/tools/dist/gnupg.py
Removed:
subversion/branches/revprop-packing/tools/dist/getsigs.py
Modified:
subversion/branches/revprop-packing/ (props changed)
subversion/branches/revprop-packing/CHANGES
subversion/branches/revprop-packing/INSTALL
subversion/branches/revprop-packing/Makefile.in
subversion/branches/revprop-packing/build.conf
subversion/branches/revprop-packing/build/ac-macros/apache.m4
subversion/branches/revprop-packing/build/ac-macros/berkeley-db.m4
subversion/branches/revprop-packing/build/generator/extractor.py
subversion/branches/revprop-packing/build/generator/gen_win.py
subversion/branches/revprop-packing/build/generator/swig/__init__.py
subversion/branches/revprop-packing/build/generator/swig/header_wrappers.py
subversion/branches/revprop-packing/build/run_tests.py
subversion/branches/revprop-packing/configure.ac
subversion/branches/revprop-packing/notes/knobs
subversion/branches/revprop-packing/notes/moves
subversion/branches/revprop-packing/subversion/bindings/swig/core.i
subversion/branches/revprop-packing/subversion/bindings/swig/perl/native/t/8lock.t
subversion/branches/revprop-packing/subversion/include/private/svn_auth_private.h
subversion/branches/revprop-packing/subversion/include/private/svn_dep_compat.h
subversion/branches/revprop-packing/subversion/include/private/svn_string_private.h (contents, props changed)
subversion/branches/revprop-packing/subversion/include/private/svn_wc_private.h
subversion/branches/revprop-packing/subversion/include/svn_auth.h
subversion/branches/revprop-packing/subversion/include/svn_config.h
subversion/branches/revprop-packing/subversion/include/svn_error.h
subversion/branches/revprop-packing/subversion/include/svn_mergeinfo.h
subversion/branches/revprop-packing/subversion/libsvn_client/blame.c
subversion/branches/revprop-packing/subversion/libsvn_client/client.h
subversion/branches/revprop-packing/subversion/libsvn_client/commit.c
subversion/branches/revprop-packing/subversion/libsvn_client/commit_util.c
subversion/branches/revprop-packing/subversion/libsvn_client/diff.c
subversion/branches/revprop-packing/subversion/libsvn_client/externals.c
subversion/branches/revprop-packing/subversion/libsvn_client/merge.c
subversion/branches/revprop-packing/subversion/libsvn_client/mergeinfo.c
subversion/branches/revprop-packing/subversion/libsvn_client/mergeinfo.h
subversion/branches/revprop-packing/subversion/libsvn_client/repos_diff.c
subversion/branches/revprop-packing/subversion/libsvn_fs/fs-loader.c
subversion/branches/revprop-packing/subversion/libsvn_fs_fs/fs_fs.c
subversion/branches/revprop-packing/subversion/libsvn_fs_fs/rep-cache.c
subversion/branches/revprop-packing/subversion/libsvn_fs_fs/rep-cache.h
subversion/branches/revprop-packing/subversion/libsvn_ra_local/ra_plugin.c
subversion/branches/revprop-packing/subversion/libsvn_ra_neon/log.c
subversion/branches/revprop-packing/subversion/libsvn_ra_serf/getlocationsegments.c
subversion/branches/revprop-packing/subversion/libsvn_ra_serf/log.c
subversion/branches/revprop-packing/subversion/libsvn_ra_serf/ra_serf.h
subversion/branches/revprop-packing/subversion/libsvn_ra_serf/replay.c
subversion/branches/revprop-packing/subversion/libsvn_ra_serf/serf.c
subversion/branches/revprop-packing/subversion/libsvn_ra_serf/update.c
subversion/branches/revprop-packing/subversion/libsvn_ra_serf/util.c
subversion/branches/revprop-packing/subversion/libsvn_repos/commit.c
subversion/branches/revprop-packing/subversion/libsvn_repos/hooks.c
subversion/branches/revprop-packing/subversion/libsvn_subr/auth.c
subversion/branches/revprop-packing/subversion/libsvn_subr/cmdline.c
subversion/branches/revprop-packing/subversion/libsvn_subr/config_file.c
subversion/branches/revprop-packing/subversion/libsvn_subr/deprecated.c
subversion/branches/revprop-packing/subversion/libsvn_subr/dso.c
subversion/branches/revprop-packing/subversion/libsvn_subr/io.c
subversion/branches/revprop-packing/subversion/libsvn_subr/mergeinfo.c
subversion/branches/revprop-packing/subversion/libsvn_subr/simple_providers.c
subversion/branches/revprop-packing/subversion/libsvn_subr/subst.c
subversion/branches/revprop-packing/subversion/libsvn_subr/svn_string.c
subversion/branches/revprop-packing/subversion/libsvn_wc/adm_crawler.c
subversion/branches/revprop-packing/subversion/libsvn_wc/adm_files.c
subversion/branches/revprop-packing/subversion/libsvn_wc/adm_ops.c
subversion/branches/revprop-packing/subversion/libsvn_wc/conflicts.c
subversion/branches/revprop-packing/subversion/libsvn_wc/copy.c
subversion/branches/revprop-packing/subversion/libsvn_wc/diff_editor.c
subversion/branches/revprop-packing/subversion/libsvn_wc/diff_local.c
subversion/branches/revprop-packing/subversion/libsvn_wc/entries.c
subversion/branches/revprop-packing/subversion/libsvn_wc/info.c
subversion/branches/revprop-packing/subversion/libsvn_wc/lock.c
subversion/branches/revprop-packing/subversion/libsvn_wc/node.c
subversion/branches/revprop-packing/subversion/libsvn_wc/props.c
subversion/branches/revprop-packing/subversion/libsvn_wc/status.c
subversion/branches/revprop-packing/subversion/libsvn_wc/update_editor.c
subversion/branches/revprop-packing/subversion/libsvn_wc/wc-queries.sql
subversion/branches/revprop-packing/subversion/libsvn_wc/wc_db.c
subversion/branches/revprop-packing/subversion/libsvn_wc/wc_db.h
subversion/branches/revprop-packing/subversion/mod_authz_svn/mod_authz_svn.c
subversion/branches/revprop-packing/subversion/mod_dav_svn/repos.c
subversion/branches/revprop-packing/subversion/mod_dav_svn/util.c
subversion/branches/revprop-packing/subversion/po/de.po
subversion/branches/revprop-packing/subversion/po/zh_CN.po
subversion/branches/revprop-packing/subversion/svn/main.c
subversion/branches/revprop-packing/subversion/svn/notify.c
subversion/branches/revprop-packing/subversion/svn/resolve-cmd.c
subversion/branches/revprop-packing/subversion/svndumpfilter/main.c
subversion/branches/revprop-packing/subversion/svnsync/main.c
subversion/branches/revprop-packing/subversion/tests/cmdline/externals_tests.py
subversion/branches/revprop-packing/subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout
subversion/branches/revprop-packing/subversion/tests/cmdline/info_tests.py
subversion/branches/revprop-packing/subversion/tests/cmdline/lock_tests.py
subversion/branches/revprop-packing/subversion/tests/cmdline/log_tests.py
subversion/branches/revprop-packing/subversion/tests/cmdline/special_tests.py
subversion/branches/revprop-packing/subversion/tests/cmdline/svnadmin_tests.py
subversion/branches/revprop-packing/subversion/tests/cmdline/svntest/actions.py
subversion/branches/revprop-packing/subversion/tests/libsvn_client/client-test.c
subversion/branches/revprop-packing/subversion/tests/libsvn_diff/parse-diff-test.c
subversion/branches/revprop-packing/subversion/tests/libsvn_subr/auth-test.c
subversion/branches/revprop-packing/subversion/tests/libsvn_wc/db-test.c
subversion/branches/revprop-packing/subversion/tests/libsvn_wc/op-depth-test.c
subversion/branches/revprop-packing/tools/dist/backport.pl
subversion/branches/revprop-packing/tools/dist/collect_sigs.py
subversion/branches/revprop-packing/tools/dist/release.py
subversion/branches/revprop-packing/tools/dist/templates/rc-news.ezt
subversion/branches/revprop-packing/tools/server-side/svnpredumpfilter.py
Propchange: subversion/branches/revprop-packing/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jul 28 21:58:49 2011
@@ -11,6 +11,7 @@
/subversion/branches/fs-rep-sharing:869036-873803
/subversion/branches/fsfs-pack:873717-874575
/subversion/branches/gnome-keyring:870558-871410
+/subversion/branches/gpg-agent-password-store:1005036-1150766
/subversion/branches/http-protocol-v2:874395-876041
/subversion/branches/in-memory-cache:869829-871452
/subversion/branches/integrate-cache-item-serialization:1068724-1068739
@@ -52,4 +53,4 @@
/subversion/branches/tree-conflicts:868291-873154
/subversion/branches/tree-conflicts-notify:873926-874008
/subversion/branches/uris-as-urls:1060426-1064427
-/subversion/trunk:1143817-1148765,1151667,1151672,1151680,1151916,1151948,1151954,1151957
+/subversion/trunk:1143817-1152007
Modified: subversion/branches/revprop-packing/CHANGES
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/CHANGES?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/CHANGES (original)
+++ subversion/branches/revprop-packing/CHANGES Thu Jul 28 21:58:49 2011
@@ -1,3 +1,12 @@
+Version 1.8.0
+(?? ??? 2011, from /branches/1.8.x)
+http://svn.apache.org/repos/asf/subversion/tags/1.8.0
+
+ Developer-visible changes:
+ - API changes:
+ * fix inconsistent handling of log revs without changed paths (issue #3694)
+
+
Version 1.7.0
(?? ??? 2011, from /branches/1.7.x)
http://svn.apache.org/repos/asf/subversion/tags/1.7.0
Modified: subversion/branches/revprop-packing/INSTALL
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/INSTALL?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/INSTALL (original)
+++ subversion/branches/revprop-packing/INSTALL Thu Jul 28 21:58:49 2011
@@ -505,7 +505,7 @@ I. INTRODUCTION
with the C compiler. If you're using MSVC 6, and don't have MASM 6,
a free MASM-compatible assembler is available here:
- http://www.masm32.org/
+ http://www.masm32.com/
You only need ML.EXE and ML.ERR from this distribution.
@@ -758,7 +758,7 @@ II. INSTALLATION
$ svn co https://svn.apache.org/repos/asf/subversion/trunk svn
$ cd svn
- $ # get neon/apr as required
+ $ # get any dependencies to be built in-tree, if required
$ chmod +x autogen.sh
$ ./autogen.sh
$ mkdir ../obj
Modified: subversion/branches/revprop-packing/Makefile.in
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/Makefile.in?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/Makefile.in (original)
+++ subversion/branches/revprop-packing/Makefile.in Thu Jul 28 21:58:49 2011
@@ -47,6 +47,7 @@ SVN_APR_LIBS = @SVN_APR_LIBS@
SVN_APRUTIL_LIBS = @SVN_APRUTIL_LIBS@
SVN_APR_MEMCACHE_LIBS = @SVN_APR_MEMCACHE_LIBS@
SVN_DB_LIBS = @SVN_DB_LIBS@
+SVN_GPG_AGENT_LIBS = @SVN_GPG_AGENT_LIBS@
SVN_GNOME_KEYRING_LIBS = @SVN_GNOME_KEYRING_LIBS@
SVN_GSSAPI_LIBS = @SVN_GSSAPI_LIBS@
SVN_KWALLET_LIBS = @SVN_KWALLET_LIBS@
@@ -66,6 +67,7 @@ fsmod_libdir = @libdir@
ramod_libdir = @libdir@
bdb_libdir = @libdir@
gnome_keyring_libdir = @libdir@
+gpg_agent_libdir = @libdir@
gssapi_libdir = @libdir@
kwallet_libdir = @libdir@
neon_libdir = @libdir@
@@ -235,6 +237,7 @@ INSTALL_FSMOD_LIB = $(INSTALL_LIB)
INSTALL_RAMOD_LIB = $(INSTALL_LIB)
INSTALL_APR_MEMCACHE_LIB = $(INSTALL_LIB)
INSTALL_BDB_LIB = $(INSTALL_LIB)
+INSTALL_GPG_AGENT_LIB = $(INSTALL_LIB)
INSTALL_GNOME_KEYRING_LIB = $(INSTALL_LIB)
INSTALL_GSSAPI_LIB = $(INSTALL_LIB)
INSTALL_KWALLET_LIB = $(INSTALL_LIB)
@@ -530,6 +533,11 @@ check-clean:
subversion/tests/libsvn_subr/z \
subversion/tests/libsvn_wc/fake-wc \
subversion/tests/libsvn_client/test-patch* \
+ subversion/tests/libsvn_client/test-*/ \
+ subversion/tests/libsvn_diff/B2 \
+ subversion/tests/libsvn_diff/T1 \
+ subversion/tests/libsvn_diff/T2 \
+ subversion/tests/libsvn_diff/T3 \
subversion/tests/svnserveautocheck.pid \
tests.log fails.log
Modified: subversion/branches/revprop-packing/build.conf
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/build.conf?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/build.conf (original)
+++ subversion/branches/revprop-packing/build.conf Thu Jul 28 21:58:49 2011
@@ -180,7 +180,7 @@ description = Subversion GNOME Keyring L
type = lib
install = gnome-keyring-lib
path = subversion/libsvn_auth_gnome_keyring
-libs = apr gnome-keyring libsvn_subr
+libs = libsvn_subr apr gnome-keyring
# Support for KWallet
[libsvn_auth_kwallet]
@@ -188,7 +188,7 @@ description = Subversion KWallet Library
type = lib
install = kwallet-lib
path = subversion/libsvn_auth_kwallet
-libs = apr kwallet libsvn_subr
+libs = libsvn_subr apr kwallet
link-cmd = $(LINK_CXX_LIB)
# Library needed by all subversion clients
Modified: subversion/branches/revprop-packing/build/ac-macros/apache.m4
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/build/ac-macros/apache.m4?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/build/ac-macros/apache.m4 (original)
+++ subversion/branches/revprop-packing/build/ac-macros/apache.m4 Thu Jul 28 21:58:49 2011
@@ -146,7 +146,7 @@ if test -n "$APXS" && test "$APXS" != "n
APACHE_LDFLAGS="-shrext .so"
;;
esac
-else
+elif test x"$APXS" != x"no"; then
echo "=================================================================="
echo "WARNING: skipping the build of mod_dav_svn"
echo " try using --with-apxs"
Modified: subversion/branches/revprop-packing/build/ac-macros/berkeley-db.m4
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/build/ac-macros/berkeley-db.m4?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/build/ac-macros/berkeley-db.m4 (original)
+++ subversion/branches/revprop-packing/build/ac-macros/berkeley-db.m4 Thu Jul 28 21:58:49 2011
@@ -36,7 +36,7 @@ dnl search is skipped.
AC_DEFUN(SVN_LIB_BERKELEY_DB,
[
db_version=$1.$2.$3
- dnl Process the `with-berkeley-db' switch. We set `status' to one
+ dnl Process the `with-berkeley-db' switch. We set `bdb_status' to one
dnl of the following values:
dnl `required' --- the user specified that they did want to use
dnl Berkeley DB, so abort the configuration if we cannot find it.
@@ -55,7 +55,7 @@ AC_DEFUN(SVN_LIB_BERKELEY_DB,
used by APR-UTIL.])],
[
if test "$withval" = "no"; then
- status=skip
+ bdb_status=skip
elif test "$withval" = "yes"; then
apu_db_version="`$apu_config --db-version`"
if test $? -ne 0; then
@@ -70,7 +70,7 @@ AC_DEFUN(SVN_LIB_BERKELEY_DB,
APR-UTIL with the appropiate options.])
fi
- status=required
+ bdb_status=required
elif test "$apu_found" != "reconfig"; then
if test "$apu_db_version" -lt 4; then
@@ -78,7 +78,7 @@ AC_DEFUN(SVN_LIB_BERKELEY_DB,
possible to use the specified Berkeley DB: $withval])
fi
- status=required
+ bdb_status=required
fi
else
if echo "$withval" | $EGREP ":.*:.*:" > /dev/null; then
@@ -97,7 +97,7 @@ AC_DEFUN(SVN_LIB_BERKELEY_DB,
done
SVN_DB_LIBS="${SVN_DB_LIBS## }"
- status=required
+ bdb_status=required
else
AC_MSG_ERROR([Invalid syntax of argument of --with-berkeley-db option])
fi
@@ -114,15 +114,15 @@ AC_DEFUN(SVN_LIB_BERKELEY_DB,
AC_MSG_WARN([Detected older version of APR-UTIL, trying to determine
whether apr-util is linked against Berkeley DB
$db_version])
- status=try-link
+ bdb_status=try-link
elif test "$apu_db_version" -lt "4"; then
- status=skip
+ bdb_status=skip
else
- status=try-link
+ bdb_status=try-link
fi
])
- if test "$status" = "skip"; then
+ if test "$bdb_status" = "skip"; then
svn_lib_berkeley_db=no
else
AC_MSG_CHECKING([for availability of Berkeley DB])
@@ -133,7 +133,7 @@ AC_DEFUN(SVN_LIB_BERKELEY_DB,
else
AC_MSG_RESULT([no])
svn_lib_berkeley_db=no
- if test "$status" = "required"; then
+ if test "$bdb_status" = "required"; then
AC_MSG_ERROR([Berkeley DB $db_version or newer wasn't found.])
fi
fi
@@ -180,7 +180,9 @@ AC_DEFUN(SVN_LIB_BERKELEY_DB_TRY,
# Or that it resides in a non-standard location which we would have
# to compensate with using something like -R`$apu_config --prefix`/lib.
#
- SVN_DB_LIBS=["${SVN_DB_LIBS-`$apu_config --libs | $SED -e 's/.*\(-ldb[^[:space:]]*\).*/\1/' | $EGREP -- '-ldb[^[:space:]]*'`}"]
+ if test -z "$SVN_DB_LIBS"; then
+ SVN_DB_LIBS=["`$apu_config --libs | $SED -e 's/.*\(-ldb[^[:space:]]*\).*/\1/' | $EGREP -- '-ldb[^[:space:]]*'`"]
+ fi
CPPFLAGS="$SVN_DB_INCLUDES $SVN_APRUTIL_INCLUDES $CPPFLAGS"
LIBS="`$apu_config --ldflags` $SVN_DB_LIBS $LIBS"
Modified: subversion/branches/revprop-packing/build/generator/extractor.py
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/build/generator/extractor.py?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/build/generator/extractor.py (original)
+++ subversion/branches/revprop-packing/build/generator/extractor.py Thu Jul 28 21:58:49 2011
@@ -55,6 +55,8 @@ _filter_names = [
'svn_auth_get_kwallet_ssl_client_cert_pw_provider',
'svn_auth_gnome_keyring_version',
'svn_auth_kwallet_version',
+ 'svn_auth_get_gpg_agent_simple_provider',
+ 'svn_auth_gpg_agent_version',
]
if __name__ == '__main__':
Modified: subversion/branches/revprop-packing/build/generator/gen_win.py
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/build/generator/gen_win.py?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/build/generator/gen_win.py (original)
+++ subversion/branches/revprop-packing/build/generator/gen_win.py Thu Jul 28 21:58:49 2011
@@ -1022,7 +1022,7 @@ class WinGeneratorBase(GeneratorBase):
if self.serf_lib:
if self.serf_ver_maj != 0:
- serflib = 'serf-1.lib'
+ serflib = 'serf-%d.lib' % self.serf_ver_maj
else:
serflib = 'serf.lib'
@@ -1182,7 +1182,7 @@ class WinGeneratorBase(GeneratorBase):
serf_path = os.path.abspath(self.serf_path)
if self.serf_ver_maj != 0:
- serflib = 'serf-1.lib'
+ serflib = 'serf-%d.lib' % self.serf_ver_maj
else:
serflib = 'serf.lib'
Modified: subversion/branches/revprop-packing/build/generator/swig/__init__.py
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/build/generator/swig/__init__.py?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/build/generator/swig/__init__.py (original)
+++ subversion/branches/revprop-packing/build/generator/swig/__init__.py Thu Jul 28 21:58:49 2011
@@ -59,19 +59,12 @@ class Generator:
# Calculate SWIG paths
self.swig_path = swig_path
- try:
- self.swig_libdir = _exec.output([self.swig_path, "-swiglib"], strip=1)
- except AssertionError:
- pass
+ self.swig_libdir = _exec.output([self.swig_path, "-swiglib"], strip=1)
def version(self):
"""Get the version number of SWIG"""
- try:
- swig_version = _exec.output([self.swig_path, "-version"])
- m = re.search("Version (\d+).(\d+).(\d+)", swig_version)
- if m:
- return (m.group(1), m.group(2), m.group(3))
- except AssertionError:
- pass
+ swig_version = _exec.output([self.swig_path, "-version"])
+ m = re.search("Version (\d+).(\d+).(\d+)", swig_version)
+ if m:
+ return (m.group(1), m.group(2), m.group(3))
return (0, 0, 0)
-
Modified: subversion/branches/revprop-packing/build/generator/swig/header_wrappers.py
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/build/generator/swig/header_wrappers.py?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/build/generator/swig/header_wrappers.py (original)
+++ subversion/branches/revprop-packing/build/generator/swig/header_wrappers.py Thu Jul 28 21:58:49 2011
@@ -65,7 +65,13 @@ class Generator(generator.swig.Generator
)
makefile.write('SWIG_WRAPPERS = %s\n\n' % ' '.join(wrapper_fnames))
for short_name in self.short.values():
- makefile.write('autogen-swig-%s: $(SWIG_WRAPPERS)\n' % short_name)
+ # swig-pl needs the '.swig_checked' target here; swig-rb and swig-py
+ # already reach it via a different dependency chain:
+ #
+ # In build-outputs.mk, swig-py and swig-rb targets depend on *.la
+ # targets, which depend on *.lo targets, which depend on *.c targets,
+ # which depend on .swig_checked target.
+ makefile.write('autogen-swig-%s: .swig_checked $(SWIG_WRAPPERS)\n' % short_name)
makefile.write('\n\n')
def proxy_filename(self, include_filename):
Modified: subversion/branches/revprop-packing/build/run_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/build/run_tests.py?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/build/run_tests.py (original)
+++ subversion/branches/revprop-packing/build/run_tests.py Thu Jul 28 21:58:49 2011
@@ -347,6 +347,10 @@ class TestHarness:
stderr=self.log)
line = prog.stdout.readline()
while line:
+ if sys.platform == 'win32':
+ # Remove CRs inserted because we parse the output as binary.
+ line = line.replace('\r', '')
+
# If using --log-to-stdout self.log in None.
if self.log:
self.log.write(line)
Modified: subversion/branches/revprop-packing/configure.ac
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/configure.ac?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/configure.ac (original)
+++ subversion/branches/revprop-packing/configure.ac Thu Jul 28 21:58:49 2011
@@ -567,6 +567,25 @@ int main()
fi
fi
+dnl GPG Agent -------------------
+
+AC_ARG_WITH(gpg_agent,
+AS_HELP_STRING([--without-gpg-agent],
+ [Disable support for GPG-Agent]),
+ [with_gpg_agent=no], [with_gpg_agent=yes])
+AC_MSG_CHECKING([whether to support GPG-Agent])
+if test "$svn_enable_shared" != "yes"; then
+ AC_MSG_RESULT([no (shared library support is disabled)])
+elif test "$with_gpg_agent" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE([SVN_HAVE_GPG_AGENT], [1],
+ [Is GPG Agent support enabled?])
+else
+ AC_MSG_RESULT([no])
+fi
+
+AC_SUBST(SVN_HAVE_GPG_AGENT)
+
dnl GNOME Keyring -------------------
AC_ARG_WITH(gnome_keyring,
Modified: subversion/branches/revprop-packing/notes/knobs
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/notes/knobs?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/notes/knobs (original)
+++ subversion/branches/revprop-packing/notes/knobs Thu Jul 28 21:58:49 2011
@@ -52,6 +52,7 @@ SVN_DEBUG
SVN_CLIENT_COMMIT_DEBUG
SVN_DEBUG_CACHE_DUMP_STATS
SVN_DEBUG_CACHE_MEMBUFFER
+SVN_DEBUG_DSO
SVN_DEBUG_WORK_QUEUE
PACK_AFTER_EVERY_COMMIT
DEBUG_DOUBLE_FREE
@@ -262,6 +263,14 @@ SVN_I_LIKE_LATENCY_SO_IGNORE_HTTPV2
Default: not defined
Suggested: defined, not defined
+5.6 SVN_DEBUG_DSO
+
+ Scope: libsvn_subr (dso)
+ Purpose: detection of failures of dynamic loading of libraries
+ Range: definedness
+ Default: not defined
+ Suggested: defined, not defined
+
5.7 SVN_DEBUG_WORK_QUEUE
Scope: libsvn_wc (workqueue)
@@ -278,7 +287,7 @@ SVN_I_LIKE_LATENCY_SO_IGNORE_HTTPV2
Default: not defined
Suggested: defined, not defined
-5.6 DEBUG_DOUBLE_FREE
+5.9 DEBUG_DOUBLE_FREE
Scope: serf
Purpose: detect double-free calls to serf_bucket_mem_free()
@@ -286,7 +295,7 @@ SVN_I_LIKE_LATENCY_SO_IGNORE_HTTPV2
Default: defined
Suggested: defined, not defined
-5.9 SERF_VERBOSE
+5.10 SERF_VERBOSE
Scope: serf
Purpose: write protocol handling debug information to stdout
@@ -294,7 +303,7 @@ SVN_I_LIKE_LATENCY_SO_IGNORE_HTTPV2
Default: not defined
Suggested: defined, not defined
-5.10 SSL_VERBOSE
+5.11 SSL_VERBOSE
Scope: serf
Purpose: write SSL bucket handling debug information to stdout
@@ -302,7 +311,7 @@ SVN_I_LIKE_LATENCY_SO_IGNORE_HTTPV2
Default: not defined
Suggested: defined, not defined
-5.11 SVN_DEPRECATED
+5.12 SVN_DEPRECATED
Scope: (everywhere)
Purpose: disable "deprecated function calls" warnings
@@ -310,7 +319,7 @@ SVN_I_LIKE_LATENCY_SO_IGNORE_HTTPV2
Default: (compiler dependant)
Suggested: "" (disable deprecation warnings), or compiler-specific decorators
-5.12 SVN_FS__TRAIL_DEBUG
+5.13 SVN_FS__TRAIL_DEBUG
Scope: libsvn_fs_base
Purpose:
Modified: subversion/branches/revprop-packing/notes/moves
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/notes/moves?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/notes/moves (original)
+++ subversion/branches/revprop-packing/notes/moves Thu Jul 28 21:58:49 2011
@@ -7,7 +7,7 @@ This file purposefully talks about 'move
This isn't about true renames as requested in issue #898.
Rather, these ideas keep the add+delete concept while trying to make
moves behave more in a way that one would expect if true renames were
-implemented.
+implemented, as requested in issue #3631.
These ideas only cover local (client-side) moves in the working copy.
They attempt to reuse as much existing code as possible, so new
Modified: subversion/branches/revprop-packing/subversion/bindings/swig/core.i
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/bindings/swig/core.i?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/bindings/swig/core.i (original)
+++ subversion/branches/revprop-packing/subversion/bindings/swig/core.i Thu Jul 28 21:58:49 2011
@@ -244,6 +244,7 @@
%ignore svn_auth_kwallet_version;
%ignore svn_auth_get_kwallet_simple_provider;
%ignore svn_auth_get_kwallet_ssl_client_cert_pw_provider;
+%ignore svn_auth_get_gpg_agent_simple_provider;
/* bad pool convention */
%ignore svn_opt_print_generic_help;
Modified: subversion/branches/revprop-packing/subversion/bindings/swig/perl/native/t/8lock.t
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/bindings/swig/perl/native/t/8lock.t?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/bindings/swig/perl/native/t/8lock.t (original)
+++ subversion/branches/revprop-packing/subversion/bindings/swig/perl/native/t/8lock.t Thu Jul 28 21:58:49 2011
@@ -54,10 +54,12 @@ print $stream 'orz';
}
$txn->commit;
-$fs->lock('/testfile', 'hate software', 'we hate software', 0, 0, $fs->youngest_rev, 0);
+my $token = "opaquelocktoken:notauuid-$$";
+
+$fs->lock('/testfile', $token, 'we hate software', 0, 0, $fs->youngest_rev, 0);
ok(my $lock = $fs->get_lock('/testfile'));
-is($lock->token, 'hate software');
+is($lock->token, $token);
is($lock->owner, 'foo');
$acc = SVN::Fs::create_access('fnord');
@@ -65,7 +67,7 @@ is($acc->get_username, 'fnord');
$fs->set_access($acc);
eval {
-$fs->lock('/testfile', 'hate software', 'we hate software', 0, 0, $fs->youngest_rev, 0);
+$fs->lock('/testfile', $token, 'we hate software', 0, 0, $fs->youngest_rev, 0);
};
like($@, qr/already locked/);
Modified: subversion/branches/revprop-packing/subversion/include/private/svn_auth_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/include/private/svn_auth_private.h?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/include/private/svn_auth_private.h (original)
+++ subversion/branches/revprop-packing/subversion/include/private/svn_auth_private.h Thu Jul 28 21:58:49 2011
@@ -46,6 +46,7 @@ extern "C" {
#define SVN_AUTH__KEYCHAIN_PASSWORD_TYPE "keychain"
#define SVN_AUTH__KWALLET_PASSWORD_TYPE "kwallet"
#define SVN_AUTH__GNOME_KEYRING_PASSWORD_TYPE "gnome-keyring"
+#define SVN_AUTH__GPG_AGENT_PASSWORD_TYPE "gpg-agent"
/* A function that stores in *PASSWORD (potentially after decrypting it)
the user's password. It might be obtained directly from CREDS, or
Modified: subversion/branches/revprop-packing/subversion/include/private/svn_dep_compat.h
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/include/private/svn_dep_compat.h?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/include/private/svn_dep_compat.h (original)
+++ subversion/branches/revprop-packing/subversion/include/private/svn_dep_compat.h Thu Jul 28 21:58:49 2011
@@ -62,6 +62,11 @@ extern "C" {
#define apr_array_clear(arr) (arr)->nelts = 0
#endif
+#if !APR_VERSION_AT_LEAST(1,0,0)
+#define APR_UINT64_C(val) UINT64_C(val)
+#define APR_FPROT_OS_DEFAULT APR_OS_DEFAULT
+#endif
+
#if !APR_VERSION_AT_LEAST(1,3,0)
#define APR_UINT16_MAX 0xFFFFU
#define APR_INT16_MAX 0x7FFF
Modified: subversion/branches/revprop-packing/subversion/include/private/svn_string_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/include/private/svn_string_private.h?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/include/private/svn_string_private.h (original)
+++ subversion/branches/revprop-packing/subversion/include/private/svn_string_private.h Thu Jul 28 21:58:49 2011
@@ -53,6 +53,11 @@ extern "C" {
*/
svn_string_t *
svn_stringbuf__morph_into_string(svn_stringbuf_t *strbuf);
+
+/** Like apr_strtoff but provided here for backward compatibility
+ * with APR 0.9 */
+apr_status_t
+svn__strtoff(apr_off_t *offset, const char *buf, char **end, int base);
/** @} */
/** @} */
Propchange: subversion/branches/revprop-packing/subversion/include/private/svn_string_private.h
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jul 28 21:58:49 2011
@@ -52,4 +52,4 @@
/subversion/branches/tree-conflicts/subversion/include/svn_string.h:868291-873154
/subversion/branches/tree-conflicts-notify/subversion/include/svn_string.h:873926-874008
/subversion/branches/uris-as-urls/subversion/include/svn_string.h:1060426-1064427
-/subversion/trunk/subversion/include/private/svn_string_private.h:1143817-1148765,1151667,1151948
+/subversion/trunk/subversion/include/private/svn_string_private.h:1143817-1152007
Modified: subversion/branches/revprop-packing/subversion/include/private/svn_wc_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/include/private/svn_wc_private.h?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/include/private/svn_wc_private.h (original)
+++ subversion/branches/revprop-packing/subversion/include/private/svn_wc_private.h Thu Jul 28 21:58:49 2011
@@ -1096,6 +1096,40 @@ svn_wc__get_info(svn_wc_context_t *wc_ct
void *cancel_baton,
apr_pool_t *scratch_pool);
+/* Internal version of svn_wc_delete4(). It has one additional parameter,
+ * MOVED_TO_ABSPATH. If not NULL, this parameter indicates that the
+ * delete operation is the delete-half of a move. */
+svn_error_t *
+svn_wc__delete_internal(svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ svn_boolean_t keep_local,
+ svn_boolean_t delete_unversioned_target,
+ const char *moved_to_abspath,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool);
+
+/* If the node at LOCAL_ABSPATH was moved here set *MOVED_FROM_ABSPATH to
+ * the absolute path of the deleted move-source node, and set
+ * *DELETE_OP_ROOT_ABSPATH to the absolute path of the root node of the
+ * delete operation.
+ *
+ * If the node was not moved, set *MOVED_FROM_ABSPATH and
+ * *DELETE_OP_ROOT_ABSPATH to NULL.
+ *
+ * Either MOVED_FROM_ABSPATH or OP_ROOT_ABSPATH may be NULL to indicate
+ * that the caller is not interested in the result.
+ */
+svn_error_t *
+svn_wc__node_was_moved_here(const char **moved_from_abspath,
+ const char **delete_op_root_abspath,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
Modified: subversion/branches/revprop-packing/subversion/include/svn_auth.h
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/include/svn_auth.h?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/include/svn_auth.h (original)
+++ subversion/branches/revprop-packing/subversion/include/svn_auth.h Thu Jul 28 21:58:49 2011
@@ -785,8 +785,8 @@ svn_auth_get_simple_provider(svn_auth_pr
* svn_auth_provider_object_t, or return @c NULL if the provider is not
* available for the requested platform or the requested provider is unknown.
*
- * Valid @a provider_name values are: "gnome_keyring", "keychain", "kwallet"
- * and "windows".
+ * Valid @a provider_name values are: "gnome_keyring", "keychain", "kwallet",
+ * "gpg_agent", and "windows".
*
* Valid @a provider_type values are: "simple", "ssl_client_cert_pw" and
* "ssl_server_trust".
@@ -820,7 +820,8 @@ svn_auth_get_platform_specific_provider(
* 1. gnome-keyring
* 2. kwallet
* 3. keychain
- * 4. windows-cryptoapi
+ * 4. gpg-agent
+ * 5. windows-cryptoapi
*
* @since New in 1.6.
*/
@@ -1071,6 +1072,28 @@ svn_auth_get_kwallet_ssl_client_cert_pw_
apr_pool_t *pool);
#endif /* (!DARWIN && !WIN32) || DOXYGEN */
+#if !defined(WIN32) || defined(DOXYGEN)
+/**
+ * Set @a *provider to an authentication provider of type @c
+ * svn_auth_cred_simple_t that gets/sets information from the user's
+ * ~/.subversion configuration directory.
+ *
+ * This is like svn_client_get_simple_provider(), except that the
+ * password is obtained from gpg_agent, which will keep it in
+ * a memory cache.
+ *
+ * Allocate @a *provider in @a pool.
+ *
+ * @since New in 1.8
+ * @note This function actually works only on systems with
+ * GNU Privacy Guard installed.
+ */
+void
+svn_auth_get_gpg_agent_simple_provider
+ (svn_auth_provider_object_t **provider,
+ apr_pool_t *pool);
+#endif /* !defined(WIN32) || defined(DOXYGEN) */
+
/** Set @a *provider to an authentication provider of type @c
* svn_auth_cred_username_t that gets/sets information from a user's
Modified: subversion/branches/revprop-packing/subversion/include/svn_config.h
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/include/svn_config.h?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/include/svn_config.h (original)
+++ subversion/branches/revprop-packing/subversion/include/svn_config.h Thu Jul 28 21:58:49 2011
@@ -146,7 +146,7 @@ typedef struct svn_config_t svn_config_t
* but we don't want the # character to end up in the variable.
*/
#define SVN_CONFIG__DEFAULT_GLOBAL_IGNORES_LINE_1 \
- "*.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo"
+ "*.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo __pycache__"
#define SVN_CONFIG__DEFAULT_GLOBAL_IGNORES_LINE_2 \
"*.rej *~ #*# .#* .*.swp .DS_Store"
Modified: subversion/branches/revprop-packing/subversion/include/svn_error.h
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/include/svn_error.h?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/include/svn_error.h (original)
+++ subversion/branches/revprop-packing/subversion/include/svn_error.h Thu Jul 28 21:58:49 2011
@@ -391,7 +391,8 @@ svn_error_t *svn_error_purge_tracing(svn
#define SVN_ERR_IS_LOCK_ERROR(err) \
(err->apr_err == SVN_ERR_FS_PATH_ALREADY_LOCKED || \
err->apr_err == SVN_ERR_FS_NOT_FOUND || \
- err->apr_err == SVN_ERR_FS_OUT_OF_DATE)
+ err->apr_err == SVN_ERR_FS_OUT_OF_DATE || \
+ err->apr_err == SVN_ERR_FS_BAD_LOCK_TOKEN)
/**
* Return TRUE if @a err is an error specifically related to unlocking
Modified: subversion/branches/revprop-packing/subversion/include/svn_mergeinfo.h
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/include/svn_mergeinfo.h?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/include/svn_mergeinfo.h (original)
+++ subversion/branches/revprop-packing/subversion/include/svn_mergeinfo.h Thu Jul 28 21:58:49 2011
@@ -270,20 +270,38 @@ svn_rangelist_diff(apr_array_header_t **
apr_pool_t *pool);
/** Merge two rangelists consisting of @c svn_merge_range_t *
- * elements, @a *rangelist and @a changes, placing the results in
- * @a *rangelist. Either rangelist may be empty.
+ * elements, @a rangelist and @a changes, placing the results in
+ * @a rangelist. New elements added to @a rangelist are allocated
+ * in @a result_pool. Either rangelist may be empty.
*
* When intersecting rangelists are merged, the inheritability of
* the resulting svn_merge_range_t depends on the inheritability of the
* operands: see svn_mergeinfo_merge().
*
- * Note: @a *rangelist and @a changes must be sorted as said by @c
- * svn_sort_compare_ranges(). @a *rangelist is guaranteed to remain
+ * Note: @a rangelist and @a changes must be sorted as said by @c
+ * svn_sort_compare_ranges(). @a rangelist is guaranteed to remain
* in sorted order and be compacted to the minimal number of ranges
* needed to represent the merged result.
*
+ * Use @a scratch_pool for temporary allocations.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_rangelist_merge2(apr_array_header_t *rangelist,
+ const apr_array_header_t *changes,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/** Like svn_rangelist_merge2(), but with @a rangelist as an input/output
+ * argument. This function always allocates a new rangelist in @a pool and
+ * returns its result in @a *rangelist. It does not modify @a *rangelist
+ * in place. If not used carefully, this function can use up a lot of memory
+ * if called in a loop.
+ *
* @since New in 1.5.
*/
+SVN_DEPRECATED
svn_error_t *
svn_rangelist_merge(apr_array_header_t **rangelist,
const apr_array_header_t *changes,
Modified: subversion/branches/revprop-packing/subversion/libsvn_client/blame.c
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/libsvn_client/blame.c?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/libsvn_client/blame.c (original)
+++ subversion/branches/revprop-packing/subversion/libsvn_client/blame.c Thu Jul 28 21:58:49 2011
@@ -107,6 +107,7 @@ struct delta_baton {
svn_txdelta_window_handler_t wrapped_handler;
void *wrapped_baton;
struct file_rev_baton *file_rev_baton;
+ svn_stream_t *source_stream; /* the delta source */
const char *filename;
};
@@ -319,6 +320,13 @@ window_handler(svn_txdelta_window_t *win
if (window)
return SVN_NO_ERROR;
+ /* Close the source file used for the delta.
+ It is important to do this early, since otherwise, they will be deleted
+ before all handles are closed, which leads to failures on some platforms
+ when new tempfiles are to be created. */
+ if (dbaton->source_stream)
+ SVN_ERR(svn_stream_close(dbaton->source_stream));
+
/* If we are including merged revisions, we need to add each rev to the
merged chain. */
if (frb->include_merged_revisions)
@@ -445,11 +453,12 @@ file_rev_handler(void *baton, const char
/* Prepare the text delta window handler. */
if (frb->last_filename)
- SVN_ERR(svn_stream_open_readonly(&last_stream, frb->last_filename,
+ SVN_ERR(svn_stream_open_readonly(&delta_baton->source_stream, frb->last_filename,
frb->currpool, pool));
else
/* Means empty stream below. */
- last_stream = NULL;
+ delta_baton->source_stream = NULL;
+ last_stream = svn_stream_disown(delta_baton->source_stream, pool);
if (frb->include_merged_revisions && !frb->merged_revision)
filepool = frb->filepool;
Modified: subversion/branches/revprop-packing/subversion/libsvn_client/client.h
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/libsvn_client/client.h?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/libsvn_client/client.h (original)
+++ subversion/branches/revprop-packing/subversion/libsvn_client/client.h Thu Jul 28 21:58:49 2011
@@ -595,8 +595,6 @@ svn_client__switch_internal(svn_revnum_t
DEPTH is the depth to recurse.
- DRY_RUN is set if this is a dry-run merge. It is not relevant for diff.
-
RA_SESSION defines the additional RA session for requesting file
contents.
@@ -615,15 +613,13 @@ svn_client__get_diff_editor(const svn_de
svn_ra_session_t *ra_session,
svn_revnum_t revision,
svn_boolean_t walk_deleted_dirs,
- svn_boolean_t dry_run,
const svn_wc_diff_callbacks4_t *diff_callbacks,
void *diff_cmd_baton,
svn_cancel_func_t cancel_func,
void *cancel_baton,
svn_wc_notify_func2_t notify_func,
void *notify_baton,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
+ apr_pool_t *result_pool);
/* ---------------------------------------------------------------- */
Modified: subversion/branches/revprop-packing/subversion/libsvn_client/commit.c
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/libsvn_client/commit.c?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/libsvn_client/commit.c (original)
+++ subversion/branches/revprop-packing/subversion/libsvn_client/commit.c Thu Jul 28 21:58:49 2011
@@ -1451,8 +1451,10 @@ svn_client_commit5(const apr_array_heade
cleanup:
/* Abort the commit if it is still in progress. */
+ svn_pool_clear(iterpool); /* Close open handles before aborting */
if (commit_in_progress)
- svn_error_clear(editor->abort_edit(edit_baton, pool));
+ cmt_err = svn_error_compose_create(cmt_err,
+ editor->abort_edit(edit_baton, pool));
/* A bump error is likely to occur while running a working copy log file,
explicitly unlocking and removing temporary files would be wrong in
Modified: subversion/branches/revprop-packing/subversion/libsvn_client/commit_util.c
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/libsvn_client/commit_util.c?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/libsvn_client/commit_util.c (original)
+++ subversion/branches/revprop-packing/subversion/libsvn_client/commit_util.c Thu Jul 28 21:58:49 2011
@@ -587,7 +587,7 @@ harvest_committables(svn_wc_context_t *w
/* Check for the deletion case.
* We delete explicitly deleted nodes (duh!)
* We delete not-present children of copies
- * We delete nodes that directly replace a node in it's ancestor
+ * We delete nodes that directly replace a node in its ancestor
*/
if (is_deleted || is_replaced)
@@ -1845,11 +1845,14 @@ svn_client__do_commit(const char *base_u
result_pool, iterpool);
if (err)
- return svn_error_trace(fixup_commit_error(item->path,
- base_url,
- item->session_relpath,
- svn_node_file,
- err, ctx, iterpool));
+ {
+ svn_pool_destroy(iterpool); /* Close tempfiles */
+ return svn_error_trace(fixup_commit_error(item->path,
+ base_url,
+ item->session_relpath,
+ svn_node_file,
+ err, ctx, scratch_pool));
+ }
if (md5_checksums)
apr_hash_set(*md5_checksums, item->path, APR_HASH_KEY_STRING,
Modified: subversion/branches/revprop-packing/subversion/libsvn_client/diff.c
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/libsvn_client/diff.c?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/libsvn_client/diff.c (original)
+++ subversion/branches/revprop-packing/subversion/libsvn_client/diff.c Thu Jul 28 21:58:49 2011
@@ -778,6 +778,9 @@ struct diff_cmd_baton {
/* Whether we're producing a git-style diff. */
svn_boolean_t use_git_diff_format;
+ /* Whether deletion of a file is summarized versus showing a full diff. */
+ svn_boolean_t no_diff_deleted;
+
svn_wc_context_t *wc_ctx;
/* The RA session used during diffs involving the repository. */
@@ -1173,28 +1176,40 @@ diff_file_added(svn_wc_notify_state_t *c
/* An svn_wc_diff_callbacks4_t function. */
static svn_error_t *
-diff_file_deleted_with_diff(svn_wc_notify_state_t *state,
- svn_boolean_t *tree_conflicted,
- const char *path,
- const char *tmpfile1,
- const char *tmpfile2,
- const char *mimetype1,
- const char *mimetype2,
- apr_hash_t *original_props,
- void *diff_baton,
- apr_pool_t *scratch_pool)
+diff_file_deleted(svn_wc_notify_state_t *state,
+ svn_boolean_t *tree_conflicted,
+ const char *path,
+ const char *tmpfile1,
+ const char *tmpfile2,
+ const char *mimetype1,
+ const char *mimetype2,
+ apr_hash_t *original_props,
+ void *diff_baton,
+ apr_pool_t *scratch_pool)
{
struct diff_cmd_baton *diff_cmd_baton = diff_baton;
if (diff_cmd_baton->anchor)
path = svn_dirent_join(diff_cmd_baton->anchor, path, scratch_pool);
- if (tmpfile1)
- SVN_ERR(diff_content_changed(path,
- tmpfile1, tmpfile2, diff_cmd_baton->revnum1,
- diff_cmd_baton->revnum2,
- mimetype1, mimetype2,
- svn_diff_op_deleted, NULL, diff_baton));
+ if (diff_cmd_baton->no_diff_deleted)
+ {
+ SVN_ERR(file_printf_from_utf8(
+ diff_cmd_baton->outfile,
+ diff_cmd_baton->header_encoding,
+ "Index: %s (deleted)" APR_EOL_STR "%s" APR_EOL_STR,
+ path, equal_string));
+ }
+ else
+ {
+ if (tmpfile1)
+ SVN_ERR(diff_content_changed(path,
+ tmpfile1, tmpfile2,
+ diff_cmd_baton->revnum1,
+ diff_cmd_baton->revnum2,
+ mimetype1, mimetype2,
+ svn_diff_op_deleted, NULL, diff_baton));
+ }
/* We don't list all the deleted properties. */
@@ -1208,36 +1223,6 @@ diff_file_deleted_with_diff(svn_wc_notif
/* An svn_wc_diff_callbacks4_t function. */
static svn_error_t *
-diff_file_deleted_no_diff(svn_wc_notify_state_t *state,
- svn_boolean_t *tree_conflicted,
- const char *path,
- const char *tmpfile1,
- const char *tmpfile2,
- const char *mimetype1,
- const char *mimetype2,
- apr_hash_t *original_props,
- void *diff_baton,
- apr_pool_t *scratch_pool)
-{
- struct diff_cmd_baton *diff_cmd_baton = diff_baton;
-
- if (diff_cmd_baton->anchor)
- path = svn_dirent_join(diff_cmd_baton->anchor, path, scratch_pool);
-
- if (state)
- *state = svn_wc_notify_state_unknown;
- if (tree_conflicted)
- *tree_conflicted = FALSE;
-
- return file_printf_from_utf8
- (diff_cmd_baton->outfile,
- diff_cmd_baton->header_encoding,
- "Index: %s (deleted)" APR_EOL_STR "%s" APR_EOL_STR,
- path, equal_string);
-}
-
-/* An svn_wc_diff_callbacks4_t function. */
-static svn_error_t *
diff_dir_added(svn_wc_notify_state_t *state,
svn_boolean_t *tree_conflicted,
svn_boolean_t *skip,
@@ -1313,6 +1298,18 @@ diff_dir_closed(svn_wc_notify_state_t *c
return SVN_NO_ERROR;
}
+static const svn_wc_diff_callbacks4_t diff_callbacks =
+{
+ diff_file_opened,
+ diff_file_changed,
+ diff_file_added,
+ diff_file_deleted,
+ diff_dir_deleted,
+ diff_dir_opened,
+ diff_dir_added,
+ diff_dir_props_changed,
+ diff_dir_closed
+};
/*-----------------------------------------------------------------*/
@@ -1740,11 +1737,11 @@ diff_repos_repos(const svn_wc_diff_callb
SVN_ERR(svn_client__get_diff_editor(
&diff_editor, &diff_edit_baton,
NULL, "", depth,
- extra_ra_session, rev1, TRUE, FALSE,
+ extra_ra_session, rev1, TRUE,
callbacks, callback_baton,
ctx->cancel_func, ctx->cancel_baton,
NULL /* no notify_func */, NULL /* no notify_baton */,
- pool, pool));
+ pool));
/* We want to switch our txn into URL2 */
SVN_ERR(svn_ra_do_diff3
@@ -2214,24 +2211,12 @@ svn_client_diff5(const apr_array_header_
apr_pool_t *pool)
{
struct diff_cmd_baton diff_cmd_baton = { 0 };
- svn_wc_diff_callbacks4_t diff_callbacks;
/* We will never do a pegged diff from here. */
svn_opt_revision_t peg_revision;
peg_revision.kind = svn_opt_revision_unspecified;
/* setup callback and baton */
- diff_callbacks.file_opened = diff_file_opened;
- diff_callbacks.file_changed = diff_file_changed;
- diff_callbacks.file_added = diff_file_added;
- diff_callbacks.file_deleted = no_diff_deleted ? diff_file_deleted_no_diff :
- diff_file_deleted_with_diff;
- diff_callbacks.dir_added = diff_dir_added;
- diff_callbacks.dir_deleted = diff_dir_deleted;
- diff_callbacks.dir_props_changed = diff_dir_props_changed;
- diff_callbacks.dir_opened = diff_dir_opened;
- diff_callbacks.dir_closed = diff_dir_closed;
-
diff_cmd_baton.orig_path_1 = path1;
diff_cmd_baton.orig_path_2 = path2;
@@ -2248,6 +2233,7 @@ svn_client_diff5(const apr_array_header_
diff_cmd_baton.force_binary = ignore_content_type;
diff_cmd_baton.relative_to_dir = relative_to_dir;
diff_cmd_baton.use_git_diff_format = use_git_diff_format;
+ diff_cmd_baton.no_diff_deleted = no_diff_deleted;
diff_cmd_baton.wc_ctx = ctx->wc_ctx;
diff_cmd_baton.visited_paths = apr_hash_make(pool);
diff_cmd_baton.ra_session = NULL;
@@ -2281,20 +2267,8 @@ svn_client_diff_peg5(const apr_array_hea
apr_pool_t *pool)
{
struct diff_cmd_baton diff_cmd_baton = { 0 };
- svn_wc_diff_callbacks4_t diff_callbacks;
/* setup callback and baton */
- diff_callbacks.file_opened = diff_file_opened;
- diff_callbacks.file_changed = diff_file_changed;
- diff_callbacks.file_added = diff_file_added;
- diff_callbacks.file_deleted = no_diff_deleted ? diff_file_deleted_no_diff :
- diff_file_deleted_with_diff;
- diff_callbacks.dir_added = diff_dir_added;
- diff_callbacks.dir_deleted = diff_dir_deleted;
- diff_callbacks.dir_props_changed = diff_dir_props_changed;
- diff_callbacks.dir_opened = diff_dir_opened;
- diff_callbacks.dir_closed = diff_dir_closed;
-
diff_cmd_baton.orig_path_1 = path;
diff_cmd_baton.orig_path_2 = path;
@@ -2311,6 +2285,7 @@ svn_client_diff_peg5(const apr_array_hea
diff_cmd_baton.force_binary = ignore_content_type;
diff_cmd_baton.relative_to_dir = relative_to_dir;
diff_cmd_baton.use_git_diff_format = use_git_diff_format;
+ diff_cmd_baton.no_diff_deleted = no_diff_deleted;
diff_cmd_baton.wc_ctx = ctx->wc_ctx;
diff_cmd_baton.visited_paths = apr_hash_make(pool);
diff_cmd_baton.ra_session = NULL;
Modified: subversion/branches/revprop-packing/subversion/libsvn_client/externals.c
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/libsvn_client/externals.c?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/libsvn_client/externals.c (original)
+++ subversion/branches/revprop-packing/subversion/libsvn_client/externals.c Thu Jul 28 21:58:49 2011
@@ -1044,6 +1044,9 @@ handle_externals_change(const struct ext
svn_pool_clear(iterpool);
+ if (eb->ctx->cancel_func)
+ SVN_ERR(eb->ctx->cancel_func(eb->ctx->cancel_baton));
+
target_abspath = svn_dirent_join(local_abspath, new_item->target_dir,
iterpool);
Modified: subversion/branches/revprop-packing/subversion/libsvn_client/merge.c
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/libsvn_client/merge.c?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/libsvn_client/merge.c (original)
+++ subversion/branches/revprop-packing/subversion/libsvn_client/merge.c Thu Jul 28 21:58:49 2011
@@ -2722,6 +2722,43 @@ notification_receiver(void *baton, const
(*notify_b->wrapped_func)(notify_b->wrapped_baton, notify, pool);
}
+/* Set *OUT_RANGELIST to the intersection of IN_RANGELIST with the simple
+ * (inheritable) revision range REV1:REV2, according to CONSIDER_INHERITANCE.
+ * If REV1 is equal to REV2, the result is an empty rangelist, otherwise
+ * REV1 must be less than REV2.
+ *
+ * Note: If CONSIDER_INHERITANCE is FALSE, the effect is to treat any non-
+ * inheritable input ranges as if they were inheritable. If it is TRUE, the
+ * effect is to discard any non-inheritable input ranges. Therefore the
+ * ranges in *OUT_RANGELIST will always be inheritable. */
+static svn_error_t *
+rangelist_intersect_range(apr_array_header_t **out_rangelist,
+ const apr_array_header_t *in_rangelist,
+ svn_revnum_t rev1,
+ svn_revnum_t rev2,
+ svn_boolean_t consider_inheritance,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ SVN_ERR_ASSERT(rev1 <= rev2);
+
+ if (rev1 < rev2)
+ {
+ apr_array_header_t *simple_rangelist =
+ svn_rangelist__initialize(rev1, rev2, TRUE, scratch_pool);
+
+ SVN_ERR(svn_rangelist_intersect(out_rangelist,
+ simple_rangelist, in_rangelist,
+ consider_inheritance, result_pool));
+ }
+ else
+ {
+ *out_rangelist = apr_array_make(result_pool, 0,
+ sizeof(svn_merge_range_t *));
+ }
+ return SVN_NO_ERROR;
+}
+
/* Helper for fix_deleted_subtree_ranges(). Like fix_deleted_subtree_ranges()
this function should only be called when honoring mergeinfo.
@@ -2820,7 +2857,6 @@ adjust_deleted_subtree_ranges(svn_client
svn_revnum_t younger_rev = is_rollback ? revision1 : revision2;
svn_revnum_t peg_rev = younger_rev;
svn_revnum_t older_rev = is_rollback ? revision2 : revision1;
- svn_revnum_t revision_primary_url_deleted = SVN_INVALID_REVNUM;
apr_array_header_t *segments;
const char *rel_source_path;
const char *session_url;
@@ -2875,20 +2911,20 @@ adjust_deleted_subtree_ranges(svn_client
}
else
{
- apr_array_header_t *exists_rangelist, *deleted_rangelist;
+ apr_array_header_t *deleted_rangelist;
+ svn_revnum_t rev_primary_url_deleted;
/* PRIMARY_URL@older_rev exists, so it was deleted at some
revision prior to peg_rev, find that revision. */
SVN_ERR(svn_ra_get_deleted_rev(ra_session, rel_source_path,
older_rev, younger_rev,
- &revision_primary_url_deleted,
+ &rev_primary_url_deleted,
scratch_pool));
/* PRIMARY_URL@older_rev exists and PRIMARY_URL@peg_rev doesn't,
so svn_ra_get_deleted_rev() should always find the revision
PRIMARY_URL@older_rev was deleted. */
- SVN_ERR_ASSERT(SVN_IS_VALID_REVNUM(
- revision_primary_url_deleted));
+ SVN_ERR_ASSERT(SVN_IS_VALID_REVNUM(rev_primary_url_deleted));
/* If this is a reverse merge reorder CHILD->REMAINING_RANGES and
PARENT->REMAINING_RANGES so both will work with the
@@ -2906,43 +2942,25 @@ adjust_deleted_subtree_ranges(svn_client
/* Find the intersection of CHILD->REMAINING_RANGES with the
range over which PRIMARY_URL@older_rev exists (ending at
the youngest revision at which it still exists). */
- if (revision_primary_url_deleted - 1 > older_rev)
- {
- /* It was not deleted immediately after OLDER_REV, so
- it has some relevant changes. */
- exists_rangelist =
- svn_rangelist__initialize(older_rev,
- revision_primary_url_deleted - 1,
- TRUE, scratch_pool);
- SVN_ERR(svn_rangelist_intersect(&(child->remaining_ranges),
- exists_rangelist,
- child->remaining_ranges,
- FALSE, scratch_pool));
- }
- else
- {
- /* It was deleted immediately after the OLDER rev, so
- it has no relevant changes. */
- child->remaining_ranges
- = apr_array_make(scratch_pool, 0,
- sizeof(svn_merge_range_t *));
- }
-
- /* Find the intersection of PARENT->REMAINING_RANGES with the
- range beginning when PRIMARY_URL@older_rev was deleted
- until younger_rev.
- Finally merge this rangelist with the rangelist above and
- store the result in CHILD->REMANING_RANGES. */
- deleted_rangelist =
- svn_rangelist__initialize(revision_primary_url_deleted - 1,
- peg_rev, TRUE, scratch_pool);
- SVN_ERR(svn_rangelist_intersect(&deleted_rangelist,
- deleted_rangelist,
- parent->remaining_ranges,
- FALSE, scratch_pool));
-
- SVN_ERR(svn_rangelist_merge(&(child->remaining_ranges),
- deleted_rangelist, scratch_pool));
+ SVN_ERR(rangelist_intersect_range(&child->remaining_ranges,
+ child->remaining_ranges,
+ older_rev,
+ rev_primary_url_deleted - 1,
+ FALSE,
+ scratch_pool, scratch_pool));
+
+ /* Merge into CHILD->REMANING_RANGES the intersection of
+ PARENT->REMAINING_RANGES with the range beginning when
+ PRIMARY_URL@older_rev was deleted until younger_rev. */
+ SVN_ERR(rangelist_intersect_range(&deleted_rangelist,
+ parent->remaining_ranges,
+ rev_primary_url_deleted - 1,
+ peg_rev,
+ FALSE,
+ scratch_pool, scratch_pool));
+ SVN_ERR(svn_rangelist_merge2(child->remaining_ranges,
+ deleted_rangelist, scratch_pool,
+ scratch_pool));
/* Return CHILD->REMAINING_RANGES and PARENT->REMAINING_RANGES
to reverse order if necessary. */
@@ -2962,7 +2980,7 @@ adjust_deleted_subtree_ranges(svn_client
}
else /* PRIMARY_URL@peg_rev exists. */
{
- apr_array_header_t *exists_rangelist, *non_existent_rangelist;
+ apr_array_header_t *non_existent_rangelist;
svn_location_segment_t *segment =
APR_ARRAY_IDX(segments, (segments->nelts - 1),
svn_location_segment_t *);
@@ -2989,34 +3007,25 @@ adjust_deleted_subtree_ranges(svn_client
scratch_pool));
}
- /* Since segment doesn't span older_rev:peg_rev we know
+ /* Intersect CHILD->REMAINING_RANGES with the range where PRIMARY_URL
+ exists. Since segment doesn't span older_rev:peg_rev we know
PRIMARY_URL@peg_rev didn't come into existence until
- segment->range_start + 1. Create a rangelist describing
- range where PRIMARY_URL exists and find the intersection of that
- range and CHILD->REMAINING_RANGELIST. */
- exists_rangelist = svn_rangelist__initialize(segment->range_start,
- peg_rev, TRUE,
- scratch_pool);
- SVN_ERR(svn_rangelist_intersect(&(child->remaining_ranges),
- exists_rangelist,
- child->remaining_ranges,
- FALSE, scratch_pool));
-
- /* Create a second rangelist describing the range before
- PRIMARY_URL@peg_rev came into existence and find the intersection of
- that range and PARENT->REMAINING_RANGES. Then merge that rangelist
- with exists_rangelist and store the result in
- CHILD->REMANING_RANGES. */
- non_existent_rangelist = svn_rangelist__initialize(older_rev,
- segment->range_start,
- TRUE, scratch_pool);
- SVN_ERR(svn_rangelist_intersect(&non_existent_rangelist,
- non_existent_rangelist,
- parent->remaining_ranges,
- FALSE, scratch_pool));
-
- SVN_ERR(svn_rangelist_merge(&(child->remaining_ranges),
- non_existent_rangelist, scratch_pool));
+ segment->range_start + 1. */
+ SVN_ERR(rangelist_intersect_range(&child->remaining_ranges,
+ child->remaining_ranges,
+ segment->range_start, peg_rev,
+ FALSE, scratch_pool, scratch_pool));
+
+ /* Merge into CHILD->REMANING_RANGES the intersection of
+ PARENT->REMAINING_RANGES with the range before PRIMARY_URL@peg_rev
+ came into existence. */
+ SVN_ERR(rangelist_intersect_range(&non_existent_rangelist,
+ parent->remaining_ranges,
+ older_rev, segment->range_start,
+ FALSE, scratch_pool, scratch_pool));
+ SVN_ERR(svn_rangelist_merge2(child->remaining_ranges,
+ non_existent_rangelist, scratch_pool,
+ scratch_pool));
/* Return CHILD->REMAINING_RANGES and PARENT->REMAINING_RANGES
to reverse order if necessary. */
@@ -3762,8 +3771,9 @@ filter_merged_revisions(svn_client__merg
implicit_rangelist = apr_array_make(scratch_pool, 0,
sizeof(svn_merge_range_t *));
- SVN_ERR(svn_rangelist_merge(&implicit_rangelist,
- explicit_rangelist, scratch_pool));
+ SVN_ERR(svn_rangelist_merge2(implicit_rangelist,
+ explicit_rangelist, scratch_pool,
+ scratch_pool));
SVN_ERR(svn_rangelist_reverse(implicit_rangelist, scratch_pool));
child->remaining_ranges = svn_rangelist_dup(implicit_rangelist,
result_pool);
@@ -4150,6 +4160,7 @@ find_gaps_in_merge_source_history(svn_re
apr_array_make(scratch_pool, 2, sizeof(svn_merge_range_t *));
apr_array_header_t *gap_rangelist;
apr_hash_index_t *hi;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
for (hi = apr_hash_first(scratch_pool, implicit_src_mergeinfo);
hi;
@@ -4157,9 +4168,12 @@ find_gaps_in_merge_source_history(svn_re
{
apr_array_header_t *value = svn__apr_hash_index_val(hi);
- SVN_ERR(svn_rangelist_merge(&implicit_rangelist, value,
- scratch_pool));
+ svn_pool_clear(iterpool);
+
+ SVN_ERR(svn_rangelist_merge2(implicit_rangelist, value,
+ scratch_pool, iterpool));
}
+ svn_pool_destroy(iterpool);
SVN_ERR(svn_rangelist_remove(&gap_rangelist, implicit_rangelist,
requested_rangelist, FALSE,
scratch_pool));
@@ -4318,6 +4332,8 @@ populate_remaining_ranges(apr_array_head
parent = NULL;
+ svn_pool_clear(iterpool);
+
/* If the path is absent don't do subtree merge either. */
SVN_ERR_ASSERT(child);
if (child->absent)
@@ -4438,9 +4454,9 @@ populate_remaining_ranges(apr_array_head
to, CHILD->REMAINING_RANGES as appropriate. */
if (overlaps_or_adjoins)
- SVN_ERR(svn_rangelist_merge(&(child->remaining_ranges),
- merge_b->implicit_src_gap,
- result_pool));
+ SVN_ERR(svn_rangelist_merge2(child->remaining_ranges,
+ merge_b->implicit_src_gap,
+ result_pool, iterpool));
else /* equals == TRUE */
SVN_ERR(svn_rangelist_remove(&(child->remaining_ranges),
merge_b->implicit_src_gap,
@@ -4614,8 +4630,7 @@ update_wc_mergeinfo(svn_mergeinfo_catalo
}
else
{
- SVN_ERR(svn_rangelist_merge(&rangelist, ranges,
- iterpool));
+ SVN_ERR(svn_rangelist_merge2(rangelist, ranges, iterpool, iterpool));
}
/* Update the mergeinfo by adjusting the path's rangelist. */
apr_hash_set(mergeinfo, rel_path, APR_HASH_KEY_STRING, rangelist);
@@ -5008,12 +5023,12 @@ drive_merge_report_editor(const char *ta
merge_b->ctx->wc_ctx, target_abspath,
depth,
merge_b->ra_session2, revision1,
- FALSE, merge_b->dry_run,
+ FALSE,
&merge_callbacks, merge_b,
merge_b->ctx->cancel_func,
merge_b->ctx->cancel_baton,
notification_receiver, notify_b,
- scratch_pool, scratch_pool));
+ scratch_pool));
SVN_ERR(svn_ra_do_diff3(merge_b->ra_session1,
&reporter, &report_baton, revision2,
"", depth, merge_b->ignore_ancestry,
@@ -7860,13 +7875,53 @@ typedef struct log_noop_baton_t
being diffed. */
const char *source_repos_abs;
- /* Initially empty rangelists allocated in POOL. */
+ /* Initially empty rangelists allocated in POOL. The rangelists are
+ * populated across multiple invocations of log_noop_revs(). */
apr_array_header_t *operative_ranges;
apr_array_header_t *merged_ranges;
+ /* Pool to store the rangelists. */
apr_pool_t *pool;
} log_noop_baton_t;
+/* Helper for log_noop_revs: Merge a svn_merge_range_t representation of
+ REVISION into RANGELIST. New elements added to rangelist are allocated
+ in RESULT_POOL.
+
+ This is *not* a general purpose rangelist merge but a special replacement
+ for svn_rangelist_merge when REVISION is guaranteed to be younger than any
+ element in RANGELIST. svn_rangelist_merge is O(n) worst-case (i.e. when
+ all the ranges in output rangelist are older than the incoming changes).
+ This turns the special case of a single incoming younger range into O(1).
+ */
+static svn_error_t *
+rangelist_merge_revision(apr_array_header_t *rangelist,
+ svn_revnum_t revision,
+ apr_pool_t *result_pool)
+{
+ svn_merge_range_t *new_range;
+ if (rangelist->nelts)
+ {
+ svn_merge_range_t *range = APR_ARRAY_IDX(rangelist, rangelist->nelts - 1,
+ svn_merge_range_t *);
+ if (range->end == revision - 1)
+ {
+ /* REVISION is adjacent to the youngest range in RANGELIST
+ so we can simply expand that range to encompass REVISION. */
+ range->end = revision;
+ return SVN_NO_ERROR;
+ }
+ }
+ new_range = apr_palloc(result_pool, sizeof(*new_range));
+ new_range->start = revision - 1;
+ new_range->end = revision;
+ new_range->inheritable = TRUE;
+
+ APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = new_range;
+
+ return SVN_NO_ERROR;
+}
+
/* Implements the svn_log_entry_receiver_t interface.
BATON is an log_noop_baton_t *.
@@ -7877,45 +7932,34 @@ typedef struct log_noop_baton_t
MERGE_B->TARGET_ABSPATH per the mergeinfo in CHILDREN_WITH_MERGEINFO,
then add LOG_ENTRY->REVISION to BATON->MERGED_RANGES.
- Use POOL for temporary allocations. Allocate additions to
+ Use SCRATCH_POOL for temporary allocations. Allocate additions to
BATON->MERGED_RANGES and BATON->OPERATIVE_RANGES in BATON->POOL.
+
+ Note: This callback must be invoked from oldest LOG_ENTRY->REVISION
+ to youngest LOG_ENTRY->REVISION -- see rangelist_merge_revision().
*/
static svn_error_t *
log_noop_revs(void *baton,
svn_log_entry_t *log_entry,
- apr_pool_t *pool)
+ apr_pool_t *scratch_pool)
{
log_noop_baton_t *log_gap_baton = baton;
apr_hash_index_t *hi;
svn_revnum_t revision;
svn_boolean_t log_entry_rev_required = FALSE;
- apr_array_header_t *rl1;
- apr_array_header_t *rl2;
-
- /* The baton's pool is essentially an iterpool so we must clear it
- * for each invocation of this function. */
- rl1 = svn_rangelist_dup(log_gap_baton->operative_ranges, pool);
- rl2 = svn_rangelist_dup(log_gap_baton->merged_ranges, pool);
- svn_pool_clear(log_gap_baton->pool);
- log_gap_baton->operative_ranges = svn_rangelist_dup(rl1,
- log_gap_baton->pool);
- log_gap_baton->merged_ranges = svn_rangelist_dup(rl2,
- log_gap_baton->pool);
revision = log_entry->revision;
/* Unconditionally add LOG_ENTRY->REVISION to BATON->OPERATIVE_MERGES. */
- SVN_ERR(svn_rangelist_merge(&(log_gap_baton->operative_ranges),
- svn_rangelist__initialize(revision - 1,
- revision, TRUE,
- log_gap_baton->pool),
- log_gap_baton->pool));
+ SVN_ERR(rangelist_merge_revision(log_gap_baton->operative_ranges,
+ revision,
+ log_gap_baton->pool));
/* Examine each path affected by LOG_ENTRY->REVISION. If the explicit or
inherited mergeinfo for *all* of the corresponding paths under
MERGE_B->TARGET_ABSPATH reflects that LOG_ENTRY->REVISION has been
merged, then add LOG_ENTRY->REVISION to BATON->MERGED_RANGES. */
- for (hi = apr_hash_first(pool, log_entry->changed_paths2);
+ for (hi = apr_hash_first(scratch_pool, log_entry->changed_paths2);
hi;
hi = apr_hash_next(hi))
{
@@ -7934,7 +7978,7 @@ log_noop_revs(void *baton,
if (rel_path == NULL)
continue;
cwmi_path = svn_dirent_join(log_gap_baton->merge_b->target_abspath,
- rel_path, pool);
+ rel_path, scratch_pool);
/* Find any explicit or inherited mergeinfo for PATH. */
while (!log_entry_rev_required)
@@ -7962,8 +8006,8 @@ log_noop_revs(void *baton,
}
/* Didn't find anything so crawl up to the parent. */
- cwmi_path = svn_dirent_dirname(cwmi_path, pool);
- path = svn_dirent_dirname(path, pool);
+ cwmi_path = svn_dirent_dirname(cwmi_path, scratch_pool);
+ path = svn_dirent_dirname(path, scratch_pool);
/* At this point *if* we find mergeinfo it will be inherited. */
mergeinfo_inherited = TRUE;
@@ -7972,16 +8016,17 @@ log_noop_revs(void *baton,
if (paths_explicit_rangelist)
{
apr_array_header_t *intersecting_range;
+ apr_array_header_t *rangelist;
+
+ rangelist = svn_rangelist__initialize(revision - 1, revision, TRUE,
+ scratch_pool);
/* If PATH inherited mergeinfo we must consider inheritance in the
event the inherited mergeinfo is actually non-inheritable. */
SVN_ERR(svn_rangelist_intersect(&intersecting_range,
paths_explicit_rangelist,
- svn_rangelist__initialize(
- revision - 1,
- revision, TRUE,
- pool),
- mergeinfo_inherited, pool));
+ rangelist,
+ mergeinfo_inherited, scratch_pool));
if (intersecting_range->nelts == 0)
log_entry_rev_required = TRUE;
@@ -7993,12 +8038,9 @@ log_noop_revs(void *baton,
}
if (!log_entry_rev_required)
- SVN_ERR(svn_rangelist_merge(&(log_gap_baton->merged_ranges),
- svn_rangelist__initialize(revision - 1,
- revision,
- TRUE,
- log_gap_baton->pool),
- log_gap_baton->pool));
+ SVN_ERR(rangelist_merge_revision(log_gap_baton->merged_ranges,
+ revision,
+ log_gap_baton->pool));
return SVN_NO_ERROR;
}
@@ -8039,13 +8081,12 @@ remove_noop_subtree_ranges(const char *u
apr_array_header_t *subtree_gap_ranges;
apr_array_header_t *subtree_remaining_ranges;
apr_array_header_t *log_targets;
- apr_array_header_t *merged_ranges;
- apr_array_header_t *operative_ranges;
log_noop_baton_t log_gap_baton;
svn_merge_range_t *oldest_gap_rev;
svn_merge_range_t *youngest_gap_rev;
apr_array_header_t *inoperative_ranges;
const char *repos_root_url;
+ apr_pool_t *iterpool;
/* This function is only intended to work with forward merges. */
@@ -8059,8 +8100,6 @@ remove_noop_subtree_ranges(const char *u
subtree_remaining_ranges = apr_array_make(scratch_pool, 1,
sizeof(svn_merge_range_t *));
log_targets = apr_array_make(scratch_pool, 1, sizeof(const char *));
- merged_ranges = apr_array_make(scratch_pool, 0, sizeof(svn_revnum_t *));
- operative_ranges = apr_array_make(scratch_pool, 0, sizeof(svn_revnum_t *));
/* Given the requested merge of REVISION1:REVISION2 might there be any
part of this range required for subtrees but not for the target? */
@@ -8076,18 +8115,22 @@ remove_noop_subtree_ranges(const char *u
return SVN_NO_ERROR;
/* Create a rangelist describing every range required across all subtrees. */
+ iterpool = svn_pool_create(scratch_pool);
for (i = 1; i < notify_b->children_with_mergeinfo->nelts; i++)
{
svn_client__merge_path_t *child =
APR_ARRAY_IDX(notify_b->children_with_mergeinfo, i,
svn_client__merge_path_t *);
+ svn_pool_clear(iterpool);
+
/* CHILD->REMAINING_RANGES will be NULL if child is absent. */
if (child->remaining_ranges && child->remaining_ranges->nelts)
- SVN_ERR(svn_rangelist_merge(&subtree_remaining_ranges,
- child->remaining_ranges,
- scratch_pool));
+ SVN_ERR(svn_rangelist_merge2(subtree_remaining_ranges,
+ child->remaining_ranges,
+ scratch_pool, iterpool));
}
+ svn_pool_destroy(iterpool);
/* It's possible that none of the subtrees had any remaining ranges. */
if (!subtree_remaining_ranges->nelts)
@@ -8126,14 +8169,21 @@ remove_noop_subtree_ranges(const char *u
&(log_gap_baton.source_repos_abs), merge_b->ctx->wc_ctx,
url2, repos_root_url, TRUE, NULL,
result_pool, scratch_pool));
- log_gap_baton.merged_ranges = merged_ranges;
- log_gap_baton.operative_ranges = operative_ranges;
+ log_gap_baton.merged_ranges = apr_array_make(scratch_pool, 0,
+ sizeof(svn_revnum_t *));
+ log_gap_baton.operative_ranges = apr_array_make(scratch_pool, 0,
+ sizeof(svn_revnum_t *));
log_gap_baton.pool = svn_pool_create(scratch_pool);
APR_ARRAY_PUSH(log_targets, const char *) = "";
- SVN_ERR(svn_ra_get_log2(ra_session, log_targets, youngest_gap_rev->end,
- oldest_gap_rev->start + 1, 0, TRUE, TRUE, FALSE,
+ /* Invoke the svn_log_entry_receiver_t receiver log_noop_revs() from
+ oldest to youngest. The receiver is optimized to add ranges to
+ log_gap_baton.merged_ranges and log_gap_baton.operative_ranges, but
+ requires that the revs arrive oldest to youngest -- see log_noop_revs()
+ and rangelist_merge_revision(). */
+ SVN_ERR(svn_ra_get_log2(ra_session, log_targets, oldest_gap_rev->start + 1,
+ youngest_gap_rev->end, 0, TRUE, TRUE, FALSE,
apr_array_make(scratch_pool, 0,
sizeof(const char *)),
log_noop_revs, &log_gap_baton, scratch_pool));
@@ -8145,8 +8195,8 @@ remove_noop_subtree_ranges(const char *u
log_gap_baton.operative_ranges,
inoperative_ranges, FALSE, scratch_pool));
- SVN_ERR(svn_rangelist_merge(&(log_gap_baton.merged_ranges),
- inoperative_ranges, scratch_pool));
+ SVN_ERR(svn_rangelist_merge2(log_gap_baton.merged_ranges, inoperative_ranges,
+ scratch_pool, scratch_pool));
for (i = 1; i < notify_b->children_with_mergeinfo->nelts; i++)
{
@@ -8166,6 +8216,8 @@ remove_noop_subtree_ranges(const char *u
}
}
+ svn_pool_destroy(log_gap_baton.pool);
+
return SVN_NO_ERROR;
}
@@ -8356,7 +8408,7 @@ do_directory_merge(svn_mergeinfo_catalog
/* While END_REV is valid, do the following:
1. Tweak each NOTIFY_B->CHILDREN_WITH_MERGEINFO element so that
- the element's remaing_ranges member has as it's first element
+ the element's remaining_ranges member has as its first element
a range that ends with end_rev.
2. Starting with start_rev, call drive_merge_report_editor()
@@ -9844,6 +9896,7 @@ find_unsynced_ranges(const char *source_
{
svn_mergeinfo_t mergeinfo = svn__apr_hash_index_val(hi_catalog);
apr_hash_index_t *hi_mergeinfo;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
for (hi_mergeinfo = apr_hash_first(scratch_pool, mergeinfo);
hi_mergeinfo;
@@ -9852,9 +9905,11 @@ find_unsynced_ranges(const char *source_
apr_array_header_t *rangelist =
svn__apr_hash_index_val(hi_mergeinfo);
- SVN_ERR(svn_rangelist_merge(&potentially_unmerged_ranges,
- rangelist, scratch_pool));
+ svn_pool_clear(iterpool);
+ SVN_ERR(svn_rangelist_merge2(potentially_unmerged_ranges,
+ rangelist, scratch_pool, iterpool));
}
+ svn_pool_destroy(iterpool);
}
}