commit subversion for openSUSE:Factory
Hello community, here is the log from the commit of package subversion for openSUSE:Factory checked in at 2012-12-21 10:35:25 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/subversion (Old) and /work/SRC/openSUSE:Factory/.subversion.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "subversion", Maintainer is "DMueller@suse.com" Changes: -------- --- /work/SRC/openSUSE:Factory/subversion/subversion.changes 2012-12-10 17:20:03.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.subversion.new/subversion.changes 2012-12-21 10:35:27.000000000 +0100 @@ -1,0 +2,32 @@ +Mon Dec 17 00:00:00 UTC 2012 - andreas.stieger@gmx.de + +- update to 1.7.8 [bnc#794676] + + Client- and server-side bugfixes: + * Fix typos in pt_BR, es and zh_TW translations + + Client-side bugfixes: + * add missing attributes to "svn log -v --xml" output + * fix svn patch ignoring hunks after no trailing newline + * fix hang with ra_serf during error processing + * ignore file externals with mergeinfo when merging + * fix SEGV with "svnmucc cp rev arg" during argv processing + * fix conflict handling on symlinks + + Server-side bugfixes: + * properly detect threading availability + * fix "svnadmin load --bypass-prop-validation" + * fix parsing of [groupsfoo] sections in authz file + * add Vary: header to GET responses to improve cacheability + * fix fs_fs to cleanup after failed rep transmission + * fix mod_dav_svn to complain about revisions > HEAD + + Developer-visible changes: + * fix incorrect status returned by 1.6 API + * fix compilation with g++ 4.7 +- drop subversion-1.7.5-libsvn_auth_kwallet-r1345740.patch + as it was merged upstream +- update annotation of subversion-1.7.4-ruby-1.9-RbConfig.patch +- remove excess logging from optional regression tests to reduce + spurious build failures in OBS due to size of log +- remove commands trailing "make check" which masked build failures +- add subversion-1.7.8-TestHarness_run_py_test_exit_code.patch + to ensure "make check" fails when certain Python tests fail + +------------------------------------------------------------------- Old: ---- subversion-1.7.5-libsvn_auth_kwallet-r1345740.patch subversion-1.7.7.tar.bz2 New: ---- subversion-1.7.8-TestHarness_run_py_test_exit_code.patch subversion-1.7.8.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ subversion.spec ++++++ --- /var/tmp/diff_new_pack.nSpc1i/_old 2012-12-21 10:35:30.000000000 +0100 +++ /var/tmp/diff_new_pack.nSpc1i/_new 2012-12-21 10:35:30.000000000 +0100 @@ -46,7 +46,7 @@ %endif Name: subversion -Version: 1.7.7 +Version: 1.7.8 Release: 0 # in-tree SWIG version to use for the build: %define swig_version 1.3.36 @@ -165,10 +165,8 @@ Patch37: subversion-no-build-date.patch # PATCH-FEATURE-UPSTREAM subversion-neon-systemproxy.patch dimstar@opensuse.org -- Use system proxy offered by neon, if no specific config is used (Thus, actually using libproxy in the background to use 'the right proxy' as configured in the system). Patch38: subversion-neon-systemproxy.patch -# PATCH-FIX-UPSTREAM subversion-1.7.4-ruby-1.9-RbConfig.patch andreas.stieger@gmx.de -- Fixes warning/error in ruby 1.9 "Use RbConfig instead of obsolete and deprecated Config" Patch39: subversion-1.7.4-ruby-1.9-RbConfig.patch -# PATCH-FIX-UPSTREAM subversion-1.7.5-libsvn_auth_kwallet-r1345740.patch peters@apache.org -- Remove a cast that is both ugly, and apparently illegal in g++ 4.7. -Patch40: subversion-1.7.5-libsvn_auth_kwallet-r1345740.patch +Patch40: subversion-1.7.8-TestHarness_run_py_test_exit_code.patch # %if %with_ruby %if %{!?rb_arch:1}0 @@ -341,8 +339,8 @@ %patch31 %patch37 %patch38 -%patch39 -%patch40 +%patch39 -p1 +%patch40 -p1 SQLITE_RECOMMENDED_VER=$(grep -E '^SQLITE_RECOMMENDED_VER=' configure.ac|cut -f2 -d=|cut -f2 -d\") #" @@ -631,7 +629,7 @@ CHECK_FS_TYPE=fsfs # run tests over ra_local (file://) -%__make check LOG_TO_STDOUT=true CLEANUP=true FS_TYPE="$CHECK_FS_TYPE" +%__make check CLEANUP=true FS_TYPE="$CHECK_FS_TYPE" SVNSERVE_PIDFILE="$PWD/svnserve.pid" HTTPD_PIDFILE="$PWD/httpd.pid" @@ -677,7 +675,7 @@ # run tests over ra_svn (svn://) "$PWD/subversion/svnserve/svnserve" --listen-host 127.0.0.1 --listen-port "$free_port" --pid-file "$SVNSERVE_PIDFILE" -d -r "$PWD/subversion/tests/cmdline" -%__make check LOG_TO_STDOUT=true CLEANUP=true FS_TYPE="$CHECK_FS_TYPE" BASE_URL="svn://127.0.0.1:$free_port" || cat $RPM_SOURCE_DIR/%name*/tests.log +%__make check CLEANUP=true FS_TYPE="$CHECK_FS_TYPE" BASE_URL="svn://127.0.0.1:$free_port" kill -9 `cat "$SVNSERVE_PIDFILE" 2>/dev/null` %__rm "$SVNSERVE_PIDFILE" @@ -693,7 +691,7 @@ sed "s/REPLACE_BUILDDIR/${PWD//\//\\/}/g" | \ sed "s/REPLACE_APACHE_LIBEXECDIR/${APACHE_LIBEXECDIR//\//\\/}/g" > httpd.conf LD_LIBRARY_PATH="%{buildroot}%{_libdir}:$LD_LIBRARY_PATH" /usr/sbin/httpd2 -d "$PWD" -f httpd.conf -%__make check LOG_TO_STDOUT=true CLEANUP=true FS_TYPE="$CHECK_FS_TYPE" BASE_URL=http://127.0.0.1:$free_port HTTP_LIBRARY=neon || cat $RPM_SOURCE_DIR/%name*/tests.log +%__make check CLEANUP=true FS_TYPE="$CHECK_FS_TYPE" BASE_URL=http://127.0.0.1:$free_port HTTP_LIBRARY=neon kill -9 `cat "$HTTPD_PIDFILE" 2>/dev/null` %__rm "$HTTPD_PIDFILE" %endif # neon @@ -710,7 +708,7 @@ sed "s/REPLACE_BUILDDIR/${PWD//\//\\/}/g" | \ sed "s/REPLACE_APACHE_LIBEXECDIR/${APACHE_LIBEXECDIR//\//\\/}/g" > httpd.conf LD_LIBRARY_PATH="%{buildroot}%{_libdir}:$LD_LIBRARY_PATH" /usr/sbin/httpd2 -d "$PWD" -f httpd.conf -%__make check LOG_TO_STDOUT=true CLEANUP=true FS_TYPE="$CHECK_FS_TYPE" BASE_URL=http://127.0.0.1:$free_port HTTP_LIBRARY=serf || cat $RPM_SOURCE_DIR/%name*/tests.log +%__make check CLEANUP=true FS_TYPE="$CHECK_FS_TYPE" BASE_URL=http://127.0.0.1:$free_port HTTP_LIBRARY=serf kill -9 `cat "$HTTPD_PIDFILE" 2>/dev/null` %__rm "$HTTPD_PIDFILE" %endif # serf ++++++ subversion-1.7.4-ruby-1.9-RbConfig.patch ++++++ --- /var/tmp/diff_new_pack.nSpc1i/_old 2012-12-21 10:35:30.000000000 +0100 +++ /var/tmp/diff_new_pack.nSpc1i/_new 2012-12-21 10:35:30.000000000 +0100 @@ -1,7 +1,36 @@ -Index: build/ac-macros/swig.m4 +From: Andreas Stieger <andreas.stieger@gmx.de> +Date: Sat, 12 May 2012 00:20:35 +0100 +Subject: [PATCH] fix Ruby 1.9 deprecation warning for Config, use RbConfig +References: http://mail-archives.apache.org/mod_mbox/subversion-dev/201205.mbox/%3C4FAD9... https://mail-archives.apache.org/mod_mbox/subversion-commits/201205.mbox/%3C... +Upstream: merged + +Fixes warning/error in ruby 1.9 "Use RbConfig instead of obsolete and deprecated Config" + +$ svn log -r1337514 -v https://svn.apache.org/repos/asf/subversion/trunk/ +------------------------------------------------------------------------ +r1337514 | astieger | 2012-05-12 12:19:00 +0100 (Sat, 12 May 2012) | 9 lines +Changed paths: + M /subversion/trunk/build/ac-macros/swig.m4 + M /subversion/trunk/configure.ac + +fix Ruby 1.9 deprecation warning for Config, use RbConfig + +* configure.ac + replace Config with RbConfig +* build/ac-macros/swig.m4 + replace Config with RbConfig + +Approved by: gstein + +--- + build/ac-macros/swig.m4 | 2 +- + configure.ac | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +Index: subversion-1.7.8/build/ac-macros/swig.m4 =================================================================== ---- build/ac-macros/swig.m4.orig 2011-06-22 15:45:03.000000000 +0100 -+++ build/ac-macros/swig.m4 2012-10-04 18:38:50.000000000 +0100 +--- subversion-1.7.8.orig/build/ac-macros/swig.m4 2011-06-22 15:45:03.000000000 +0100 ++++ subversion-1.7.8/build/ac-macros/swig.m4 2012-12-11 13:00:18.000000000 +0000 @@ -187,7 +187,7 @@ AC_DEFUN(SVN_FIND_SWIG, for var_name in arch archdir CC LDSHARED DLEXT LIBS LIBRUBYARG \ rubyhdrdir sitedir sitelibdir sitearchdir libdir @@ -11,10 +40,10 @@ eval "rbconfig_$var_name=\"$rbconfig_tmp\"" done -Index: configure.ac +Index: subversion-1.7.8/configure.ac =================================================================== ---- configure.ac.orig 2012-10-02 18:18:00.000000000 +0100 -+++ configure.ac 2012-10-04 18:38:50.000000000 +0100 +--- subversion-1.7.8.orig/configure.ac 2012-10-02 18:18:00.000000000 +0100 ++++ subversion-1.7.8/configure.ac 2012-12-11 13:00:18.000000000 +0000 @@ -1117,12 +1117,12 @@ if test "$RUBY" != "none"; then AC_PATH_PROGS(RDOC, rdoc rdoc1.8 rdoc18, none) fi ++++++ subversion-1.7.8-TestHarness_run_py_test_exit_code.patch ++++++ Date: Wed, 12 Dec 2012 20:01:11 +0000 From: Andreas Stieger <andreas.stieger@gmx.de> Subject: [PATCH] Prevent false negative results of "make check" in Python References: http://svn.apache.org/viewvc/subversion/trunk/build/run_tests.py?r1=1420904&... Upstream: merged Patch changes the test harness to prevent some false negatives when running the test suite. Specifically, if a python test initialisation returns in such a way that the test runner doesn't know how to handle the result, change to code to return a non-zero exit code like and, subsequently, have "make check" fail correctly. Reproducible by using Python < 2.5 or missing sqlite3 Python bindings, exit triggered by subversion/tests/cmdline/svntest/__init__.py In the openSUSE obs, affects SLE 11 only, when building with unit tests. svn diff -c1420944 https://svn.apache.org/repos/asf/subversion/trunk --- build/run_tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) Index: subversion-1.7.8/build/run_tests.py =================================================================== --- subversion-1.7.8.orig/build/run_tests.py 2012-09-29 05:02:11.000000000 +0100 +++ subversion-1.7.8/build/run_tests.py 2012-12-12 20:48:29.000000000 +0000 @@ -378,7 +378,7 @@ class TestHarness: ('.py', 'U', imp.PY_SOURCE)) except: print('Don\'t know what to do about ' + progbase) - raise + sys.exit(1) import svntest.main ++++++ subversion-1.7.7.tar.bz2 -> subversion-1.7.8.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/CHANGES new/subversion-1.7.8/CHANGES --- old/subversion-1.7.7/CHANGES 2012-10-03 18:36:35.000000000 +0200 +++ new/subversion-1.7.8/CHANGES 2012-12-10 20:30:57.000000000 +0100 @@ -1,3 +1,34 @@ +Version 1.7.8 +(17 Dec 2012, from /branches/1.7.x) +http://svn.apache.org/repos/asf/subversion/tags/1.7.8 + User-visible changes + - Client- and server-side bugfixes: + * Fix typos in pt_BR, es and zh_TW translations (r1402417, r1402421) + + - Client-side bugfixes: + * fix crash with --username option on Windows (r1396285) + * add missing attributes to "svn log -v --xml" output (r1398100) + * fix svn patch ignoring hunks after no trailing newline (r139917) + * fix hang with ra_serf during error processing (r1403583) + * ignore file externals with mergeinfo when merging (r1401915) + * fix SEGV with "svnmucc cp rev arg" during argv processing (issue #4079) + * fix conflict handling on symlinks (issue #4091) + + - Server-side bugfixes: + * properly detect threading availability (r1398325) + * fix "svnadmin load --bypass-prop-validation" (r1237779) + * fix parsing of [groupsfoo] sections in authz file (issue #3531) + * add Vary: header to GET responses to improve cacheability (r1390653) + * fix fs_fs to cleanup after failed rep transmission (r1403964, et al) + * fix mod_dav_svn to complain about revisions > HEAD (r1403588) + + Developer-visible changes: + - General: + * fix incorrect status returned by 1.6 API (r1403258) + * fix compilation with g++ 4.7 (r1345740) + * fix svn_uri_get_file_url_from_dirent on Windows (r1409146) + + Version 1.7.7 (09 Oct 2012, from /branches/1.7.x) http://svn.apache.org/repos/asf/subversion/tags/1.7.7 @@ -47,7 +78,7 @@ - Client-side bugfixes: * Fix "svn status -u --depth empty FILE" (r1348822, r1349215) * Fix example output of 'svn help status' (issue #3962) - * svn propset of svn:eol-style might not notice related text changes (r1353572) + * propset of svn:eol-style might not notice related text changes (r1353572) * sort output of 'svn propget -R' (r1355699) * sort output of 'svn proplist' (r1355698) * sort output of 'svn status' (r1341012) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/configure new/subversion-1.7.8/configure --- old/subversion-1.7.7/configure 2012-10-03 19:31:54.000000000 +0200 +++ new/subversion-1.7.8/configure 2012-12-10 21:05:58.000000000 +0100 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.68 for subversion 1.7.7. +# Generated by GNU Autoconf 2.68 for subversion 1.7.8. # # Report bugs to <http://subversion.apache.org/>. # @@ -570,8 +570,8 @@ # Identity of this package. PACKAGE_NAME='subversion' PACKAGE_TARNAME='subversion' -PACKAGE_VERSION='1.7.7' -PACKAGE_STRING='subversion 1.7.7' +PACKAGE_VERSION='1.7.8' +PACKAGE_STRING='subversion 1.7.8' PACKAGE_BUGREPORT='http://subversion.apache.org/' PACKAGE_URL='' @@ -1442,7 +1442,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures subversion 1.7.7 to adapt to many kinds of systems. +\`configure' configures subversion 1.7.8 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1508,7 +1508,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of subversion 1.7.7:";; + short | recursive ) echo "Configuration of subversion 1.7.8:";; esac cat <<\_ACEOF @@ -1725,7 +1725,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -subversion configure 1.7.7 +subversion configure 1.7.8 generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. @@ -2269,7 +2269,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by subversion $as_me 1.7.7, which was +It was created by subversion $as_me 1.7.8, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ @@ -2649,8 +2649,8 @@ -{ $as_echo "$as_me:${as_lineno-$LINENO}: Configuring Subversion 1.7.7" >&5 -$as_echo "$as_me: Configuring Subversion 1.7.7" >&6;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: Configuring Subversion 1.7.8" >&5 +$as_echo "$as_me: Configuring Subversion 1.7.8" >&6;} abs_srcdir="`cd $srcdir && pwd`" @@ -23817,7 +23817,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by subversion $as_me 1.7.7, which was +This file was extended by subversion $as_me 1.7.8, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -23883,7 +23883,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -subversion config.status 1.7.7 +subversion config.status 1.7.8 configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/subversion/bindings/swig/perl/native/core.c new/subversion-1.7.8/subversion/bindings/swig/perl/native/core.c --- old/subversion-1.7.7/subversion/bindings/swig/perl/native/core.c 2012-10-03 19:31:25.000000000 +0200 +++ new/subversion-1.7.8/subversion/bindings/swig/perl/native/core.c 2012-12-10 21:05:28.000000000 +0100 @@ -42146,12 +42146,12 @@ } while(0) /*@SWIG@*/; /*@SWIG:/home/breser/wandisco/svnrm/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "SVN_VER_PATCH", TRUE | 0x2 | GV_ADDMULTI); - sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(7))); + sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(8))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/home/breser/wandisco/svnrm/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "SVN_VER_MICRO", TRUE | 0x2 | GV_ADDMULTI); - sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(7))); + sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(8))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/home/breser/wandisco/svnrm/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do { @@ -42161,7 +42161,7 @@ } while(0) /*@SWIG@*/; /*@SWIG:/home/breser/wandisco/svnrm/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "SVN_VER_TAG", TRUE | 0x2 | GV_ADDMULTI); - sv_setsv(sv, SWIG_FromCharPtr(" (r1393599)")); + sv_setsv(sv, SWIG_FromCharPtr(" (r1419691)")); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/home/breser/wandisco/svnrm/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do { @@ -42171,22 +42171,22 @@ } while(0) /*@SWIG@*/; /*@SWIG:/home/breser/wandisco/svnrm/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "SVN_VER_REVISION", TRUE | 0x2 | GV_ADDMULTI); - sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(1393599))); + sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(1419691))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/home/breser/wandisco/svnrm/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "SVN_VER_NUM", TRUE | 0x2 | GV_ADDMULTI); - sv_setsv(sv, SWIG_FromCharPtr("1.7.7")); + sv_setsv(sv, SWIG_FromCharPtr("1.7.8")); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/home/breser/wandisco/svnrm/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "SVN_VER_NUMBER", TRUE | 0x2 | GV_ADDMULTI); - sv_setsv(sv, SWIG_FromCharPtr("1.7.7")); + sv_setsv(sv, SWIG_FromCharPtr("1.7.8")); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/home/breser/wandisco/svnrm/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "SVN_VERSION", TRUE | 0x2 | GV_ADDMULTI); - sv_setsv(sv, SWIG_FromCharPtr("1.7.7 (r1393599)")); + sv_setsv(sv, SWIG_FromCharPtr("1.7.8 (r1419691)")); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/home/breser/wandisco/svnrm/prefix/share/swig/2.0.4/perl5/perltypemaps.swg,65,%set_constant@*/ do { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/subversion/bindings/swig/python/core.c new/subversion-1.7.8/subversion/bindings/swig/python/core.c --- old/subversion-1.7.7/subversion/bindings/swig/python/core.c 2012-10-03 19:31:06.000000000 +0200 +++ new/subversion-1.7.8/subversion/bindings/swig/python/core.c 2012-12-10 21:05:08.000000000 +0100 @@ -30993,15 +30993,15 @@ SWIG_Python_SetConstant(d, "SVN_ALLOCATOR_RECOMMENDED_MAX_FREE",SWIG_From_long((long)((4096*1024)))); SWIG_Python_SetConstant(d, "SVN_VER_MAJOR",SWIG_From_long((long)(1))); SWIG_Python_SetConstant(d, "SVN_VER_MINOR",SWIG_From_long((long)(7))); - SWIG_Python_SetConstant(d, "SVN_VER_PATCH",SWIG_From_long((long)(7))); - SWIG_Python_SetConstant(d, "SVN_VER_MICRO",SWIG_From_long((long)(7))); + SWIG_Python_SetConstant(d, "SVN_VER_PATCH",SWIG_From_long((long)(8))); + SWIG_Python_SetConstant(d, "SVN_VER_MICRO",SWIG_From_long((long)(8))); SWIG_Python_SetConstant(d, "SVN_VER_LIBRARY",SWIG_From_long((long)(1))); - SWIG_Python_SetConstant(d, "SVN_VER_TAG",SWIG_FromCharPtr(" (r1393599)")); + SWIG_Python_SetConstant(d, "SVN_VER_TAG",SWIG_FromCharPtr(" (r1419691)")); SWIG_Python_SetConstant(d, "SVN_VER_NUMTAG",SWIG_FromCharPtr("")); - SWIG_Python_SetConstant(d, "SVN_VER_REVISION",SWIG_From_long((long)(1393599))); - SWIG_Python_SetConstant(d, "SVN_VER_NUM",SWIG_FromCharPtr("1.7.7")); - SWIG_Python_SetConstant(d, "SVN_VER_NUMBER",SWIG_FromCharPtr("1.7.7")); - SWIG_Python_SetConstant(d, "SVN_VERSION",SWIG_FromCharPtr("1.7.7 (r1393599)")); + SWIG_Python_SetConstant(d, "SVN_VER_REVISION",SWIG_From_long((long)(1419691))); + SWIG_Python_SetConstant(d, "SVN_VER_NUM",SWIG_FromCharPtr("1.7.8")); + SWIG_Python_SetConstant(d, "SVN_VER_NUMBER",SWIG_FromCharPtr("1.7.8")); + SWIG_Python_SetConstant(d, "SVN_VERSION",SWIG_FromCharPtr("1.7.8 (r1419691)")); SWIG_Python_SetConstant(d, "svn_prop_entry_kind",SWIG_From_long((long)(svn_prop_entry_kind))); SWIG_Python_SetConstant(d, "svn_prop_wc_kind",SWIG_From_long((long)(svn_prop_wc_kind))); SWIG_Python_SetConstant(d, "svn_prop_regular_kind",SWIG_From_long((long)(svn_prop_regular_kind))); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/subversion/bindings/swig/ruby/core.c new/subversion-1.7.8/subversion/bindings/swig/ruby/core.c --- old/subversion-1.7.7/subversion/bindings/swig/ruby/core.c 2012-10-03 19:31:41.000000000 +0200 +++ new/subversion-1.7.8/subversion/bindings/swig/ruby/core.c 2012-12-10 21:05:44.000000000 +0100 @@ -37520,15 +37520,15 @@ rb_define_module_function(mCore, "svn_pool_create", _wrap_svn_pool_create, -1); rb_define_const(mCore, "SVN_VER_MAJOR", SWIG_From_int((int)(1))); rb_define_const(mCore, "SVN_VER_MINOR", SWIG_From_int((int)(7))); - rb_define_const(mCore, "SVN_VER_PATCH", SWIG_From_int((int)(7))); - rb_define_const(mCore, "SVN_VER_MICRO", SWIG_From_int((int)(7))); + rb_define_const(mCore, "SVN_VER_PATCH", SWIG_From_int((int)(8))); + rb_define_const(mCore, "SVN_VER_MICRO", SWIG_From_int((int)(8))); rb_define_const(mCore, "SVN_VER_LIBRARY", SWIG_From_int((int)(1))); - rb_define_const(mCore, "SVN_VER_TAG", SWIG_FromCharPtr(" (r1393599)")); + rb_define_const(mCore, "SVN_VER_TAG", SWIG_FromCharPtr(" (r1419691)")); rb_define_const(mCore, "SVN_VER_NUMTAG", SWIG_FromCharPtr("")); - rb_define_const(mCore, "SVN_VER_REVISION", SWIG_From_int((int)(1393599))); - rb_define_const(mCore, "SVN_VER_NUM", SWIG_FromCharPtr("1.7.7")); - rb_define_const(mCore, "SVN_VER_NUMBER", SWIG_FromCharPtr("1.7.7")); - rb_define_const(mCore, "SVN_VERSION", SWIG_FromCharPtr("1.7.7 (r1393599)")); + rb_define_const(mCore, "SVN_VER_REVISION", SWIG_From_int((int)(1419691))); + rb_define_const(mCore, "SVN_VER_NUM", SWIG_FromCharPtr("1.7.8")); + rb_define_const(mCore, "SVN_VER_NUMBER", SWIG_FromCharPtr("1.7.8")); + rb_define_const(mCore, "SVN_VERSION", SWIG_FromCharPtr("1.7.8 (r1419691)")); SwigClassSvn_version_t.klass = rb_define_class_under(mCore, "Svn_version_t", rb_cObject); SWIG_TypeClientData(SWIGTYPE_p_svn_version_t, (void *) &SwigClassSvn_version_t); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/subversion/include/svn_version.h new/subversion-1.7.8/subversion/include/svn_version.h --- old/subversion-1.7.7/subversion/include/svn_version.h 2012-10-03 19:30:51.000000000 +0200 +++ new/subversion-1.7.8/subversion/include/svn_version.h 2012-12-10 21:04:50.000000000 +0100 @@ -71,7 +71,7 @@ * * @since New in 1.1. */ -#define SVN_VER_PATCH 7 +#define SVN_VER_PATCH 8 /** @deprecated Provided for backward compatibility with the 1.0 API. */ @@ -94,7 +94,7 @@ * * Always change this at the same time as SVN_VER_NUMTAG. */ -#define SVN_VER_TAG " (r1393599)" +#define SVN_VER_TAG " (r1419691)" /** Number tag: a string describing the version. @@ -120,7 +120,7 @@ * When rolling a tarball, we automatically replace it with what we * guess to be the correct revision number. */ -#define SVN_VER_REVISION 1393599 +#define SVN_VER_REVISION 1419691 /* Version strings composed from the above definitions. */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/subversion/libsvn_auth_kwallet/kwallet.cpp new/subversion-1.7.8/subversion/libsvn_auth_kwallet/kwallet.cpp --- old/subversion-1.7.7/subversion/libsvn_auth_kwallet/kwallet.cpp 2012-10-02 19:18:00.000000000 +0200 +++ new/subversion-1.7.8/subversion/libsvn_auth_kwallet/kwallet.cpp 2012-12-04 05:02:25.000000000 +0100 @@ -60,6 +60,9 @@ /* KWallet simple provider, puts passwords in KWallet */ /*-----------------------------------------------------------------------*/ +static int q_argc = 1; +static char q_argv0[] = "svn"; // Build non-const char * from string constant +static char *q_argv[] = { q_argv0 }; static const char * get_application_name(apr_hash_t *parameters, @@ -212,12 +215,11 @@ QCoreApplication *app; if (! qApp) { - int argc = 1; - app = new QCoreApplication(argc, (char *[1]) {(char *) "svn"}); + int argc = q_argc; + app = new QCoreApplication(argc, q_argv); } - KCmdLineArgs::init(1, - (char *[1]) {(char *) "svn"}, + KCmdLineArgs::init(q_argc, q_argv, get_application_name(parameters, pool), "subversion", ki18n(get_application_name(parameters, pool)), @@ -289,12 +291,11 @@ QCoreApplication *app; if (! qApp) { - int argc = 1; - app = new QCoreApplication(argc, (char *[1]) {(char *) "svn"}); + int argc = q_argc; + app = new QCoreApplication(argc, q_argv); } - KCmdLineArgs::init(1, - (char *[1]) {(char *) "svn"}, + KCmdLineArgs::init(q_argc, q_argv, get_application_name(parameters, pool), "subversion", ki18n(get_application_name(parameters, pool)), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/subversion/libsvn_client/merge.c new/subversion-1.7.8/subversion/libsvn_client/merge.c --- old/subversion-1.7.7/subversion/libsvn_client/merge.c 2012-05-09 14:02:45.000000000 +0200 +++ new/subversion-1.7.8/subversion/libsvn_client/merge.c 2012-11-09 05:00:46.000000000 +0100 @@ -10577,6 +10577,32 @@ &working_revision, NULL, svn_depth_infinity, NULL, ctx, scratch_pool, scratch_pool)); + if (apr_hash_count(subtrees_with_mergeinfo)) + { + apr_hash_t *externals; + apr_hash_index_t *hi; + + SVN_ERR(svn_wc__externals_defined_below(&externals, ctx->wc_ctx, + target_abspath, scratch_pool, + scratch_pool)); + + for (hi = apr_hash_first(scratch_pool, subtrees_with_mergeinfo); + hi; + hi = apr_hash_next(hi)) + { + const char *wc_path = svn__apr_hash_index_key(hi); + + /* svn_client_propget4 picks up file externals with + mergeinfo, but we don't want those. */ + if (apr_hash_get(externals, wc_path, APR_HASH_KEY_STRING)) + { + apr_hash_set(subtrees_with_mergeinfo, wc_path, + APR_HASH_KEY_STRING, NULL); + continue; + } + } + } + /* Open two RA sessions, one to our source and one to our target. */ no_rev.kind = svn_opt_revision_unspecified; SVN_ERR(svn_client__ra_session_from_path(&source_ra_session, &rev2, &url2, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/subversion/libsvn_diff/parse-diff.c new/subversion-1.7.8/subversion/libsvn_diff/parse-diff.c --- old/subversion-1.7.7/subversion/libsvn_diff/parse-diff.c 2012-09-29 06:02:09.000000000 +0200 +++ new/subversion-1.7.8/subversion/libsvn_diff/parse-diff.c 2012-10-31 04:59:51.000000000 +0100 @@ -688,7 +688,6 @@ original_end = hunk_text_end; if (modified_end == 0) modified_end = hunk_text_end; - break; } SVN_ERR(svn_io_file_seek(apr_file, APR_SET, &pos, iterpool)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/subversion/libsvn_fs_fs/fs_fs.c new/subversion-1.7.8/subversion/libsvn_fs_fs/fs_fs.c --- old/subversion-1.7.7/subversion/libsvn_fs_fs/fs_fs.c 2012-08-02 06:03:02.000000000 +0200 +++ new/subversion-1.7.8/subversion/libsvn_fs_fs/fs_fs.c 2012-11-21 05:02:07.000000000 +0100 @@ -5497,6 +5497,38 @@ return SVN_NO_ERROR; } +/* Something went wrong and the pool for the rep write is being + cleared before we've finished writing the rep. So we need + to remove the rep from the protorevfile and we need to unlock + the protorevfile. */ +static apr_status_t +rep_write_cleanup(void *data) +{ + struct rep_write_baton *b = data; + const char *txn_id = svn_fs_fs__id_txn_id(b->noderev->id); + svn_error_t *err; + + /* Truncate and close the protorevfile. */ + err = svn_io_file_trunc(b->file, b->rep_offset, b->pool); + err = svn_error_compose_create(err, svn_io_file_close(b->file, b->pool)); + + /* Remove our lock regardless of any preceeding errors so that the + being_written flag is always removed and stays consistent with the + file lock which will be removed no matter what since the pool is + going away. */ + err = svn_error_compose_create(err, unlock_proto_rev(b->fs, txn_id, + b->lockcookie, b->pool)); + if (err) + { + apr_status_t rc = err->apr_err; + svn_error_clear(err); + return rc; + } + + return APR_SUCCESS; +} + + /* Get a rep_write_baton and store it in *WB_P for the representation indicated by NODEREV in filesystem FS. Perform allocations in POOL. Only appropriate for file contents, not for props or @@ -5560,6 +5592,10 @@ /* Now determine the offset of the actual svndiff data. */ SVN_ERR(get_file_offset(&b->delta_start, file, b->pool)); + /* Cleanup in case something goes wrong. */ + apr_pool_cleanup_register(b->pool, b, rep_write_cleanup, + apr_pool_cleanup_null); + /* Prepare to write the svndiff data. */ svn_txdelta_to_svndiff3(&wh, &whb, @@ -5667,6 +5703,9 @@ b->noderev->data_rep = rep; } + /* Remove cleanup callback. */ + apr_pool_cleanup_kill(b->pool, b, rep_write_cleanup); + /* Write out the new node-rev information. */ SVN_ERR(svn_fs_fs__put_node_revision(b->fs, b->noderev->id, b->noderev, FALSE, b->pool)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/subversion/libsvn_ra_serf/util.c new/subversion-1.7.8/subversion/libsvn_ra_serf/util.c --- old/subversion-1.7.7/subversion/libsvn_ra_serf/util.c 2012-10-02 19:19:46.000000000 +0200 +++ new/subversion-1.7.8/subversion/libsvn_ra_serf/util.c 2012-10-31 05:00:11.000000000 +0100 @@ -758,7 +758,12 @@ SVN_ERR(svn_cstring_atoi64(&val, err_code)); ctx->error->apr_err = (apr_status_t)val; } - else + + /* If there's no error code provided, or if the provided code is + 0 (which can happen sometimes depending on how the error is + constructed on the server-side), just pick a generic error + code to run with. */ + if (! ctx->error->apr_err) { ctx->error->apr_err = SVN_ERR_RA_DAV_REQUEST_FAILED; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/subversion/libsvn_repos/authz.c new/subversion-1.7.8/subversion/libsvn_repos/authz.c --- old/subversion-1.7.7/subversion/libsvn_repos/authz.c 2011-11-15 19:13:44.000000000 +0100 +++ new/subversion-1.7.8/subversion/libsvn_repos/authz.c 2012-10-22 06:03:32.000000000 +0200 @@ -714,14 +714,15 @@ { struct authz_validate_baton *b = baton; - /* If the section is the groups definition, use the group checking - callback. Otherwise, use the rule checking callback. */ - if (strncmp(name, "groups", 6) == 0) + /* Use the group checking callback for the "groups" section... */ + if (strcmp(name, "groups") == 0) svn_config_enumerate2(b->config, name, authz_validate_group, baton, pool); - else if (strncmp(name, "aliases", 7) == 0) + /* ...and the alias checking callback for "aliases"... */ + else if (strcmp(name, "aliases") == 0) svn_config_enumerate2(b->config, name, authz_validate_alias, baton, pool); + /* ...but for everything else use the rule checking callback. */ else svn_config_enumerate2(b->config, name, authz_validate_rule, baton, pool); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/subversion/libsvn_repos/load-fs-vtable.c new/subversion-1.7.8/subversion/libsvn_repos/load-fs-vtable.c --- old/subversion-1.7.7/subversion/libsvn_repos/load-fs-vtable.c 2011-07-08 03:28:39.000000000 +0200 +++ new/subversion-1.7.8/subversion/libsvn_repos/load-fs-vtable.c 2012-10-20 06:03:25.000000000 +0200 @@ -154,12 +154,12 @@ apr_pool_t *pool) { if (validate_props) - return svn_fs_change_rev_prop2(svn_repos_fs(repos), revision, name, - NULL, value, pool); - else return svn_repos_fs_change_rev_prop4(repos, revision, NULL, name, NULL, value, FALSE, FALSE, NULL, NULL, pool); + else + return svn_fs_change_rev_prop2(svn_repos_fs(repos), revision, name, + NULL, value, pool); } /* Change property NAME to VALUE for PATH in TXN_ROOT. If diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/subversion/libsvn_subr/dirent_uri.c new/subversion-1.7.8/subversion/libsvn_subr/dirent_uri.c --- old/subversion-1.7.7/subversion/libsvn_subr/dirent_uri.c 2012-08-24 05:59:51.000000000 +0200 +++ new/subversion-1.7.8/subversion/libsvn_subr/dirent_uri.c 2012-12-06 05:02:28.000000000 +0100 @@ -2443,7 +2443,17 @@ *url = apr_pstrcat(pool, "file:", dirent, NULL); } else - *url = apr_pstrcat(pool, "file:///", dirent, NULL); + { + char *uri = apr_pstrcat(pool, "file:///", dirent, NULL); + apr_size_t len = 8 /* strlen("file:///") */ + strlen(dirent); + + /* "C:/" is a canonical dirent on Windows, + but "file:///C:/" is not a canonical uri */ + if (uri[len-1] == '/') + uri[len-1] = '\0'; + + *url = uri; + } #endif return SVN_NO_ERROR; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/subversion/libsvn_subr/svn_cache_config.c new/subversion-1.7.8/subversion/libsvn_subr/svn_cache_config.c --- old/subversion-1.7.7/subversion/libsvn_subr/svn_cache_config.c 2011-08-23 17:04:38.000000000 +0200 +++ new/subversion-1.7.8/subversion/libsvn_subr/svn_cache_config.c 2012-10-16 06:03:13.000000000 +0200 @@ -52,7 +52,7 @@ * has little impact on performance and a more modest * value (< 100) may be more suitable. */ -#ifdef APR_HAS_THREADS +#if APR_HAS_THREADS FALSE /* assume multi-threaded operation. * Because this simply activates proper synchronization * between threads, it is a safe default. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/subversion/libsvn_subr/win32_crypto.c new/subversion-1.7.8/subversion/libsvn_subr/win32_crypto.c --- old/subversion-1.7.7/subversion/libsvn_subr/win32_crypto.c 2012-10-02 19:18:00.000000000 +0200 +++ new/subversion-1.7.8/subversion/libsvn_subr/win32_crypto.c 2012-10-12 06:02:57.000000000 +0200 @@ -104,7 +104,7 @@ SVN_ERR(svn_auth__simple_password_get(done, &in, creds, realmstring, username, parameters, non_interactive, pool)); - if (!done) + if (!*done) return SVN_NO_ERROR; blobin.cbData = strlen(in); @@ -243,7 +243,7 @@ SVN_ERR(svn_auth__ssl_client_cert_pw_get(done, &in, creds, realmstring, username, parameters, non_interactive, pool)); - if (!done) + if (!*done) return SVN_NO_ERROR; blobin.cbData = strlen(in); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/subversion/libsvn_wc/update_editor.c new/subversion-1.7.8/subversion/libsvn_wc/update_editor.c --- old/subversion-1.7.7/subversion/libsvn_wc/update_editor.c 2012-04-26 06:02:08.000000000 +0200 +++ new/subversion-1.7.8/subversion/libsvn_wc/update_editor.c 2012-12-10 18:56:17.000000000 +0100 @@ -750,6 +750,10 @@ initialized, this is never NULL, but it may have zero elements. */ apr_array_header_t *propchanges; + /* For existing files, whether there are local modifications. FALSE for added + files */ + svn_boolean_t local_prop_mods; + /* Bump information for the directory this file lives in */ struct bump_dir_info *bump_info; @@ -3299,7 +3303,7 @@ &fb->changed_author, NULL, &fb->original_checksum, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - &conflicted, NULL, NULL, NULL, + &conflicted, NULL, NULL, &fb->local_prop_mods, NULL, NULL, &have_work, eb->db, fb->local_abspath, fb->pool, scratch_pool)); @@ -3522,6 +3526,85 @@ if (!fb->edited && svn_property_kind(NULL, name) == svn_prop_regular_kind) SVN_ERR(mark_file_edited(fb, scratch_pool)); + if (! fb->shadowed + && strcmp(name, SVN_PROP_SPECIAL) == 0) + { + struct edit_baton *eb = fb->edit_baton; + svn_boolean_t modified = FALSE; + svn_boolean_t becomes_symlink; + svn_boolean_t was_symlink; + + /* Let's see if we have a change as in some scenarios servers report + non-changes of properties. */ + becomes_symlink = (value != NULL); + + if (fb->adding_file) + was_symlink = becomes_symlink; /* No change */ + else + { + apr_hash_t *props; + + /* We read the server-props, not the ACTUAL props here as we just + want to see if this is really an incoming prop change. */ + SVN_ERR(svn_wc__db_base_get_props(&props, eb->db, + fb->local_abspath, + scratch_pool, scratch_pool)); + + was_symlink = ((props + && apr_hash_get(props, SVN_PROP_SPECIAL, + APR_HASH_KEY_STRING) != NULL) + ? svn_tristate_true + : svn_tristate_false); + } + + if (was_symlink != becomes_symlink) + { + /* If the local node was not modified, we continue as usual, if + modified we want a tree conflict just like how we would handle + it when receiving a delete + add (aka "replace") */ + if (fb->local_prop_mods) + modified = TRUE; + else + SVN_ERR(svn_wc__internal_file_modified_p(&modified, eb->db, + fb->local_abspath, + FALSE, scratch_pool)); + } + + if (modified) + { + svn_wc_conflict_description2_t *tree_conflict = NULL; + + /* Create a copy of the existing (pre update) BASE node in WORKING, + mark a tree conflict and handle the rest of the update as + shadowed */ + SVN_ERR(svn_wc__db_temp_op_make_copy(eb->db, fb->local_abspath, + scratch_pool)); + /* ### Performance: We should just create the conflict here, without + ### verifying again */ + SVN_ERR(check_tree_conflict(&tree_conflict, eb, fb->local_abspath, + svn_wc__db_status_added, + svn_wc__db_kind_file, TRUE, + svn_wc_conflict_action_edit, + svn_node_file, fb->new_relpath, + scratch_pool, scratch_pool)); + SVN_ERR_ASSERT(tree_conflict != NULL); + SVN_ERR(svn_wc__db_op_set_tree_conflict(eb->db, + fb->local_abspath, + tree_conflict, + scratch_pool)); + fb->edit_conflict = tree_conflict; + + do_notification(eb, fb->local_abspath, svn_node_file, + svn_wc_notify_tree_conflict, scratch_pool); + + /* Ok, we introduced a replacement, so we can now handle the rest + as a normal shadowed update */ + fb->shadowed = TRUE; + fb->add_existed = FALSE; + fb->already_notified = TRUE; + } + } + return SVN_NO_ERROR; } @@ -4039,67 +4122,6 @@ if (current_actual_props == NULL) current_actual_props = apr_hash_make(scratch_pool); - /* Catch symlink-ness change. - * add_file() doesn't know whether the incoming added node is a file or - * a symlink, because symlink-ness is saved in a prop :( - * So add_file() cannot notice when update wants to add a symlink where - * locally there already is a file scheduled for addition, or vice versa. - * It sees incoming symlinks as simple files and may wrongly try to offer - * a text conflict. So flag a tree conflict here. */ - if (!fb->shadowed - && (! fb->adding_file || fb->add_existed)) - { - svn_boolean_t local_is_link; - svn_boolean_t incoming_is_link; - int i; - - local_is_link = apr_hash_get(local_actual_props, - SVN_PROP_SPECIAL, - APR_HASH_KEY_STRING) != NULL; - - incoming_is_link = local_is_link; - - /* Does an incoming propchange affect symlink-ness? */ - for (i = 0; i < regular_prop_changes->nelts; ++i) - { - const svn_prop_t *prop = &APR_ARRAY_IDX(regular_prop_changes, i, - svn_prop_t); - - if (strcmp(prop->name, SVN_PROP_SPECIAL) == 0) - { - incoming_is_link = (prop->value != NULL); - break; - } - } - - if (local_is_link != incoming_is_link) - { - svn_wc_conflict_description2_t *tree_conflict = NULL; - - fb->shadowed = TRUE; - fb->obstruction_found = TRUE; - fb->add_existed = FALSE; - - /* ### Performance: We should just create the conflict here, without - ### verifying again */ - SVN_ERR(check_tree_conflict(&tree_conflict, eb, fb->local_abspath, - svn_wc__db_status_added, - svn_wc__db_kind_file, TRUE, - svn_wc_conflict_action_add, - svn_node_file, fb->new_relpath, - scratch_pool, scratch_pool)); - SVN_ERR_ASSERT(tree_conflict != NULL); - SVN_ERR(svn_wc__db_op_set_tree_conflict(eb->db, - fb->local_abspath, - tree_conflict, - scratch_pool)); - - fb->already_notified = TRUE; - do_notification(eb, fb->local_abspath, svn_node_unknown, - svn_wc_notify_tree_conflict, scratch_pool); - } - } - prop_state = svn_wc_notify_state_unknown; if (! fb->shadowed) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/subversion/libsvn_wc/util.c new/subversion-1.7.8/subversion/libsvn_wc/util.c --- old/subversion-1.7.7/subversion/libsvn_wc/util.c 2011-06-22 14:15:55.000000000 +0200 +++ new/subversion-1.7.8/subversion/libsvn_wc/util.c 2012-11-09 05:01:06.000000000 +0100 @@ -463,7 +463,7 @@ /* (Currently a no-op, but just make sure it is ok) */ if (old_status->repos_node_status == svn_wc_status_modified || old_status->repos_node_status == svn_wc_status_conflicted) - (*status)->text_status = old_status->repos_text_status; + (*status)->repos_text_status = old_status->repos_text_status; if (old_status->node_status == svn_wc_status_added) (*status)->prop_status = svn_wc_status_none; /* No separate info */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/subversion/mod_dav_svn/reports/update.c new/subversion-1.7.8/subversion/mod_dav_svn/reports/update.c --- old/subversion-1.7.7/subversion/mod_dav_svn/reports/update.c 2012-04-26 06:01:59.000000000 +0200 +++ new/subversion-1.7.8/subversion/mod_dav_svn/reports/update.c 2012-12-07 05:02:33.000000000 +0100 @@ -845,6 +845,49 @@ } +/* Validate that REVISION is a valid revision number for repository in + which YOUNGEST is the latest revision. Use RESOURCE as a + convenient way to access the request record and a pool for error + messaging. (It's okay if REVISION is SVN_INVALID_REVNUM, as in + the related contexts that just means "the youngest revision".) + + REVTYPE is just a string describing the type/purpose of REVISION, + used in the generated error string. */ +static dav_error * +validate_input_revision(svn_revnum_t revision, + svn_revnum_t youngest, + const char *revtype, + const dav_resource *resource) +{ + if (! SVN_IS_VALID_REVNUM(revision)) + return SVN_NO_ERROR; + + if (revision > youngest) + { + svn_error_t *serr; + + if (dav_svn__get_master_uri(resource->info->r)) + { + serr = svn_error_createf(SVN_ERR_FS_NO_SUCH_REVISION, 0, + "No such %s '%ld' found in the repository. " + "Perhaps the repository is out of date with " + "respect to the master repository?", + revtype, revision); + } + else + { + serr = svn_error_createf(SVN_ERR_FS_NO_SUCH_REVISION, 0, + "No such %s '%ld' found in the repository.", + revtype, revision); + } + return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR, + "Invalid revision found in update report " + "request.", resource->pool); + } + return SVN_NO_ERROR; +} + + dav_error * dav_svn__update_report(const dav_resource *resource, const apr_xml_doc *doc, @@ -854,8 +897,7 @@ apr_xml_elem *child; void *rbaton = NULL; update_ctx_t uc = { 0 }; - svn_revnum_t revnum = SVN_INVALID_REVNUM; - svn_boolean_t revnum_is_head = FALSE; + svn_revnum_t youngest, revnum = SVN_INVALID_REVNUM; svn_revnum_t from_revnum = SVN_INVALID_REVNUM; int ns; /* entry_counter and entry_is_empty are for operational logging. */ @@ -920,6 +962,14 @@ } } + /* Ask the repository about its youngest revision (which we'll need + for some input validation later). */ + if ((serr = svn_fs_youngest_rev(&youngest, repos->fs, resource->pool))) + return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR, + "Could not determine the youngest " + "revision for the update process.", + resource->pool); + for (child = doc->root->first_child; child != NULL; child = child->next) { /* Note that child->name might not match any of the cases below. @@ -1039,6 +1089,23 @@ } } + /* If a target revision wasn't requested, or the requested target + revision was invalid, just update to HEAD as of the moment we + queried the youngest revision. Otherwise, at least make sure the + request makes sense in light of that youngest revision + number. */ + if (! SVN_IS_VALID_REVNUM(revnum)) + { + revnum = youngest; + } + else + { + derr = validate_input_revision(revnum, youngest, "target revision", + resource); + if (derr) + return derr; + } + if (!saw_depth && !saw_recursive && (requested_depth == svn_depth_unknown)) requested_depth = svn_depth_infinity; @@ -1054,18 +1121,6 @@ SVN_DAV_ERROR_TAG); } - /* If a revision for this operation was not dictated to us, this - means "update to whatever the current HEAD is now". */ - if (revnum == SVN_INVALID_REVNUM) - { - if ((serr = svn_fs_youngest_rev(&revnum, repos->fs, resource->pool))) - return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR, - "Could not determine the youngest " - "revision for the update process.", - resource->pool); - revnum_is_head = TRUE; - } - uc.svndiff_version = resource->info->svndiff_version; uc.resource = resource; uc.output = output; @@ -1179,27 +1234,10 @@ { rev = SVN_STR_TO_REV(this_attr->value); saw_rev = TRUE; - if (revnum_is_head && rev > revnum) - { - if (dav_svn__get_master_uri(resource->info->r)) - return dav_svn__new_error_tag( - resource->pool, - HTTP_INTERNAL_SERVER_ERROR, 0, - "A reported revision is higher than the " - "current repository HEAD revision. " - "Perhaps the repository is out of date " - "with respect to the master repository?", - SVN_DAV_ERROR_NAMESPACE, - SVN_DAV_ERROR_TAG); - else - return dav_svn__new_error_tag( - resource->pool, - HTTP_INTERNAL_SERVER_ERROR, 0, - "A reported revision is higher than the " - "current repository HEAD revision.", - SVN_DAV_ERROR_NAMESPACE, - SVN_DAV_ERROR_TAG); - } + if ((derr = validate_input_revision(rev, youngest, + "reported revision", + resource))) + return derr; } else if (strcmp(this_attr->name, "depth") == 0) depth = svn_depth_from_word(this_attr->value); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/subversion/mod_dav_svn/repos.c new/subversion-1.7.8/subversion/mod_dav_svn/repos.c --- old/subversion-1.7.7/subversion/mod_dav_svn/repos.c 2012-09-28 06:02:07.000000000 +0200 +++ new/subversion-1.7.8/subversion/mod_dav_svn/repos.c 2012-10-22 06:03:35.000000000 +0200 @@ -3075,6 +3075,13 @@ if ((serr == NULL) && (info.rev != SVN_INVALID_REVNUM)) { mimetype = SVN_SVNDIFF_MIME_TYPE; + + /* Note the base that this svndiff is based on, and tell any + intermediate caching proxies that this header is + significant. */ + apr_table_setn(r->headers_out, "Vary", SVN_DAV_DELTA_BASE_HEADER); + apr_table_setn(r->headers_out, SVN_DAV_DELTA_BASE_HEADER, + resource->info->delta_base); } svn_error_clear(serr); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/subversion/po/es.po new/subversion-1.7.8/subversion/po/es.po --- old/subversion-1.7.7/subversion/po/es.po 2010-11-12 15:53:46.000000000 +0100 +++ new/subversion-1.7.8/subversion/po/es.po 2012-10-26 10:01:58.000000000 +0200 @@ -13565,7 +13565,7 @@ #~ " 'HEAD' lo último del repositorio\n" #~ " 'BASE' rev base del ítem de la c. de trab.\n" #~ " 'COMMITTED' último commit en o antes de BASE\n" -#~ " 'PREV' revisión justo antes de COMMITED" +#~ " 'PREV' revisión justo antes de COMMITTED" #~ msgid "Can't open file '%s' for reading" #~ msgstr "No se pudo abrir el archivo '%s' para leer" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/subversion/po/pt_BR.po new/subversion-1.7.8/subversion/po/pt_BR.po --- old/subversion-1.7.7/subversion/po/pt_BR.po 2010-11-12 15:53:46.000000000 +0100 +++ new/subversion-1.7.8/subversion/po/pt_BR.po 2012-10-26 10:10:18.000000000 +0200 @@ -12663,8 +12663,8 @@ #~ " '{' DATA '}' revisão no início da data\n" #~ " 'HEAD' último no repositório\n" #~ " 'BASE' revisão base do item da cópia de trabalho\n" -#~ " 'COMMITED' último commit em ou antes de BASE\n" -#~ " 'PREV' revisão exatamente antes de COMMITED" +#~ " 'COMMITTED' último commit em ou antes de BASE\n" +#~ " 'PREV' revisão exatamente antes de COMMITTED" #~ msgid "Can't get user name" #~ msgstr "Não foi possível obter o nome do usuário" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/subversion/po/zh_TW.po new/subversion-1.7.8/subversion/po/zh_TW.po --- old/subversion-1.7.7/subversion/po/zh_TW.po 2010-11-12 15:53:46.000000000 +0100 +++ new/subversion-1.7.8/subversion/po/zh_TW.po 2012-10-26 10:01:58.000000000 +0200 @@ -12810,7 +12810,7 @@ #~ " '{' DATE '}' 該日開始的修訂版\n" #~ " 'HEAD' 檔案庫最新版本\n" #~ " 'BASE' 該項目工作複本的基礎修訂版\n" -#~ " 'COMMITED' 位於或早於 BASE 的最後送交\n" +#~ " 'COMMITTED' 位於或早於 BASE 的最後送交\n" #~ " 'PREV' COMMITTED 之前的修訂版" #~ msgid "Error reading administrative log file in '%s'" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/subversion/svn/log-cmd.c new/subversion-1.7.8/subversion/svn/log-cmd.c --- old/subversion-1.7.7/subversion/svn/log-cmd.c 2012-03-01 18:46:25.000000000 +0100 +++ new/subversion-1.7.8/subversion/svn/log-cmd.c 2012-10-20 06:03:28.000000000 +0200 @@ -464,7 +464,13 @@ /* <path action="X"> */ svn_xml_make_open_tag(&sb, pool, svn_xml_protect_pcdata, "path", "action", action, - "kind", svn_cl__node_kind_str_xml(log_item->node_kind), NULL); + "kind", svn_cl__node_kind_str_xml( + log_item->node_kind), + "text-mods", svn_tristate__to_word( + log_item->text_modified), + "prop-mods", svn_tristate__to_word( + log_item->props_modified), + NULL); } /* xxx</path> */ svn_xml_escape_cdata_cstring(&sb, path, pool); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/subversion/svnserve/main.c new/subversion-1.7.8/subversion/svnserve/main.c --- old/subversion-1.7.7/subversion/svnserve/main.c 2011-06-21 20:00:13.000000000 +0200 +++ new/subversion-1.7.8/subversion/svnserve/main.c 2012-10-16 06:03:13.000000000 +0200 @@ -881,7 +881,7 @@ settings.single_threaded = TRUE; if (handling_mode == connection_mode_thread) { -#ifdef APR_HAS_THREADS +#if APR_HAS_THREADS settings.single_threaded = FALSE; #else /* No requests will be processed at all diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/subversion/tests/cmdline/merge_tests.py new/subversion-1.7.8/subversion/tests/cmdline/merge_tests.py --- old/subversion-1.7.7/subversion/tests/cmdline/merge_tests.py 2012-05-09 14:02:45.000000000 +0200 +++ new/subversion-1.7.8/subversion/tests/cmdline/merge_tests.py 2012-11-09 05:00:46.000000000 +0100 @@ -17438,6 +17438,60 @@ None, None, None, None, None, 1, 0) +#---------------------------------------------------------------------- +@SkipUnless(server_has_mergeinfo) +def merge_with_externals_with_mergeinfo(sbox): + "merge with externals with mergeinfo" + + # Some paths we'll care about. + A_path = sbox.ospath('A') + A_COPY_path = sbox.ospath('A_COPY') + file_external_path = sbox.ospath('A/file-external') + mu_COPY_path = sbox.ospath('A_COPY/mu') + mu_path = sbox.ospath('A/mu') + + sbox.build() + wc_dir = sbox.wc_dir + + # Make a branch of ^/A and then make a few edits under A in r3-6: + wc_disk, wc_status = set_up_branch(sbox) + + svntest.main.file_write(mu_COPY_path, "branch edit") + svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m', + 'file edit on the branch', wc_dir) + svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir) + + # Create a file external under 'A' and set some bogus mergeinfo + # on it (the fact that this mergeinfo is bogus has no bearing on + # this test). + svntest.actions.run_and_verify_svn(None, None, [], 'propset', + 'svn:externals', + '^/iota file-external', A_path) + svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m', + 'set file external', wc_dir) + svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir) + svntest.actions.run_and_verify_svn(None, None, [], 'ps', SVN_PROP_MERGEINFO, + "/bogus-mergeinfo:5", file_external_path) + svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m', + 'set mergeinfo on file external', + file_external_path) + + # Sync merge ^/A to A_COPY and then reintegrate A_COPY back to A. + svntest.actions.run_and_verify_svn(None, None, [], 'merge', + sbox.repo_url + '/A', A_COPY_path) + svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m', + 'sync merge', wc_dir) + # This was segfaulting, see + # http://svn.haxx.se/dev/archive-2012-10/0364.shtml + svntest.actions.run_and_verify_svn( + None, + expected_merge_output(None, + ['U ' + mu_path + '\n', + ' U ' + A_path + '\n'], + two_url=True), + [], 'merge', '--reintegrate', sbox.repo_url + '/A_COPY', + A_path) + ######################################################################## # Run the tests @@ -17569,6 +17623,7 @@ reverse_merge_with_rename, merge_adds_then_deletes_subtree, merge_with_added_subtrees_with_mergeinfo, + merge_with_externals_with_mergeinfo, ] if __name__ == '__main__': diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/subversion/tests/cmdline/patch_tests.py new/subversion-1.7.8/subversion/tests/cmdline/patch_tests.py --- old/subversion-1.7.7/subversion/tests/cmdline/patch_tests.py 2012-09-29 06:02:09.000000000 +0200 +++ new/subversion-1.7.8/subversion/tests/cmdline/patch_tests.py 2012-11-09 15:36:08.000000000 +0100 @@ -3866,24 +3866,57 @@ patch_file_path = make_patch_path(sbox) iota_path = os.path.join(wc_dir, 'iota') + mu_path = sbox.ospath('A/mu') iota_contents = [ "This is the file iota." ] + mu_contents = [ + "context\n", + "context\n", + "context\n", + "context\n", + "This is the file mu.\n", + "context\n", + "context\n", + "context\n", + "context", # no newline at end of file + ] + svntest.main.file_write(iota_path, ''.join(iota_contents)) + svntest.main.file_write(mu_path, ''.join(mu_contents)) expected_output = svntest.wc.State(wc_dir, { 'iota' : Item(verb='Sending'), + 'A/mu' : Item(verb='Sending'), }) expected_status = svntest.actions.get_virginal_state(wc_dir, 1) expected_status.tweak('iota', wc_rev=2) + expected_status.tweak('A/mu', wc_rev=2) svntest.actions.run_and_verify_commit(wc_dir, expected_output, expected_status, None, wc_dir) unidiff_patch = [ - "--- iota\t(revision 1)\n", + "Index: A/mu\n", + "===================================================================\n", + "--- A/mu\t(revision 2)\n", + "+++ A/mu\t(working copy)\n", + "@@ -2,8 +2,8 @@ context\n", + " context\n", + " context\n", + " context\n", + "-This is the file mu.\n", + "+It is really the file mu.\n", + " context\n", + " context\n", + " context\n", + " context\n", + "\\ No newline at end of file\n", + "Index: iota\n", + "===================================================================\n", + "--- iota\t(revision 2)\n", "+++ iota\t(working copy)\n", - "@@ -1,7 +1,7 @@\n", - "-This is the file iota.\n" + "@@ -1 +1 @@\n", + "-This is the file iota.\n", "\\ No newline at end of file\n", "+It is really the file 'iota'.\n", "\\ No newline at end of file\n", @@ -3894,15 +3927,29 @@ iota_contents = [ "It is really the file 'iota'." ] + mu_contents = [ + "context\n", + "context\n", + "context\n", + "context\n", + "It is really the file mu.\n", + "context\n", + "context\n", + "context\n", + "context", # no newline at end of file + ] expected_output = [ + 'U %s\n' % os.path.join(wc_dir, 'A', 'mu'), 'U %s\n' % os.path.join(wc_dir, 'iota'), ] expected_disk = svntest.main.greek_state.copy() expected_disk.tweak('iota', contents=''.join(iota_contents)) + expected_disk.tweak('A/mu', contents=''.join(mu_contents)) expected_status = svntest.actions.get_virginal_state(wc_dir, 1) expected_status.tweak('iota', status='M ', wc_rev=2) + expected_status.tweak('A/mu', status='M ', wc_rev=2) expected_skip = wc.State('', { }) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/subversion/tests/cmdline/special_tests.py new/subversion-1.7.8/subversion/tests/cmdline/special_tests.py --- old/subversion-1.7.7/subversion/tests/cmdline/special_tests.py 2012-03-01 05:00:59.000000000 +0100 +++ new/subversion-1.7.8/subversion/tests/cmdline/special_tests.py 2012-12-10 18:56:17.000000000 +0100 @@ -937,6 +937,115 @@ sbox.simple_commit() +#---------------------------------------------------------------------- +def incoming_symlink_changes(sbox): + "verify incoming symlink change behavior" + + sbox.build() + wc_dir = sbox.wc_dir + + sbox.simple_add_symlink('iota', 's-replace') + sbox.simple_add_symlink('iota', 's-in-place') + sbox.simple_add_symlink('iota', 's-type') + sbox.simple_append('s-reverse', 'link iota') + sbox.simple_add('s-reverse') + sbox.simple_commit() # r2 + + # Replace s-replace + sbox.simple_rm('s-replace') + # Note that we don't use 'A/mu' as the length of that matches 'iota', which + # would make us depend on timestamp changes for detecting differences. + sbox.simple_add_symlink('A/D/G/pi', 's-replace') + + # Change target of s-in-place + if svntest.main.is_posix_os(): + os.remove(sbox.ospath('s-in-place')) + os.symlink('A/D/G/pi', sbox.ospath('s-in-place')) + else: + sbox.simple_append('s-in-place', 'link A/D/G/pi', truncate = True) + + # r3 + expected_output = svntest.wc.State(wc_dir, { + 's-replace' : Item(verb='Replacing'), + 's-in-place' : Item(verb='Sending'), + }) + svntest.actions.run_and_verify_commit(wc_dir, + expected_output, None, None, + wc_dir) + + # r4 + svntest.main.run_svnmucc('propdel', 'svn:special', + sbox.repo_url + '/s-type', + '-m', 'Turn s-type into a file') + + # r5 + svntest.main.run_svnmucc('propset', 'svn:special', 'X', + sbox.repo_url + '/s-reverse', + '-m', 'Turn s-reverse into a symlink') + + # Currently we expect to see 'U'pdates, but we would like to see + # replacements + expected_output = svntest.wc.State(wc_dir, { + 's-reverse' : Item(status=' U'), + 's-type' : Item(status=' U'), + }) + expected_status = svntest.actions.get_virginal_state(wc_dir, 5) + expected_status.add({ + 's-type' : Item(status=' ', wc_rev='5'), + 's-replace' : Item(status=' ', wc_rev='5'), + 's-reverse' : Item(status=' ', wc_rev='5'), + 's-in-place' : Item(status=' ', wc_rev='5'), + }) + + # Update to HEAD/r5 to fetch the r4 and r5 symlink changes + svntest.actions.run_and_verify_update(wc_dir, + expected_output, + None, + expected_status, + None, None, None, None, None, + check_props=True) + + # Update back to r2, to prepare some local changes + expected_output = svntest.wc.State(wc_dir, { + # s-replace is D + A + 's-replace' : Item(status='A '), + 's-in-place' : Item(status='U '), + 's-reverse' : Item(status=' U'), + 's-type' : Item(status=' U'), + }) + expected_status.tweak(wc_rev=2) + + svntest.actions.run_and_verify_update(wc_dir, + expected_output, + None, + expected_status, + None, None, None, None, None, + True, + wc_dir, '-r', '2') + + # Ok, now add a property on all of them to make future symlinkness changes + # a tree conflict + # ### We should also try this with a 'textual change' + sbox.simple_propset('x', 'y', 's-replace', 's-in-place', 's-reverse', 's-type') + + expected_output = svntest.wc.State(wc_dir, { + 's-replace' : Item(status=' ', treeconflict='A'), + 's-in-place' : Item(status='U '), + 's-reverse' : Item(status=' ', treeconflict='C'), + 's-type' : Item(status=' ', treeconflict='C'), + }) + expected_status.tweak(wc_rev=5) + expected_status.tweak('s-replace', 's-reverse', 's-type', status='RM', + copied='+', treeconflict='C', wc_rev='-') + expected_status.tweak('s-in-place', status=' M') + + svntest.actions.run_and_verify_update(wc_dir, + expected_output, + None, + expected_status, + None, None, None, None, None, + True) + ######################################################################## # Run the tests @@ -965,6 +1074,7 @@ symlink_to_wc_svnversion, update_symlink, externals_as_symlink_targets, + incoming_symlink_changes, ] if __name__ == '__main__': diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/subversion/tests/cmdline/svntest/sandbox.py new/subversion-1.7.8/subversion/tests/cmdline/svntest/sandbox.py --- old/subversion-1.7.7/subversion/tests/cmdline/svntest/sandbox.py 2012-07-01 06:01:29.000000000 +0200 +++ new/subversion-1.7.8/subversion/tests/cmdline/svntest/sandbox.py 2012-12-10 18:56:17.000000000 +0100 @@ -262,6 +262,17 @@ targets = self.ospaths(targets) svntest.main.run_svn(False, 'propdel', name, *targets) + def simple_add_symlink(self, dest, target): + """Create a symlink TARGET pointing to DEST and add it to subversion""" + if svntest.main.is_posix_os(): + os.symlink(dest, self.ospath(target)) + else: + svntest.main.file_write(self.ospath(target), "link %s" % dest) + self.simple_add(target) + if not svntest.main.is_posix_os(): + # '*' is evaluated on Windows + self.simple_propset('svn:special', 'X', target) + def simple_copy(self, source, dest): """SOURCE and DEST are relpaths relative to the WC.""" source = self.ospath(source) @@ -280,6 +291,10 @@ self.repo_url + '/' + source, self.repo_url + '/' + dest) + def simple_append(self, dest, contents, truncate=False): + """Append CONTENTS to file DEST, optionally truncating it first.""" + open(self.ospath(dest), truncate and 'w' or 'a').write(contents) + def is_url(target): return (target.startswith('^/') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/subversion/tests/cmdline/update_tests.py new/subversion-1.7.8/subversion/tests/cmdline/update_tests.py --- old/subversion-1.7.7/subversion/tests/cmdline/update_tests.py 2012-02-25 14:51:45.000000000 +0100 +++ new/subversion-1.7.8/subversion/tests/cmdline/update_tests.py 2012-12-07 05:02:33.000000000 +0100 @@ -5397,9 +5397,12 @@ sbox.build(read_only = True) wc_dir = sbox.wc_dir + # Attempt the update, expecting an error. (Sometimes the error + # strings says "No such revision", sometimes "No such target + # revision".) svntest.actions.run_and_verify_update(wc_dir, None, None, None, - ".*No such revision", + "E160006.*No such.*revision", None, None, None, None, None, wc_dir, '-r', '2') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/subversion/tests/libsvn_subr/dirent_uri-test.c new/subversion-1.7.8/subversion/tests/libsvn_subr/dirent_uri-test.c --- old/subversion-1.7.7/subversion/tests/libsvn_subr/dirent_uri-test.c 2012-08-24 05:59:51.000000000 +0200 +++ new/subversion-1.7.8/subversion/tests/libsvn_subr/dirent_uri-test.c 2012-12-06 05:02:28.000000000 +0100 @@ -2492,7 +2492,7 @@ } tests[] = { #ifdef SVN_USE_DOS_PATHS { "C:/file", "file:///C:/file" }, - { "C:/", "file:///C:/" }, + { "C:/", "file:///C:" }, { "C:/File#$", "file:///C:/File%23$" }, /* We can't check these as svn_dirent_get_absolute() won't work on shares that don't exist */ @@ -2519,6 +2519,8 @@ "svn_uri_get_file_url_from_dirent(\"%s\") " "returned \"%s\" expected \"%s\"", tests[i].dirent, result, tests[i].result); + + SVN_TEST_ASSERT(svn_uri_is_canonical(result, pool)); } return SVN_NO_ERROR; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/subversion-1.7.7/tools/client-side/svnmucc/svnmucc.c new/subversion-1.7.8/tools/client-side/svnmucc/svnmucc.c --- old/subversion-1.7.7/tools/client-side/svnmucc/svnmucc.c 2011-12-19 16:14:17.000000000 +0100 +++ new/subversion-1.7.8/tools/client-side/svnmucc/svnmucc.c 2012-12-05 19:03:25.000000000 +0100 @@ -1172,7 +1172,7 @@ else anchor = svn_uri_get_longest_ancestor(anchor, url, pool); - if ((++i == action_args->nelts) && (j >= num_url_args)) + if ((++i == action_args->nelts) && (j + 1 < num_url_args)) insufficient(pool); } APR_ARRAY_PUSH(actions, struct action *) = action;
participants (1)
-
root@hilbert.suse.de