Alien-SVN

 view release on metacpan or  search on metacpan

src/subversion/CHANGES  view on Meta::CPAN

    * mergeinfo: fix crash (r1519955)
    * ra_serf: verify the result of xml parsing (r1501199 et al)
    * ra_serf: improve error messages during commit (r1526439)
    * ra_local: fix error with repository in Windows drive root (r1518184)
    * fix crash on windows when piped command is interrupted (r1522892)
    * fix crash in the crash handler on windows (r1532023)
    * fix assertion when upgrading old working copies (r1520529)

  - Server-side bugfixes:
    * hotcopy: cleanup unpacked revprops with '--incremental' (r1512300 et al)
    * fix OOM on concurrent requests at threaded server start (r1527103 et al)
    * fsfs: improve error message when unsupported fsfs format found (r1534158)
    * fix memory problem in 3rd party FS module loader (r1519615 et al)

 Developer-visible changes:
  - General:
    * allow compiling against serf 1.3 and later on Windows (r1517123)

  - Bindings:
    * javahl: canonicalize path for streamFileContent method (r1524869)

src/subversion/CHANGES  view on Meta::CPAN

    * FSFS cache mergeinfo requested during 'log -g' (r1395439)
    * many FSFS caching improvements (r1390435, r1390447)
    * directory and property deltification option in FSFS (issue #4084)
    * fine-grained control deltification behavior via fsfs.conf (r1311476)
    * FSFS de-duplication ("rep sharing") now works within a revision (r1397773)
    * FSFS de-duplication now works for properties as well (r1243312)
    * read FSFS data using fewer fopen calls (issue #3372)
    * 'svnadmin verify' will now check meta data (issues #3956, #4211)
    * 'svnadmin verify' now checks for issue #4129 style corruption (r1304656)
    * new --client-speed option for svnserve (r1391788)
    * new --single-threaded option in svnserve (r1296018)
    * hook script templates are now marked as executable (r1153414)
    * error out on non-canonical fspaths in the authz file (r1166111)
    * improve path lookup performance in FSFS (r1442088)
    * svnserve now logs explicit path and reason for authz failures (r1446542)
    * validate offsets from rep-cache to prevent FSFS corruption (issue #4277)
    * new AuthzSVNGroupsFile option to store authz groups separately (r1438407)
    * new 'SVNAllowBulkUpdates prefer' option for mod_dav_svn (r1417642, et al)
    * new 'SVNMasterVersion' option for mod_dav_svn (r1398962)
    * added virtual-host support to 'svnserve' (r1401296)
    * new fsfs-stats tool which prints FSFS repository stats (r1410995)

src/subversion/CHANGES  view on Meta::CPAN

    * 'svnadmin recover' truncates rep-cache at the right point (issue #4077)
    * fix crashes in dumpstream loading with skipped revs (r1214202, r1214216)
    * fix 'svn log -g' incorrectly treating rename as merge (issue #4022)
    * fix bug where fsfs file-hinting fails (issue #4320)
    * don't leak path of repository on server's disk to clients (r1330906)
    * remove spurious is-fresh-txn-root from empty revision files (issue #4031)
    * fix a stdout handling problem in 'svnlook diff' (r1411971)
    * fix erratic behaviour in 'svnlook diff' showing property diffs (r1412224)
    * fix inconsistent authz error messages in 'svn log' in svnserve (r1292462)
    * fix svndumpfilter for empty paths in included or excluded lists (r1294583)
    * make fsfs packing threadsafe (r1376011)
    * don't error out on intermittent memcached failures (r1394470)
    * fix a ra_svn deadlock with zero-copy server option (r1465622)

  - Other tool improvements and bugfixes:
    * 'svnmucc' promoted to first-class supported utility (issue #3308, #4279)
    * make 'svnmucc' prompt for log messages (issue #3418)
    * rename 'svnauthz-validate' to 'svnauthz' (issue #4284)
    * make 'svnauthz' optionally validate user/path access (r1197588)
    * fix mailer.py test suite problems (r1449582)
    * fix mailer.py not showing dirs with property deletions (r1449582)

src/subversion/CHANGES  view on Meta::CPAN

  - Client-side bugfixes:
    * upgrade: fix an assertion when used with pre-1.3 wcs (r1530849)
    * ra_local: fix error with repository in Windows drive root (r1518184)
    * fix crash on windows when piped command is interrupted (r1522892)
    * fix externals that point at redirected locations (issues #4428, #4429)
    * diff: fix incorrect calculation of changes in some cases (issue #4283)
    * diff: fix errors with added/deleted targets (issues #4153, #4421)

  - Server-side bugfixes:
    * mod_dav_svn: Prevent crashes with some 3rd party modules (r1537360 et al)
    * fix OOM on concurrent requests at threaded server start (r1527103 et al)
    * fsfs: limit commit time of files with deep change histories (r1536790)
    * mod_dav_svn: canonicalize paths properly (r1542071)

  - Other tool improvements and bugfixes:
    * mod_dontdothat: Fix the uri parser (r1542069 et al)

 Developer-visible changes:
  - Bindings:
    * javahl: canonicalize path for streamFileContent method (r1524869)

src/subversion/CHANGES  view on Meta::CPAN

    * fix svnserve memory use after clear (issue #4365)
    * fix repository corruption on power/disk failure on Windows (r1483781)

 Developer-visible changes
  - General:
    * make get-deps.sh compatible with Solaris /bin/sh (r1451678)
    * fix infinite recursion bug in get-deps.sh (r1421541, r1424977)
    * fix uninitialised output parameter of svn_fs_commit_txn() (r1461743)

  - Bindings:
    * fix JavaHL thread-safety bug (r1476359)


Version 1.7.9
(04 Apr 2013, from /branches/1.7.x)
http://svn.apache.org/repos/asf/subversion/tags/1.7.9
 User-visible changes
  - Client-side bugfixes:
    * improved error messages about svn:date and svn:author props. (r1440620)
    * fix local_relpath assertion (issue #4257)
    * fix memory leak in `svn log` over svn:// (r1458341)

src/subversion/CHANGES  view on Meta::CPAN

  - 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 (r1399174)
    * fix hang with ra_serf during error processing (r1403583)
    * ignore file externals with mergeinfo when merging (r1401915)
    * fix "svnmucc cp" segfault with a missing last argument (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)

src/subversion/CHANGES  view on Meta::CPAN

(01 Jun 2011, from /branches/1.6.x)
http://svn.apache.org/repos/asf/subversion/tags/1.6.17

  User-visible changes:
    * improve checkout speed on Windows (issue #3719)
    * make 'blame -g' more efficient with large mergeinfo (r1094692)
    * avoid some invalid handle exceptions on Windows (r1095654)
    * preserve log message with a non-zero editor exit (r1072084)
    * fix FSFS cache performance on 64-bit platforms (r1103665)
    * make svn cleanup tolerate obstructed directories (r1091881)
    * fix deadlock in multithreaded servers serving FSFS repositories (r1104093)
    * detect very occasional corruption and abort commit (issue #3845)
    * fixed: file externals cause non-inheritable mergeinfo (issue #3843)
    * fixed: file externals cause mixed-revision working copies (issue #3816)
    * fix crash in mod_dav_svn with GETs of baselined resources (r1104126)
            See CVE-2011-1752, and descriptive advisory at
            http://subversion.apache.org/security/CVE-2011-1752-advisory.txt
    * fixed: write-through proxy could directly commit to slave (r917523)
    * detect a particular corruption condition in FSFS (r1100213)
    * improve error message when clients refer to unknown revisions (r939000)
    * bugfixes and optimizations to the DAV mirroring code (r878607)

src/subversion/CHANGES  view on Meta::CPAN

(22 Oct 2009, from /branches/1.6.x)
http://svn.apache.org/repos/asf/subversion/tags/1.6.6

 User-visible changes:
  * fix crash during 'svn update' (r39673)
  * respect Apache's ServerSignature directive (r40008, -21, -31)
  * don't add a file with mixed line endings, and then abort (issue #2713)
  * support Neon 0.29.
  * fix a crash in 'svn rm --force' (r37953)
  * handle tree conflicts involving replacements (issue #3486)
  * allow non-threadsafe sqlite if APR has no threads (r39301)
  * print newline before plaintext SSL cert / password prompts (r38982, r39302)
  * improve merge performance with implicit subtree mergeinfo (issue #3443)
  * fix "libsvn_ra_svn/marshal.c assertion failed (opt || cstr)" (issue #3485)
  * make file externals work for binary files (issue #3368)
  * perform MIME type matching case-insensitively (issue #3479)
  * do not treat non-existent revisions as HEAD in 'svn export' (issue #3400)
  * revert r36720's default MIME type change back to "text/plain" (issue #3508)
  * improve "tree conflict already exists" error message (r38872)
  * fix failure to commit replacement of a directory (issue #3281)
  * fix mod_dav_svn parent dir links to preserve peg revisions (issue #3425)

src/subversion/CHANGES  view on Meta::CPAN

  * fixed: 'svn merge --depth' inconsistencies (issue #2825)
  * fixed: ra_serf test failures (1.5.x-ra_serf-backports branch)
  * fixed: memory leak and crashes in FS (r32545, -58, -82)
  * fixed: core dump with relative externals (issue #3237)
  * fixed: 'svn copy' working copy corruption (r32467, -70)
  * fixed: perl bindings errors in non-English locale (issue #3258)
  * fixed: 'svn merge' incorrectly reverses previous merges (r32494, -522, -523)
  * fixed: 'svn merge' errors with subtree mergeinfo (issue #3067)

 Developer-visible changes:
  * make libsvn_ra_neon initialization thread-safe (r32497, r32510)
  * respect LDFLAGS in SWIG bindings (r32416, r32421, r32442)
  * fixed: test failures in non-English locales (r32491)


Version 1.5.1
(26 Jul 2008, from /branches/1.5.x)
http://svn.apache.org/repos/asf/subversion/tags/1.5.1

 User-visible changes:
  * mergeinfo on switched subtrees should elide in repos (issue #3188)

src/subversion/CHANGES  view on Meta::CPAN

 * fix 'svn merge --dry-run'
 * fix 'properties hanging after a rename' issue (#1303)
 * fix odd behavior of 'svn up -r PREV filename' (#1304)
 * fix delete-tracking bug (#1348)
 * fix dump and load corner cases (#1290)
 * ra_dav server more resilient for foreign deltaV clients
 * numerous ra_svn changes - must update clients and servers
 * fix export over ra_svn (#1318)
 * fix ra_svn error transmission bug (#1146)
 * fix ra_svn corruption in tunnel mode (#1145)
 * make svnserve multi-threaded on non-fork platforms (now works on Windows)
 * remove svnserve -F and -S options
 * various memory use improvements (#1323)
 * various performance improvements for all protocols
 * various performance improvements for 'svnadmin dump' and svnlook
 * various subversion book updates (you have read the book right?)
 * more cvs2svn.py improvements (and more to follow)
 * new debugging script normalize-dump.py to normalize dump output

 Developer-visible changes:
 * path-based editor drivers

src/subversion/CHANGES  view on Meta::CPAN

 * neon debugging now tweakable via run-time config file
 * more progress on Subversion Book rewrite.
 * new ./configure --with-diffutils
 * begin work on client/server checksums (#649)
 * regression tests now depend on svnadmin dump/load
 * lose src_err field of svn_error_t
 * many fs function renames:  begins fs database back-end abstraction.
 * new libsvn_repos prop-validating wrappers
 * lots of work on build-system dependency graph generation (for SWIG building)
 * swig binding work:
    - python svn calls can now run as independent threads
    - new java-binding build system
    - improved swig building features:  --prefix, LDFLAGS behaviors
 * many, many bug fixes: wc->repos copies (#1029), #943 followup
   (#1023), copies of copies (#830), 'svn resolve' cleans up entries
   file (#1021), prop merging (#1012), segfault fixes (#1027, #1055),
   autoconf 2.5X (#886), O(1) copies (#717), new 'failed revert'
   signal (#714), detect missing schedule-add conflicts (#899, #863),
   begin dav namespace switchover (#840), status bugs, url auth
   inference (#1038), log bug (#1028), newline prompt (#1039),
   svnadmin errorchecking, url syntax errors (#1057, #1058), apr/utf8

src/subversion/build/ac-macros/aprutil.m4  view on Meta::CPAN

      APU_WANTED_REGEX_MATCH=1
      break
    fi
  done

  if test $APU_WANTED_REGEX_MATCH -eq 0; then
    echo "wanted regexes are $APRUTIL_WANTED_REGEXES"
    AC_MSG_ERROR([invalid APRUTIL version found])
  fi

  dnl Get libraries and thread flags from APRUTIL ---------------------

  apu_ldflags="`$apu_config --ldflags`"
  if test $? -ne 0; then
    AC_MSG_ERROR([apu-config --ldflags failed])
  fi
  LDFLAGS="$LDFLAGS `SVN_REMOVE_STANDARD_LIB_DIRS($apu_ldflags)`"

  SVN_APRUTIL_INCLUDES="`$apu_config --includes`"
  if test $? -ne 0; then
    AC_MSG_ERROR([apu-config --includes failed])

src/subversion/build/ac-macros/sqlite.m4  view on Meta::CPAN

#include "$sqlite_amalg"
#if SQLITE_VERSION_NUMBER >= $sqlite_min_ver_num
SQLITE_VERSION_OKAY
#endif],
                 [AC_MSG_RESULT([amalgamation found and is okay])
                  _SVN_SQLITE_DSO_LIBS
                  AC_DEFINE(SVN_SQLITE_INLINE, 1,
                  [Defined if svn should use the amalgamated version of sqlite])
                  SVN_SQLITE_INCLUDES="-I`dirname $sqlite_amalg`"
                  if test -n "$svn_sqlite_dso_ldflags"; then
                    SVN_SQLITE_LIBS="$svn_sqlite_dso_ldflags -lpthread"
                  else
                    SVN_SQLITE_LIBS="-lpthread"
                  fi
                  svn_lib_sqlite="yes"],
                 [AC_MSG_RESULT([unsupported amalgamation SQLite version])])
  fi
])

dnl SVN_SQLITE_VERNUM_PARSE(version_string, result_var)
dnl
dnl Parse a x.y[.z] version string version_string into a number result_var.
AC_DEFUN(SVN_SQLITE_VERNUM_PARSE,

src/subversion/build/libtool.m4  view on Meta::CPAN

  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
  _LT_TAGVAR(hardcode_libdir_separator, $1)=
  _LT_TAGVAR(hardcode_minus_L, $1)=no
  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
  _LT_TAGVAR(inherit_rpath, $1)=no
  _LT_TAGVAR(link_all_deplibs, $1)=unknown
  _LT_TAGVAR(module_cmds, $1)=
  _LT_TAGVAR(module_expsym_cmds, $1)=
  _LT_TAGVAR(old_archive_from_new_cmds, $1)=
  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
  _LT_TAGVAR(thread_safe_flag_spec, $1)=
  _LT_TAGVAR(whole_archive_flag_spec, $1)=
  # include_expsyms should be a list of space-separated symbols to be *always*
  # included in the symbol list
  _LT_TAGVAR(include_expsyms, $1)=
  # exclude_expsyms can be an extended regexp of symbols to exclude
  # it will be wrapped by ' (' and ')$', so one must not match beginning or
  # end of line.  Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc',
  # as well as any symbol that contains 'd'.
  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out

src/subversion/build/libtool.m4  view on Meta::CPAN

    [Symbols that should not be listed in the preloaded symbols])
_LT_TAGDECL([], [include_expsyms], [1],
    [Symbols that must always be exported])
_LT_TAGDECL([], [prelink_cmds], [2],
    [Commands necessary for linking programs (against libraries) with templates])
_LT_TAGDECL([], [postlink_cmds], [2],
    [Commands necessary for finishing linking programs])
_LT_TAGDECL([], [file_list_spec], [1],
    [Specify filename containing input files])
dnl FIXME: Not yet implemented
dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
dnl    [Compiler flag to generate thread safe objects])
])# _LT_LINKER_SHLIBS


# _LT_LANG_C_CONFIG([TAG])
# ------------------------
# Ensure that the configuration variables for a C compiler are suitably
# defined.  These variables are subsequently used by _LT_CONFIG to write
# the compiler configuration to 'libtool'.
m4_defun([_LT_LANG_C_CONFIG],
[m4_require([_LT_DECL_EGREP])dnl

src/subversion/build/ltmain.sh  view on Meta::CPAN

    precious_files_regex=
    prefer_static_libs=no
    preload=false
    prev=
    prevarg=
    release=
    rpath=
    xrpath=
    perm_rpath=
    temp_rpath=
    thread_safe=no
    vinfo=
    vinfo_number=no
    weak_libs=
    single_module=$wl-single_module
    func_infer_tag $base_compile

    # We need to know -static, to get the right output filenames.
    for arg
    do
      case $arg in

src/subversion/build/ltmain.sh  view on Meta::CPAN

	  *-*-rhapsody* | *-*-darwin1.[012])
	    # Rhapsody C and math libraries are in the System framework
	    func_append deplibs " System.ltframework"
	    continue
	    ;;
	  *-*-sco3.2v5* | *-*-sco5v6*)
	    # Causes problems with __ctype
	    test X-lc = "X$arg" && continue
	    ;;
	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
	    # Compiler inserts libc in the correct place for threads to work
	    test X-lc = "X$arg" && continue
	    ;;
	  esac
	elif test X-lc_r = "X$arg"; then
	 case $host in
	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
	   # Do not include libc_r directly, use -pthread flag.
	   continue
	   ;;
	 esac
	fi
	func_append deplibs " $arg"
	continue
	;;

      -mllvm)
	prev=mllvm

src/subversion/build/ltmain.sh  view on Meta::CPAN

      # classes, name mangling, and exception handling.
      # Darwin uses the -arch flag to determine output architecture.
      -model|-arch|-isysroot|--sysroot)
	func_append compiler_flags " $arg"
	func_append compile_command " $arg"
	func_append finalize_command " $arg"
	prev=xcompiler
	continue
	;;

      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
	func_append compiler_flags " $arg"
	func_append compile_command " $arg"
	func_append finalize_command " $arg"
	case "$new_inherited_linker_flags " in
	    *" $arg "*) ;;
	    * ) func_append new_inherited_linker_flags " $arg" ;;
	esac
	continue
	;;

src/subversion/build/ltmain.sh  view on Meta::CPAN


      -static | -static-libtool-libs)
	# The effects of -static are defined in a previous loop.
	# We used to do the same as -all-static on platforms that
	# didn't have a PIC flag, but the assumption that the effects
	# would be equivalent was wrong.  It would break on at least
	# Digital Unix and AIX.
	continue
	;;

      -thread-safe)
	thread_safe=yes
	continue
	;;

      -version-info)
	prev=vinfo
	continue
	;;

      -version-number)
	prev=vinfo

src/subversion/build/ltmain.sh  view on Meta::CPAN

      if test dlopen = "$pass"; then
	# Collect dlpreopened libraries
	save_deplibs=$deplibs
	deplibs=
      fi

      for deplib in $libs; do
	lib=
	found=false
	case $deplib in
	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
	  if test prog,link = "$linkmode,$pass"; then
	    compile_deplibs="$deplib $compile_deplibs"
	    finalize_deplibs="$deplib $finalize_deplibs"
	  else
	    func_append compiler_flags " $deplib"
	    if test lib = "$linkmode"; then
		case "$new_inherited_linker_flags " in
		    *" $deplib "*) ;;
		    * ) func_append new_inherited_linker_flags " $deplib" ;;
		esac

src/subversion/build/ltmain.sh  view on Meta::CPAN

	  *-*-netbsd*)
	    # Don't link with libc until the a.out ld.so is fixed.
	    ;;
	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
	    # Do not include libc due to us having libc/libc_r.
	    ;;
	  *-*-sco3.2v5* | *-*-sco5v6*)
	    # Causes problems with __ctype
	    ;;
	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
	    # Compiler inserts libc in the correct place for threads to work
	    ;;
	  *)
	    # Add libc to deplibs on all other systems if necessary.
	    if test yes = "$build_libtool_need_lc"; then
	      func_append deplibs " -lc"
	    fi
	    ;;
	  esac
	fi

src/subversion/build/ltmain.sh  view on Meta::CPAN

	  else
	    gentop=$output_objdir/${outputname}x
	    func_append generated " $gentop"

	    func_extract_archives $gentop $convenience
	    func_append libobjs " $func_extract_archives_result"
	    test "X$libobjs" = "X " && libobjs=
	  fi
	fi

	if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then
	  eval flag=\"$thread_safe_flag_spec\"
	  func_append linker_flags " $flag"
	fi

	# Make a backup of the uninstalled library when relinking
	if test relink = "$opt_mode"; then
	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
	fi

	# Do each of the archive commands.
	if test yes = "$module" && test -n "$module_cmds"; then

src/subversion/build/run_tests.py  view on Meta::CPAN

test programs.

Each <prog> should be the full path (absolute or from the current directory)
and filename of a test program, optionally followed by '#' and a comma-
separated list of test numbers; the default is to run all the tests in it.
'''

# A few useful constants
SVN_VER_MINOR = 8

import os, re, subprocess, sys, imp, threading
from datetime import datetime

import getopt
try:
  my_getopt = getopt.gnu_getopt
except AttributeError:
  my_getopt = getopt.getopt

# Ensure the compiled C tests use a known locale (Python tests set the locale
# explicitly).

src/subversion/build/run_tests.py  view on Meta::CPAN


    import svntest.main

    # set up our options
    svntest.main.create_default_options()
    if self.base_url is not None:
      svntest.main.options.test_area_url = self.base_url
    if self.enable_sasl is not None:
      svntest.main.options.enable_sasl = True
    if self.parallel is not None:
      svntest.main.options.parallel = svntest.main.default_num_threads
    if self.config_file is not None:
      svntest.main.options.config_file = self.config_file
    if self.verbose is not None:
      svntest.main.options.verbose = True
    if self.cleanup is not None:
      svntest.main.options.cleanup = True
    if self.fs_type is not None:
      svntest.main.options.fs_type = self.fs_type
    if self.http_library is not None:
      svntest.main.options.http_library = self.http_library

src/subversion/build/run_tests.py  view on Meta::CPAN

      sys.stdout.flush()
      sys.stderr.flush()
      self.log.flush()
      old_stdout = os.dup(sys.stdout.fileno())
      old_stderr = os.dup(sys.stderr.fileno())
      os.dup2(self.log.fileno(), sys.stdout.fileno())
      os.dup2(self.log.fileno(), sys.stderr.fileno())

    # These have to be class-scoped for use in the progress_func()
    self.dots_written = 0
    self.progress_lock = threading.Lock()
    def progress_func(completed, total):
      """Report test suite progress. Can be called from multiple threads
         in parallel mode."""
      if not self.log:
        return
      dots = (completed * dot_count) / total
      if dots > dot_count:
        dots = dot_count
      self.progress_lock.acquire()
      if self.dots_written < dot_count:
        dots_to_write = dots - self.dots_written
        self.dots_written = dots

src/subversion/configure  view on Meta::CPAN

  else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
$as_echo "none" >&6; }
  fi


$as_echo "#define SVN_SQLITE_INLINE 1" >>confdefs.h

                  SVN_SQLITE_INCLUDES="-I`dirname $sqlite_amalg`"
                  if test -n "$svn_sqlite_dso_ldflags"; then
                    SVN_SQLITE_LIBS="$svn_sqlite_dso_ldflags -lpthread"
                  else
                    SVN_SQLITE_LIBS="-lpthread"
                  fi
                  svn_lib_sqlite="yes"
else
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported amalgamation SQLite version" >&5
$as_echo "unsupported amalgamation SQLite version" >&6; }
fi
rm -f conftest*

  fi

src/subversion/configure  view on Meta::CPAN

  else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
$as_echo "none" >&6; }
  fi


$as_echo "#define SVN_SQLITE_INLINE 1" >>confdefs.h

                  SVN_SQLITE_INCLUDES="-I`dirname $sqlite_amalg`"
                  if test -n "$svn_sqlite_dso_ldflags"; then
                    SVN_SQLITE_LIBS="$svn_sqlite_dso_ldflags -lpthread"
                  else
                    SVN_SQLITE_LIBS="-lpthread"
                  fi
                  svn_lib_sqlite="yes"
else
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported amalgamation SQLite version" >&5
$as_echo "unsupported amalgamation SQLite version" >&6; }
fi
rm -f conftest*

  fi

src/subversion/configure  view on Meta::CPAN

  else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
$as_echo "none" >&6; }
  fi


$as_echo "#define SVN_SQLITE_INLINE 1" >>confdefs.h

                  SVN_SQLITE_INCLUDES="-I`dirname $sqlite_amalg`"
                  if test -n "$svn_sqlite_dso_ldflags"; then
                    SVN_SQLITE_LIBS="$svn_sqlite_dso_ldflags -lpthread"
                  else
                    SVN_SQLITE_LIBS="-lpthread"
                  fi
                  svn_lib_sqlite="yes"
else
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported amalgamation SQLite version" >&5
$as_echo "unsupported amalgamation SQLite version" >&6; }
fi
rm -f conftest*

  fi

src/subversion/configure  view on Meta::CPAN

  hardcode_libdir_flag_spec=
  hardcode_libdir_separator=
  hardcode_minus_L=no
  hardcode_shlibpath_var=unsupported
  inherit_rpath=no
  link_all_deplibs=unknown
  module_cmds=
  module_expsym_cmds=
  old_archive_from_new_cmds=
  old_archive_from_expsyms_cmds=
  thread_safe_flag_spec=
  whole_archive_flag_spec=
  # include_expsyms should be a list of space-separated symbols to be *always*
  # included in the symbol list
  include_expsyms=
  # exclude_expsyms can be an extended regexp of symbols to exclude
  # it will be wrapped by ' (' and ')$', so one must not match beginning or
  # end of line.  Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc',
  # as well as any symbol that contains 'd'.
  exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out

src/subversion/subversion/bindings/ctypes-python/csvn/ext/callback_receiver.py  view on Meta::CPAN

#    specific language governing permissions and limitations
#    under the License.


"""
Some helper classes for converting c-style functions
which accept callbacks into Pythonic generator
functions.
"""

from threading import Thread, Lock, Condition, currentThread
import sys, traceback, weakref

class CallbackReceiver(Thread):
    """A thread which collects input from callbacks and
       sends them back to the main thread via an iterator.

       Classes which inherit from this class should define
       a 'collect' method which dispatches results to the
       iterator via the 'send' method."""

    def __init__(self, *args, **kwargs):
        """Create a new callback iterator"""
        Thread.__init__(self)
        self.args = args
        self.kwargs = kwargs

src/subversion/subversion/bindings/ctypes-python/csvn/ext/callback_receiver.py  view on Meta::CPAN

        self.done = False
        self.consumed = False
        self.exception = None

    def run(self, *args, **kwargs):
        try:
            try:
                self.collect(*self.args, **self.kwargs)
            except:

                # Looks like the child thread bombed out!
                # Find out what happened.
                tb = traceback.format_exception(*sys.exc_info())
                self.exception = CollectionError(
                    "Exception thrown by collect method\n"
                    "%s" % "".join(tb))

        finally:

            # Wake up the parent, and tell 'im we're all
            # done our work

src/subversion/subversion/bindings/ctypes-python/csvn/ext/callback_receiver.py  view on Meta::CPAN

            self.result = result
            self.consumed = False

            # A new result is ready!
            self.result_produced.notify()

            # Wait for the iterator to pickup the result
            while not self.done and self.consumed is not True:
                self.result_consumed.wait(0.5)

                # If the calling thread died, we should stop.
                if not self.calling_thread.isAlive():
                    self.done = True
        finally:
            self.lock.release()

    def shutdown(self, _):
        """Shut down the child thread"""

        # Tell the child thread to wake up (and die) if it has been
        # waiting for us to consume some data
        self.done = True
        try:
            self.lock.acquire()
            self.result_consumed.notify()
        finally:
            self.lock.release()

    def __iter__(self):
        """Iterate over the callback results"""

        # Save a reference to the current thread
        self.calling_thread = currentThread()

        # Setup the iterator
        iterator = iter(_CallbackResultIterator(self))

        # Cleanup: When the iterator goes out of scope, shut
        #          down the collector thread.
        self.cleanup = weakref.ref(iterator, self.shutdown)

        return iterator

class _CallbackResultIterator(object):

    def __init__(self, receiver):
        self.receiver = receiver

    def __iter__(self):

        # Start up receiver thread, and
        # wait for the first result
        self.receiver.done = False
        try:
            self.receiver.lock.acquire()
            self.receiver.start()
            if not self.receiver.done:
                self.receiver.result_produced.wait()
        finally:
            self.receiver.lock.release()

src/subversion/subversion/bindings/ctypes-python/csvn/ext/callback_receiver.py  view on Meta::CPAN

            try:
                self.receiver.lock.acquire()
                self.receiver.result_produced.wait()
            finally:
                self.receiver.lock.release()

            # Look like a result is ready. Consume it
            if not self.receiver.done and self.receiver.result is not None:
                yield self.receiver.result

                # Notify the child thread that we've consumed their output
                try:
                    self.receiver.lock.acquire()
                    self.receiver.consumed = True
                    self.receiver.result_consumed.notify()
                finally:
                    self.receiver.lock.release()

        # If the child thread raised an exception, re-raise it
        if self.receiver.exception:
            raise self.receiver.exception

        # Wait for the thread to exit before returning
        self.receiver.join()

class CollectionError(Exception):
    pass

src/subversion/subversion/bindings/ctypes-python/csvn/ext/listmixin.py  view on Meta::CPAN

  def __copy__(self):
    return self._constructor(self)

  def __deepcopy__(self, memo={}):
    ans = self._constructor([])
    memo[id(self)] = ans
    ans[:] = copy.deepcopy(tuple(self), memo)
    return ans

  # Tracking idea from R. Hettinger's deque class.  It's not
  # multithread safe, but does work with the builtin Python classes.
  def __str__(self, track=[]):
    if id(self) in track:
      return '...'
    track.append(id(self))
    ans = '%r' % (list(self),)
    track.remove(id(self))
    return ans

  def __repr__(self):
    return self.__class__.__name__ + '(' + str(self) + ')'

src/subversion/subversion/bindings/javahl/native/JNICriticalSection.cpp  view on Meta::CPAN

#include "JNIUtil.h"
#include "JNIMutex.h"

/**
 * Create the critical section and lock the mutex
 * @param mutext    the underlying mutex
 */
JNICriticalSection::JNICriticalSection(JNIMutex &mutex)
{
  m_mutex = &mutex;
  apr_status_t apr_err = apr_thread_mutex_lock(mutex.m_mutex);
  if (apr_err)
    {
      JNIUtil::handleAPRError(apr_err, "apr_thread_mutex_lock");
      return;
    }

}

/**
 * Release the mutex and the destroy the critical section.
 */
JNICriticalSection::~JNICriticalSection()
{
  apr_status_t apr_err = apr_thread_mutex_unlock(m_mutex->m_mutex);
  if (apr_err)
    {
      JNIUtil::handleAPRError(apr_err, "apr_thread_mutex_unlock");
      return;
    }
}

src/subversion/subversion/bindings/javahl/native/JNICriticalSection.h  view on Meta::CPAN


#ifndef JNICRITICALSECTION_H
#define JNICRITICALSECTION_H

class JNIMutex;

/**
 * This class holds a mutex which will be locked during the constructor and
 * released during the destructor. If the object is created on the stack, this
 * garanties that the mutex will be released all the time if the block is left.
 * Only one thread can enter all the critrical sections secured by the same
 * mutex.
 */
class JNICriticalSection
{
 public:
  JNICriticalSection(JNIMutex &mutex);
  ~JNICriticalSection();
 private:
  /**
   * The mutex to be locked and released.

src/subversion/subversion/bindings/javahl/native/JNIMutex.cpp  view on Meta::CPAN

#include <apr_lib.h>
#include "JNIUtil.h"

/**
 * Create an object and allocate an apr mutex
 * @param pool  the pool from which the mutex is allocated
 */
JNIMutex::JNIMutex(apr_pool_t *pool)
{
  apr_status_t apr_err =
    apr_thread_mutex_create(&m_mutex, APR_THREAD_MUTEX_NESTED, pool);
  if (apr_err)
    JNIUtil::handleAPRError(apr_err, "apr_thread_mutex_create");
}

/**
 * Destroy the apr mutex and the object.
 */
JNIMutex::~JNIMutex()
{
  apr_status_t apr_err = apr_thread_mutex_destroy(m_mutex);
  if (apr_err)
    JNIUtil::handleAPRError(apr_err, "apr_thread_mutex_destroy");
}

src/subversion/subversion/bindings/javahl/native/JNIMutex.h  view on Meta::CPAN

 *
 * @file JNIMutex.h
 * @brief Interface of the class JNIMutex
 */

#ifndef JNIMUTEX_H
#define JNIMUTEX_H

class JNICriticalSection;
struct apr_pool_t;
struct apr_thread_mutex_t;

/**
 * This class holds a apr mutex for the use of JNICriticalSection.
 */
class JNIMutex
{
 public:
  JNIMutex(apr_pool_t *pool);
  ~JNIMutex();
  friend class JNICriticalSection;
 private:
  /**
   * The apr mutex.
   */
  apr_thread_mutex_t *m_mutex;
};

#endif  // JNIMUTEX_H

src/subversion/subversion/bindings/javahl/native/JNIThreadData.cpp  view on Meta::CPAN

 *
 * @file JNIThreadData.cpp
 * @brief Implementation of the class JNIThreadData
 */

#include "JNIThreadData.h"
#include <apr_strings.h>
#include <apr_tables.h>
#include <apr_general.h>
#include <apr_lib.h>
#include <apr_thread_proc.h>
#include "JNIUtil.h"

apr_threadkey_t *JNIThreadData::g_key;

/**
 * Create and initialize a new object.
 */
JNIThreadData::JNIThreadData()
{
  m_env = NULL;
  m_exceptionThrown = false;
  m_previous = NULL;
}

JNIThreadData::~JNIThreadData()
{
}

/**
 * Initialize the thread local storage.
 * @return success or failure
 */
bool JNIThreadData::initThreadData()
{
  // If already initialized -> nothing to do.
  if (g_key != NULL)
    return false;

  // Request a key for the thread local storage from the global pool
  // and register a callback function called when the thread is
  // deleted.
  apr_status_t apr_err = apr_threadkey_private_create(&g_key,
                                                      del,
                                                      JNIUtil::getPool());
  if (apr_err)
    {
      JNIUtil::handleAPRError(apr_err, "apr_threadkey_private_create");
      return false;
    }

  return true;
}

/**
 * Get the thread local storage for this thread.
 * @return thread local storage
 */
JNIThreadData *JNIThreadData::getThreadData()
{
  // We should never be called before initThreadData
  if (g_key == NULL)
    return NULL;

  // Retrieve the thread local storage from APR.
  JNIThreadData *data = NULL;
  apr_status_t apr_err = apr_threadkey_private_get
    (reinterpret_cast<void**>(&data), g_key);
  if (apr_err)
    {
      JNIUtil::handleAPRError(apr_err, "apr_threadkey_private_get");
      return NULL;
    }

  // Not already allocated.
  if (data == NULL)
    {
      // Allocate and store to APR.
      data = new JNIThreadData;
      apr_err = apr_threadkey_private_set (data, g_key);
      if (apr_err)
        {
          JNIUtil::handleAPRError(apr_err, "apr_threadkey_private_set");
          return NULL;
        }
    }
  return data;
}

/**
 * Allocate a new ThreadData for the current call from Java and push
 * it on the stack
 */
void JNIThreadData::pushNewThreadData()
{
  JNIThreadData *data = NULL;
  apr_status_t apr_err = apr_threadkey_private_get
    (reinterpret_cast<void**>(&data), g_key);
  if (apr_err)
    {
      JNIUtil::handleAPRError(apr_err, "apr_threadkey_private_get");
      return;
    }
  JNIThreadData *newData = new JNIThreadData();
  newData->m_previous =data;
  apr_err = apr_threadkey_private_set(newData, g_key);
  if (apr_err)
    {
      JNIUtil::handleAPRError(apr_err, "apr_threadkey_private_set");
      return;
    }
}

/**
 * Pop the current ThreadData from the stack, because the call
 * completed.
 */
void JNIThreadData::popThreadData()
{
  JNIThreadData *data = NULL;
  apr_status_t apr_err = apr_threadkey_private_get
    (reinterpret_cast<void**>(&data), g_key);
  if (apr_err)
    {
      JNIUtil::handleAPRError(apr_err, "apr_threadkey_private_get");
      return;
    }
  if (data == NULL)
    return;

  JNIThreadData *oldData = data->m_previous;
  delete data;
  apr_err = apr_threadkey_private_set(oldData, g_key);
  if (apr_err)
    {
      JNIUtil::handleAPRError(apr_err, "apr_threadkey_private_set");
      return;
    }
}

/**
 * Callback called by APR when the thread dies.  Deletes the thread
 * local storage.
 */
void JNIThreadData::del(void *p)
{
  delete reinterpret_cast<JNIThreadData*>(p);
}

src/subversion/subversion/bindings/javahl/native/JNIThreadData.h  view on Meta::CPAN

 * @file JNIThreadData.h
 * @brief Interface of the class JNIThreadData
 */

#ifndef JNITHREADDATA_H
#define JNITHREADDATA_H

#include <jni.h>
#include "JNIUtil.h"

struct apr_threadkey_t;

/**
 * This class implements thread local storage for JNIUtil.
 */
class JNIThreadData
{
 public:
  static void del(void *);
  static JNIThreadData *getThreadData();
  static bool initThreadData();
  static void pushNewThreadData();
  static void popThreadData();
  JNIThreadData();

src/subversion/subversion/bindings/javahl/native/JNIThreadData.h  view on Meta::CPAN

   */
  bool m_exceptionThrown;

  /**
   * A buffer used for formating messages.
   */
  char m_formatBuffer[JNIUtil::formatBufferSize];

 private:
  /**
   * Pointer to previous thread information to enable reentrent
   * calls.
   */
  JNIThreadData *m_previous;

  /**
   * The key to address this thread local storage.
   */
  static apr_threadkey_t *g_key;
};

#endif  // JNITHREADDATA_H

src/subversion/subversion/bindings/javahl/native/JNIUtil.cpp  view on Meta::CPAN

{
  // This method has to be run only once during the run a program.
  static bool run = false;
  svn_error_t *err;
  if (run) // already run
    return true;

  run = true;

  // Do not run this part more than one time.  This leaves a small
  // time window when two threads create their first SVNClient and
  // SVNAdmin at the same time, but I do not see a better option
  // without APR already initialized
  if (g_inInit)
    return false;

  g_inInit = true;
  g_initEnv = env;

  apr_status_t status;

src/subversion/subversion/bindings/javahl/native/JNIUtil.cpp  view on Meta::CPAN

  svn_utf_initialize2(FALSE, g_pool); /* Optimize character conversions */
  svn_fs_initialize(g_pool); /* Avoid some theoretical issues */
  svn_ra_initialize(g_pool);

  /* We shouldn't fill the JVMs memory with FS cache data unless explictly
     requested. */
  {
    svn_cache_config_t settings = *svn_cache_config_get();
    settings.cache_size = 0;
    settings.file_handle_count = 0;
    settings.single_threaded = FALSE;
    svn_cache_config_set(&settings);
  }

#ifdef ENABLE_NLS
#ifdef WIN32
  {
    WCHAR ucs2_path[MAX_PATH];
    char *utf8_path;
    const char *internal_path;
    apr_pool_t *pool;

src/subversion/subversion/bindings/javahl/native/JNIUtil.cpp  view on Meta::CPAN


  // Build all mutexes.
  g_finalizedObjectsMutex = new JNIMutex(g_pool);
  if (isExceptionThrown())
    return false;

  g_logMutex = new JNIMutex(g_pool);
  if (isExceptionThrown())
    return false;

  // initialized the thread local storage
  if (!JNIThreadData::initThreadData())
    return false;

  setEnv(env);
  if (isExceptionThrown())
    return false;

  g_initEnv = NULL;
  g_inInit = false;
  return true;

src/subversion/subversion/bindings/javahl/native/JNIUtil.cpp  view on Meta::CPAN

/**
 * Return if an exception has been detected.
 * @return a exception has been detected
 */
bool JNIUtil::isExceptionThrown()
{
  // During init -> look in the global member.
  if (g_inInit)
    return g_initException;

  // Look in the thread local storage.
  JNIThreadData *data = JNIThreadData::getThreadData();
  return data == NULL || data->m_exceptionThrown;
}

/**
 * Store the JNI environment for this request in the thread local
 * storage.
 * @param env   the JNI environment
 */
void JNIUtil::setEnv(JNIEnv *env)
{
  JNIThreadData::pushNewThreadData();
  JNIThreadData *data = JNIThreadData::getThreadData();
  data->m_env = env;
  data->m_exceptionThrown = false;
}

src/subversion/subversion/bindings/javahl/native/JNIUtil.cpp  view on Meta::CPAN

/**
 * Return the JNI environment to use
 * @return the JNI environment
 */
JNIEnv *JNIUtil::getEnv()
{
  // During init -> look into the global variable.
  if (g_inInit)
    return g_initEnv;

  // Look in the thread local storage.
  JNIThreadData *data = JNIThreadData::getThreadData();
  return data->m_env;
}

/**
 * Check if a Java exception has been thrown.
 * @return is a Java exception has been thrown
 */
bool JNIUtil::isJavaExceptionThrown()
{

src/subversion/subversion/bindings/javahl/native/JNIUtil.cpp  view on Meta::CPAN

  JNIEnv *env = getEnv();
  return env->NewStringUTF(txt);
}

void
JNIUtil::setExceptionThrown(bool flag)
{
  if (g_inInit)
    {
      // During global initialization, store any errors that occur
      // in a global variable (since thread-local storage may not
      // yet be available).
      g_initException = flag;
    }
  else
    {
      // When global initialization is complete, thread-local
      // storage should be available, so store the error there.
      JNIThreadData *data = JNIThreadData::getThreadData();
      data->m_exceptionThrown = flag;
    }
}

/**
 * Initialite the log file.
 * @param level the log level
 * @param the name of the log file

src/subversion/subversion/bindings/javahl/native/JNIUtil.cpp  view on Meta::CPAN


/**
 * Returns a buffer to format error messages.
 * @return a buffer for formating error messages
 */
char *JNIUtil::getFormatBuffer()
{
  if (g_inInit) // during init -> use the global buffer
    return g_initFormatBuffer;

  // use the buffer in the thread local storage
  JNIThreadData *data = JNIThreadData::getThreadData();
  if (data == NULL) // if that does not exists -> use the global buffer
    return g_initFormatBuffer;

  return data->m_formatBuffer;
}

/**
 * Returns the current log level.
 * @return the log level

src/subversion/subversion/bindings/javahl/native/JNIUtil.h  view on Meta::CPAN


  /**
   * @return Whether any Throwable has been raised.
   */
  static bool isExceptionThrown();

  static void handleAPRError(int error, const char *op);

  /**
   * Put @a object in the list of finalized objects queued up to be
   * deleted (by another thread) during the next operation.
   *
   * @param object The C++ peer of the finalized (Java) object.
   * @since 1.4.0
   */
  static void enqueueForDeletion(SVNBase *object);

  /**
   * @deprecated Use the more appropriately named
   * enqueueForDeletion() instead.
   */

src/subversion/subversion/bindings/javahl/native/JNIUtil.h  view on Meta::CPAN

  enum { noLog, errorLog, exceptionLog, entryLog } LogLevel;

 private:
  static void wrappedHandleSVNError(svn_error_t *err);
  static void assembleErrorMessage(svn_error_t *err, int depth,
                                   apr_status_t parent_apr_err,
                                   std::string &buffer);
  static void putErrorsInTrace(svn_error_t *err,
                               std::vector<jobject> &stackTrace);
  /**
   * Set the appropriate global or thread-local flag that an exception
   * has been thrown to @a flag.
   */
  static void setExceptionThrown(bool flag = true);

  /**
   * The log level of this module.
   */
  static int g_logLevel;

  /**

src/subversion/subversion/bindings/javahl/native/JNIUtil.h  view on Meta::CPAN

   * Mutex to secure the access to the log file.
   */
  static JNIMutex *g_logMutex;

  /**
   * Flag, that an exception occurred during our initialization.
   */
  static bool g_initException;

  /**
   * Flag, that one thread is in the init code.  Cannot use mutex
   * here since apr is not initialized yet.
   */
  static bool g_inInit;

  /**
   * The JNI environment used during initialization.
   */
  static JNIEnv *g_initEnv;

  /**

src/subversion/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java  view on Meta::CPAN

import java.io.FileNotFoundException;
import java.io.ByteArrayOutputStream;

import java.util.Collection;
import java.util.Set;
import java.util.List;
import java.util.Map;

/**
 * This is the main client class.  All Subversion client APIs are
 * implemented in this class.  This class is not threadsafe; if you
 * need threadsafe access, use ClientSynchronized.
 */
public class SVNClient implements ISVNClient
{
    /**
     * Load the required native library.
     */
    static
    {
        NativeResources.loadNativeLibrary();
    }

src/subversion/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java  view on Meta::CPAN

import java.util.HashSet;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.Date;
import java.text.ParseException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;

/**
 * This is the main client class.  All Subversion client APIs are
 * implemented in this class.  This class is not threadsafe; if you
 * need threadsafe access, use SVNClientSynchronized.
 */
public class SVNClient implements SVNClientInterface
{
    private org.apache.subversion.javahl.SVNClient aSVNClient;

    /**
     * Standard empty contructor, builds just the native peer.
     */
    public SVNClient()
    {

src/subversion/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientSynchronized.java  view on Meta::CPAN

 * ====================================================================
 * @endcopyright
 */

package org.tigris.subversion.javahl;

import java.io.OutputStream;
import java.util.Map;

/**
 * This class provides a threadsafe wrapped for SVNClient
 */
public class SVNClientSynchronized implements SVNClientInterface
{
    /**
     * the wrapped object, which does all the work
     */
    private SVNClient worker;

    /**
     * our class, we synchronize on that.

src/subversion/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientSynchronized.java  view on Meta::CPAN

            return worker.getConfigDirectory();
        }
    }

    /**
     * @since 1.0
     */
    public void cancelOperation() throws ClientException
    {
        // this method is not synchronized, because it is designed to be called
        // from another thread
        worker.cancelOperation();
    }

    /**
     * @deprecated Use {@link #info2(String, Revision, Revision, int,
     *                               InfoCallback)} instead.
     * @since 1.0
     */
    public Info info(String path) throws ClientException
    {

src/subversion/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNInputStream.java  view on Meta::CPAN

 */

package org.tigris.subversion.javahl;

import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;

/**
 * This class connects a java.io.PipedInputStream to a OutputInterface.
 * The other side of the Pipe must read by another thread, or deadlocks
 * will occur.
 */
public class SVNInputStream extends PipedInputStream
{
    /**
     * my connection to put data into subversion
     */
    Outputer myOutputer;

    /**

src/subversion/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNOutputStream.java  view on Meta::CPAN

 * ====================================================================
 * @endcopyright
 */

package org.tigris.subversion.javahl;

import java.io.*;

/**
 * This class connects a java.io.PipedOutputStream to a InputInterface.
 * The other side of the Pipe must written by another thread, or deadlocks
 * will occur.
 */
public class SVNOutputStream extends PipedOutputStream
{
    /**
     * My connection to receive data into subversion.
     */
    Inputer myInputer;

    /**

src/subversion/subversion/bindings/swig/include/proxy_apr.swg  view on Meta::CPAN

 * _is_valid weakref to ensure that the pool has not been destroyed (see
 * proxy.swg to read the implementation details).
 *
 * This lets us gracefully throw an exception if you try to use an object
 * that was allocated out of a pool that was cleared, rather than crashing
 * like we used to do.
 *
 */

%pythoncode %{
import threading

application_pool = None
application_pool_lock = threading.Lock()
class GenericSWIGWrapper:
  def __init__(self, this, pool):
    """Create new Generic SWIG wrapper object"""
    import weakref
    self.this = this
    self._parent_pool = pool
    self._is_valid = weakref.ref(pool._is_valid)

  def set_parent_pool(self, pool):
    """Set the parent pool of this object"""

src/subversion/subversion/bindings/swig/include/svn_types.swg  view on Meta::CPAN

*/

#ifdef SWIGRUBY
%typemap(argout) const char **TO_TEMP_FILE
{
  %append_output(svn_swig_rb_filename_to_temp_file(*$1));
}
#endif

/* -----------------------------------------------------------------------
   Handle python thread locking.

   Swig doesn't allow us to specify a language in the %exception command,
   so we have to use #ifdefs for the python-specific parts.
*/

%exception {
#ifdef SWIGPYTHON
    svn_swig_py_release_py_lock();
#endif
    $action

src/subversion/subversion/bindings/swig/perl/native/core.c  view on Meta::CPAN

XS(_wrap_svn_pool_create_allocator) {
  {
    svn_boolean_t arg1 ;
    int val1 ;
    int ecode1 = 0 ;
    int argvi = 0;
    apr_allocator_t *result = 0 ;
    dXSARGS;
    
    if ((items < 1) || (items > 1)) {
      SWIG_croak("Usage: svn_pool_create_allocator(thread_safe);");
    }
    ecode1 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1);
    if (!SWIG_IsOK(ecode1)) {
      SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "svn_pool_create_allocator" "', argument " "1"" of type '" "svn_boolean_t""'");
    } 
    arg1 = (svn_boolean_t)(val1);
    {
      result = (apr_allocator_t *)svn_pool_create_allocator(arg1);
      
      

src/subversion/subversion/bindings/swig/proxy/swig_python_external_runtime.swg  view on Meta::CPAN

#  if defined(SWIG_PYTHON_THREADS)
#    undef SWIG_PYTHON_THREADS
#  endif
#endif
#if defined(SWIG_PYTHON_THREADS) /* Threading support is enabled */
#  if !defined(SWIG_PYTHON_USE_GIL) && !defined(SWIG_PYTHON_NO_USE_GIL)
#    if (PY_VERSION_HEX >= 0x02030000) /* For 2.3 or later, use the PyGILState calls */
#      define SWIG_PYTHON_USE_GIL
#    endif
#  endif
#  if defined(SWIG_PYTHON_USE_GIL) /* Use PyGILState threads calls */
#    ifndef SWIG_PYTHON_INITIALIZE_THREADS
#     define SWIG_PYTHON_INITIALIZE_THREADS  PyEval_InitThreads() 
#    endif
#    ifdef __cplusplus /* C++ code */
       class SWIG_Python_Thread_Block {
         bool status;
         PyGILState_STATE state;
       public:
         void end() { if (status) { PyGILState_Release(state); status = false;} }
         SWIG_Python_Thread_Block() : status(true), state(PyGILState_Ensure()) {}
         ~SWIG_Python_Thread_Block() { end(); }
       };
       class SWIG_Python_Thread_Allow {
         bool status;
         PyThreadState *save;
       public:
         void end() { if (status) { PyEval_RestoreThread(save); status = false; }}
         SWIG_Python_Thread_Allow() : status(true), save(PyEval_SaveThread()) {}
         ~SWIG_Python_Thread_Allow() { end(); }
       };
#      define SWIG_PYTHON_THREAD_BEGIN_BLOCK   SWIG_Python_Thread_Block _swig_thread_block
#      define SWIG_PYTHON_THREAD_END_BLOCK     _swig_thread_block.end()
#      define SWIG_PYTHON_THREAD_BEGIN_ALLOW   SWIG_Python_Thread_Allow _swig_thread_allow
#      define SWIG_PYTHON_THREAD_END_ALLOW     _swig_thread_allow.end()
#    else /* C code */
#      define SWIG_PYTHON_THREAD_BEGIN_BLOCK   PyGILState_STATE _swig_thread_block = PyGILState_Ensure()
#      define SWIG_PYTHON_THREAD_END_BLOCK     PyGILState_Release(_swig_thread_block)
#      define SWIG_PYTHON_THREAD_BEGIN_ALLOW   PyThreadState *_swig_thread_allow = PyEval_SaveThread()
#      define SWIG_PYTHON_THREAD_END_ALLOW     PyEval_RestoreThread(_swig_thread_allow)
#    endif
#  else /* Old thread way, not implemented, user must provide it */
#    if !defined(SWIG_PYTHON_INITIALIZE_THREADS)
#      define SWIG_PYTHON_INITIALIZE_THREADS
#    endif
#    if !defined(SWIG_PYTHON_THREAD_BEGIN_BLOCK)
#      define SWIG_PYTHON_THREAD_BEGIN_BLOCK
#    endif
#    if !defined(SWIG_PYTHON_THREAD_END_BLOCK)
#      define SWIG_PYTHON_THREAD_END_BLOCK
#    endif
#    if !defined(SWIG_PYTHON_THREAD_BEGIN_ALLOW)
#      define SWIG_PYTHON_THREAD_BEGIN_ALLOW
#    endif
#    if !defined(SWIG_PYTHON_THREAD_END_ALLOW)
#      define SWIG_PYTHON_THREAD_END_ALLOW
#    endif
#  endif
#else /* No thread support */
#  define SWIG_PYTHON_INITIALIZE_THREADS
#  define SWIG_PYTHON_THREAD_BEGIN_BLOCK
#  define SWIG_PYTHON_THREAD_END_BLOCK
#  define SWIG_PYTHON_THREAD_BEGIN_ALLOW
#  define SWIG_PYTHON_THREAD_END_ALLOW
#endif
/* -----------------------------------------------------------------------------
 * Python API portion that goes into the runtime
 * ----------------------------------------------------------------------------- */

src/subversion/subversion/bindings/swig/python/core.c  view on Meta::CPAN

#  if defined(SWIG_PYTHON_THREADS)
#    undef SWIG_PYTHON_THREADS
#  endif
#endif
#if defined(SWIG_PYTHON_THREADS) /* Threading support is enabled */
#  if !defined(SWIG_PYTHON_USE_GIL) && !defined(SWIG_PYTHON_NO_USE_GIL)
#    if (PY_VERSION_HEX >= 0x02030000) /* For 2.3 or later, use the PyGILState calls */
#      define SWIG_PYTHON_USE_GIL
#    endif
#  endif
#  if defined(SWIG_PYTHON_USE_GIL) /* Use PyGILState threads calls */
#    ifndef SWIG_PYTHON_INITIALIZE_THREADS
#     define SWIG_PYTHON_INITIALIZE_THREADS  PyEval_InitThreads() 
#    endif
#    ifdef __cplusplus /* C++ code */
       class SWIG_Python_Thread_Block {
         bool status;
         PyGILState_STATE state;
       public:
         void end() { if (status) { PyGILState_Release(state); status = false;} }
         SWIG_Python_Thread_Block() : status(true), state(PyGILState_Ensure()) {}
         ~SWIG_Python_Thread_Block() { end(); }
       };
       class SWIG_Python_Thread_Allow {
         bool status;
         PyThreadState *save;
       public:
         void end() { if (status) { PyEval_RestoreThread(save); status = false; }}
         SWIG_Python_Thread_Allow() : status(true), save(PyEval_SaveThread()) {}
         ~SWIG_Python_Thread_Allow() { end(); }
       };
#      define SWIG_PYTHON_THREAD_BEGIN_BLOCK   SWIG_Python_Thread_Block _swig_thread_block
#      define SWIG_PYTHON_THREAD_END_BLOCK     _swig_thread_block.end()
#      define SWIG_PYTHON_THREAD_BEGIN_ALLOW   SWIG_Python_Thread_Allow _swig_thread_allow
#      define SWIG_PYTHON_THREAD_END_ALLOW     _swig_thread_allow.end()
#    else /* C code */
#      define SWIG_PYTHON_THREAD_BEGIN_BLOCK   PyGILState_STATE _swig_thread_block = PyGILState_Ensure()
#      define SWIG_PYTHON_THREAD_END_BLOCK     PyGILState_Release(_swig_thread_block)
#      define SWIG_PYTHON_THREAD_BEGIN_ALLOW   PyThreadState *_swig_thread_allow = PyEval_SaveThread()
#      define SWIG_PYTHON_THREAD_END_ALLOW     PyEval_RestoreThread(_swig_thread_allow)
#    endif
#  else /* Old thread way, not implemented, user must provide it */
#    if !defined(SWIG_PYTHON_INITIALIZE_THREADS)
#      define SWIG_PYTHON_INITIALIZE_THREADS
#    endif
#    if !defined(SWIG_PYTHON_THREAD_BEGIN_BLOCK)
#      define SWIG_PYTHON_THREAD_BEGIN_BLOCK
#    endif
#    if !defined(SWIG_PYTHON_THREAD_END_BLOCK)
#      define SWIG_PYTHON_THREAD_END_BLOCK
#    endif
#    if !defined(SWIG_PYTHON_THREAD_BEGIN_ALLOW)
#      define SWIG_PYTHON_THREAD_BEGIN_ALLOW
#    endif
#    if !defined(SWIG_PYTHON_THREAD_END_ALLOW)
#      define SWIG_PYTHON_THREAD_END_ALLOW
#    endif
#  endif
#else /* No thread support */
#  define SWIG_PYTHON_INITIALIZE_THREADS
#  define SWIG_PYTHON_THREAD_BEGIN_BLOCK
#  define SWIG_PYTHON_THREAD_END_BLOCK
#  define SWIG_PYTHON_THREAD_BEGIN_ALLOW
#  define SWIG_PYTHON_THREAD_END_ALLOW
#endif

/* -----------------------------------------------------------------------------
 * Python API portion that goes into the runtime
 * ----------------------------------------------------------------------------- */

src/subversion/subversion/bindings/swig/python/core.c  view on Meta::CPAN

		"svn_location_invoke_segment_receiver(svn_location_segment_receiver_t _obj, svn_location_segment_t segment, void * baton, \n"
		"    apr_pool_t pool) -> svn_error_t\n"
		""},
	 { (char *)"svn_log_entry_receiver_t_swigregister", svn_log_entry_receiver_t_swigregister, METH_VARARGS, NULL},
	 { (char *)"svn_log_message_receiver_t_swigregister", svn_log_message_receiver_t_swigregister, METH_VARARGS, NULL},
	 { (char *)"svn_commit_callback2_t_swigregister", svn_commit_callback2_t_swigregister, METH_VARARGS, NULL},
	 { (char *)"svn_commit_callback_t_swigregister", svn_commit_callback_t_swigregister, METH_VARARGS, NULL},
	 { (char *)"svn_cancel_func_t_swigregister", svn_cancel_func_t_swigregister, METH_VARARGS, NULL},
	 { (char *)"svn_location_segment_receiver_t_swigregister", svn_location_segment_receiver_t_swigregister, METH_VARARGS, NULL},
	 { (char *)"svn_pool_create", _wrap_svn_pool_create, METH_VARARGS, (char *)"svn_pool_create(apr_pool_t parent_pool, apr_allocator_t * allocator) -> apr_pool_t"},
	 { (char *)"svn_pool_create_allocator", _wrap_svn_pool_create_allocator, METH_VARARGS, (char *)"svn_pool_create_allocator(svn_boolean_t thread_safe) -> apr_allocator_t *"},
	 { (char *)"svn_ver_compatible", _wrap_svn_ver_compatible, METH_VARARGS, (char *)"svn_ver_compatible(svn_version_t const * my_version, svn_version_t const * lib_version) -> svn_boolean_t"},
	 { (char *)"svn_ver_equal", _wrap_svn_ver_equal, METH_VARARGS, (char *)"svn_ver_equal(svn_version_t const * my_version, svn_version_t const * lib_version) -> svn_boolean_t"},
	 { (char *)"svn_version_checklist_t_label_set", _wrap_svn_version_checklist_t_label_set, METH_VARARGS, (char *)"svn_version_checklist_t_label_set(svn_version_checklist_t self, char const * label)"},
	 { (char *)"svn_version_checklist_t_label_get", _wrap_svn_version_checklist_t_label_get, METH_VARARGS, (char *)"svn_version_checklist_t_label_get(svn_version_checklist_t self) -> char const *"},
	 { (char *)"svn_version_checklist_t_version_query_set", _wrap_svn_version_checklist_t_version_query_set, METH_VARARGS, (char *)"svn_version_checklist_t_version_query_set(svn_version_checklist_t self, svn_version_t const *(*)(void) version_query)"},
	 { (char *)"svn_version_checklist_t_version_query_get", _wrap_svn_version_checklist_t_version_query_get, METH_VARARGS, (char *)"svn_version_checklist_t_version_query_get(svn_version_checklist_t self) -> svn_version_t const *(*)(void)"},
	 { (char *)"new_svn_version_checklist_t", _wrap_new_svn_version_checklist_t, METH_VARARGS, (char *)"new_svn_version_checklist_t() -> svn_version_checklist_t"},
	 { (char *)"delete_svn_version_checklist_t", _wrap_delete_svn_version_checklist_t, METH_VARARGS, (char *)"delete_svn_version_checklist_t(svn_version_checklist_t self)"},
	 { (char *)"svn_version_checklist_t_swigregister", svn_version_checklist_t_swigregister, METH_VARARGS, NULL},
	 { (char *)"svn_ver_check_list", _wrap_svn_ver_check_list, METH_VARARGS, (char *)"svn_ver_check_list(svn_version_t const * my_version, svn_version_checklist_t checklist) -> svn_error_t"},

src/subversion/subversion/bindings/swig/python/core.py  view on Meta::CPAN

svn_location_segment_receiver_t_swigregister = _core.svn_location_segment_receiver_t_swigregister
svn_location_segment_receiver_t_swigregister(svn_location_segment_receiver_t)

SVN_ALLOCATOR_RECOMMENDED_MAX_FREE = _core.SVN_ALLOCATOR_RECOMMENDED_MAX_FREE

def svn_pool_create(*args):
  """svn_pool_create(apr_pool_t parent_pool, apr_allocator_t * allocator) -> apr_pool_t"""
  return _core.svn_pool_create(*args)

def svn_pool_create_allocator(*args):
  """svn_pool_create_allocator(svn_boolean_t thread_safe) -> apr_allocator_t *"""
  return _core.svn_pool_create_allocator(*args)
SVN_VER_MAJOR = _core.SVN_VER_MAJOR
SVN_VER_MINOR = _core.SVN_VER_MINOR
SVN_VER_PATCH = _core.SVN_VER_PATCH
SVN_VER_MICRO = _core.SVN_VER_MICRO
SVN_VER_LIBRARY = _core.SVN_VER_LIBRARY
SVN_VER_TAG = _core.SVN_VER_TAG
SVN_VER_NUMTAG = _core.SVN_VER_NUMTAG
SVN_VER_REVISION = _core.SVN_VER_REVISION
SVN_VER_NUM = _core.SVN_VER_NUM

src/subversion/subversion/bindings/swig/python/core.py  view on Meta::CPAN




      self.__dict__.setdefault("_members",{})[name] = value

      return _swig_setattr(self, self.__class__, name, value)

apr_hash_t_swigregister = _core.apr_hash_t_swigregister
apr_hash_t_swigregister(apr_hash_t)

import threading

application_pool = None
application_pool_lock = threading.Lock()
class GenericSWIGWrapper:
  def __init__(self, this, pool):
    """Create new Generic SWIG wrapper object"""
    import weakref
    self.this = this
    self._parent_pool = pool
    self._is_valid = weakref.ref(pool._is_valid)

  def set_parent_pool(self, pool):
    """Set the parent pool of this object"""

src/subversion/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c  view on Meta::CPAN


#include <Python.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#include <apr_pools.h>
#include <apr_hash.h>
#include <apr_portable.h>
#include <apr_thread_proc.h>

#include "svn_hash.h"
#include "svn_client.h"
#include "svn_string.h"
#include "svn_opt.h"
#include "svn_delta.h"
#include "svn_auth.h"
#include "svn_props.h"
#include "svn_pools.h"
#include "svn_mergeinfo.h"

src/subversion/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c  view on Meta::CPAN

/* http://www.python.org/dev/peps/pep-0353/#conversion-guidelines */
#if PY_VERSION_HEX < 0x02050000 && !defined(PY_SSIZE_T_MIN)
typedef int Py_ssize_t;
# define PY_SSIZE_T_MAX INT_MAX
# define PY_SSIZE_T_MIN INT_MIN
#endif


/*** Manage the Global Interpreter Lock ***/

/* If both Python and APR have threads available, we can optimize ourselves
 * by releasing the global interpreter lock when we drop into our SVN calls.
 *
 * In svn_types.i, svn_swig_py_release_py_lock is called before every
 * function, then svn_swig_py_acquire_py_lock is called after every
 * function.  So, if these functions become no-ops, then Python will
 * start to block...
 *
 * The Subversion libraries can be assumed to be thread-safe *only* when
 * APR_HAS_THREAD is 1.  The APR pool allocations aren't thread-safe unless
 * APR_HAS_THREAD is 1.
 */

#if defined(WITH_THREAD) && APR_HAS_THREADS
#define ACQUIRE_PYTHON_LOCK
#endif

#ifdef ACQUIRE_PYTHON_LOCK
static apr_threadkey_t *_saved_thread_key = NULL;
static apr_pool_t *_saved_thread_pool = NULL;
#endif

void svn_swig_py_release_py_lock(void)
{
#ifdef ACQUIRE_PYTHON_LOCK
  PyThreadState *thread_state;

  if (_saved_thread_key == NULL)
    {
      /* Obviously, creating a top-level pool for this is pretty stupid. */
      apr_pool_create(&_saved_thread_pool, NULL);
      apr_threadkey_private_create(&_saved_thread_key, NULL,
                                   _saved_thread_pool);
    }

  thread_state = PyEval_SaveThread();
  apr_threadkey_private_set(thread_state, _saved_thread_key);
#endif
}

void svn_swig_py_acquire_py_lock(void)
{
#ifdef ACQUIRE_PYTHON_LOCK
  void *val;
  PyThreadState *thread_state;
  apr_threadkey_private_get(&val, _saved_thread_key);
  thread_state = val;
  PyEval_RestoreThread(thread_state);
#endif
}



/*** Automatic Pool Management Functions ***/

/* The application pool */
static apr_pool_t *application_pool = NULL;
static PyObject *application_py_pool = NULL;

src/subversion/subversion/bindings/swig/python/svn_client.c  view on Meta::CPAN

#  if defined(SWIG_PYTHON_THREADS)
#    undef SWIG_PYTHON_THREADS
#  endif
#endif
#if defined(SWIG_PYTHON_THREADS) /* Threading support is enabled */
#  if !defined(SWIG_PYTHON_USE_GIL) && !defined(SWIG_PYTHON_NO_USE_GIL)
#    if (PY_VERSION_HEX >= 0x02030000) /* For 2.3 or later, use the PyGILState calls */
#      define SWIG_PYTHON_USE_GIL
#    endif
#  endif
#  if defined(SWIG_PYTHON_USE_GIL) /* Use PyGILState threads calls */
#    ifndef SWIG_PYTHON_INITIALIZE_THREADS
#     define SWIG_PYTHON_INITIALIZE_THREADS  PyEval_InitThreads() 
#    endif
#    ifdef __cplusplus /* C++ code */
       class SWIG_Python_Thread_Block {
         bool status;
         PyGILState_STATE state;
       public:
         void end() { if (status) { PyGILState_Release(state); status = false;} }
         SWIG_Python_Thread_Block() : status(true), state(PyGILState_Ensure()) {}
         ~SWIG_Python_Thread_Block() { end(); }
       };
       class SWIG_Python_Thread_Allow {
         bool status;
         PyThreadState *save;
       public:
         void end() { if (status) { PyEval_RestoreThread(save); status = false; }}
         SWIG_Python_Thread_Allow() : status(true), save(PyEval_SaveThread()) {}
         ~SWIG_Python_Thread_Allow() { end(); }
       };
#      define SWIG_PYTHON_THREAD_BEGIN_BLOCK   SWIG_Python_Thread_Block _swig_thread_block
#      define SWIG_PYTHON_THREAD_END_BLOCK     _swig_thread_block.end()
#      define SWIG_PYTHON_THREAD_BEGIN_ALLOW   SWIG_Python_Thread_Allow _swig_thread_allow
#      define SWIG_PYTHON_THREAD_END_ALLOW     _swig_thread_allow.end()
#    else /* C code */
#      define SWIG_PYTHON_THREAD_BEGIN_BLOCK   PyGILState_STATE _swig_thread_block = PyGILState_Ensure()
#      define SWIG_PYTHON_THREAD_END_BLOCK     PyGILState_Release(_swig_thread_block)
#      define SWIG_PYTHON_THREAD_BEGIN_ALLOW   PyThreadState *_swig_thread_allow = PyEval_SaveThread()
#      define SWIG_PYTHON_THREAD_END_ALLOW     PyEval_RestoreThread(_swig_thread_allow)
#    endif
#  else /* Old thread way, not implemented, user must provide it */
#    if !defined(SWIG_PYTHON_INITIALIZE_THREADS)
#      define SWIG_PYTHON_INITIALIZE_THREADS
#    endif
#    if !defined(SWIG_PYTHON_THREAD_BEGIN_BLOCK)
#      define SWIG_PYTHON_THREAD_BEGIN_BLOCK
#    endif
#    if !defined(SWIG_PYTHON_THREAD_END_BLOCK)
#      define SWIG_PYTHON_THREAD_END_BLOCK
#    endif
#    if !defined(SWIG_PYTHON_THREAD_BEGIN_ALLOW)
#      define SWIG_PYTHON_THREAD_BEGIN_ALLOW
#    endif
#    if !defined(SWIG_PYTHON_THREAD_END_ALLOW)
#      define SWIG_PYTHON_THREAD_END_ALLOW
#    endif
#  endif
#else /* No thread support */
#  define SWIG_PYTHON_INITIALIZE_THREADS
#  define SWIG_PYTHON_THREAD_BEGIN_BLOCK
#  define SWIG_PYTHON_THREAD_END_BLOCK
#  define SWIG_PYTHON_THREAD_BEGIN_ALLOW
#  define SWIG_PYTHON_THREAD_END_ALLOW
#endif

/* -----------------------------------------------------------------------------
 * Python API portion that goes into the runtime
 * ----------------------------------------------------------------------------- */



( run in 2.727 seconds using v1.01-cache-2.11-cpan-3cd7ad12f66 )