You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2013/03/06 12:10:05 UTC

svn commit: r1453290 [15/15] - in /subversion/branches/fsfs-format7: ./ build/ build/ac-macros/ build/generator/ build/generator/templates/ subversion/bindings/javahl/native/ subversion/bindings/javahl/src/org/apache/subversion/javahl/ subversion/bindi...

Modified: subversion/branches/fsfs-format7/subversion/tests/libsvn_wc/utils.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/tests/libsvn_wc/utils.c?rev=1453290&r1=1453289&r2=1453290&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/tests/libsvn_wc/utils.c (original)
+++ subversion/branches/fsfs-format7/subversion/tests/libsvn_wc/utils.c Wed Mar  6 11:10:01 2013
@@ -314,7 +314,10 @@ sbox_wc_commit(svn_test__sandbox_t *b, c
 }
 
 svn_error_t *
-sbox_wc_update(svn_test__sandbox_t *b, const char *path, svn_revnum_t revnum)
+sbox_wc_update_depth(svn_test__sandbox_t *b,
+                     const char *path,
+                     svn_revnum_t revnum,
+                     svn_depth_t depth)
 {
   svn_client_ctx_t *ctx;
   apr_array_header_t *result_revs;
@@ -328,12 +331,19 @@ sbox_wc_update(svn_test__sandbox_t *b, c
   APR_ARRAY_PUSH(paths, const char *) = sbox_wc_path(b, path);
   SVN_ERR(svn_client_create_context2(&ctx, NULL, b->pool));
   ctx->wc_ctx = b->wc_ctx;
-  return svn_client_update4(&result_revs, paths, &revision, svn_depth_infinity,
-                            TRUE, FALSE, FALSE, FALSE, FALSE,
+  return svn_client_update4(&result_revs, paths, &revision, depth,
+                            FALSE, FALSE, FALSE, FALSE, FALSE,
                             ctx, b->pool);
 }
 
 svn_error_t *
+sbox_wc_update(svn_test__sandbox_t *b, const char *path, svn_revnum_t revnum)
+{
+  SVN_ERR(sbox_wc_update_depth(b, path, revnum, svn_depth_infinity));
+  return SVN_NO_ERROR;
+}
+
+svn_error_t *
 sbox_wc_switch(svn_test__sandbox_t *b, const char *url)
 {
   svn_client_ctx_t *ctx;
@@ -363,17 +373,27 @@ svn_error_t *
 sbox_wc_resolve(svn_test__sandbox_t *b, const char *path, svn_depth_t depth,
                 svn_wc_conflict_choice_t conflict_choice)
 {
-  SVN_ERR(svn_wc__resolve_conflicts(b->wc_ctx, sbox_wc_path(b, path),
-                                    depth,
-                                    TRUE /* resolve_text */,
-                                    "" /* resolve_prop (ALL props) */,
-                                    TRUE /* resolve_tree */,
-                                    conflict_choice,
-                                    NULL, NULL, /* conflict func */
-                                    NULL, NULL, /* cancellation */
-                                    NULL, NULL, /* notification */
-                                    b->pool));
-  return SVN_NO_ERROR;
+  const char *lock_abspath;
+  svn_error_t *err;
+
+  SVN_ERR(svn_wc__acquire_write_lock_for_resolve(&lock_abspath, b->wc_ctx,
+                                                 sbox_wc_path(b, path),
+                                                 b->pool, b->pool));
+  err = svn_wc__resolve_conflicts(b->wc_ctx, sbox_wc_path(b, path),
+                                  depth,
+                                  TRUE /* resolve_text */,
+                                  "" /* resolve_prop (ALL props) */,
+                                  TRUE /* resolve_tree */,
+                                  conflict_choice,
+                                  NULL, NULL, /* conflict func */
+                                  NULL, NULL, /* cancellation */
+                                  NULL, NULL, /* notification */
+                                  b->pool);
+
+  err = svn_error_compose_create(err, svn_wc__release_write_lock(b->wc_ctx,
+                                                                 lock_abspath,
+                                                                 b->pool));
+  return err;
 }
 
 svn_error_t *

Modified: subversion/branches/fsfs-format7/subversion/tests/libsvn_wc/utils.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/tests/libsvn_wc/utils.h?rev=1453290&r1=1453289&r2=1453290&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/tests/libsvn_wc/utils.h (original)
+++ subversion/branches/fsfs-format7/subversion/tests/libsvn_wc/utils.h Wed Mar  6 11:10:01 2013
@@ -131,6 +131,12 @@ svn_error_t *
 sbox_wc_update(svn_test__sandbox_t *b, const char *path, svn_revnum_t revnum);
 
 svn_error_t *
+sbox_wc_update_depth(svn_test__sandbox_t *b,
+                     const char *path,
+                     svn_revnum_t revnum,
+                     svn_depth_t depth);
+
+svn_error_t *
 sbox_wc_switch(svn_test__sandbox_t *b, const char *url);
 
 /* */

Modified: subversion/branches/fsfs-format7/subversion/tests/libsvn_wc/wc-queries-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/tests/libsvn_wc/wc-queries-test.c?rev=1453290&r1=1453289&r2=1453290&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/tests/libsvn_wc/wc-queries-test.c (original)
+++ subversion/branches/fsfs-format7/subversion/tests/libsvn_wc/wc-queries-test.c Wed Mar  6 11:10:01 2013
@@ -82,8 +82,6 @@ static const int schema_statements[] =
 static const int slow_statements[] =
 {
   /* Operate on the entire WC */
-  STMT_HAS_SWITCHED_WCROOT,             /* wc scan op_depth 0 */
-  STMT_HAS_SWITCHED_WCROOT_REPOS_ROOT,  /* wc scan op_depth 0 */
   STMT_SELECT_ALL_NODES,                /* schema validation code */
 
   /* Is there a record? ### Can we somehow check for LIMIT 1? */

Modified: subversion/branches/fsfs-format7/subversion/tests/libsvn_wc/wc-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/tests/libsvn_wc/wc-test.c?rev=1453290&r1=1453289&r2=1453290&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/tests/libsvn_wc/wc-test.c (original)
+++ subversion/branches/fsfs-format7/subversion/tests/libsvn_wc/wc-test.c Wed Mar  6 11:10:01 2013
@@ -133,10 +133,12 @@ test_node_get_base(const svn_test_opts_t
         svn_revnum_t revision;
         const char *repos_relpath, *repos_root_url, *repos_uuid;
 
-        SVN_ERR(svn_wc__node_get_base(&revision, &repos_relpath,
+        SVN_ERR(svn_wc__node_get_base(NULL, &revision, &repos_relpath,
                                       &repos_root_url, &repos_uuid,
                                       NULL,
                                       b->wc_ctx, local_abspath,
+                                      TRUE /* ignore_enoent */,
+                                      FALSE /* show_hidden */,
                                       b->pool, b->pool));
         SVN_TEST_ASSERT(revision == subtest->base_rev);
         if (SVN_IS_VALID_REVNUM(subtest->base_rev))

Modified: subversion/branches/fsfs-format7/tools/client-side/bash_completion
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/client-side/bash_completion?rev=1453290&r1=1453289&r2=1453290&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/client-side/bash_completion (original)
+++ subversion/branches/fsfs-format7/tools/client-side/bash_completion Wed Mar  6 11:10:01 2013
@@ -647,14 +647,6 @@ _svn()
 	    [[ ${COMPREPLY} ]] && return 0
 	fi
 
-	# force mandatory --accept option for 'resolve' command
-	if [[ $cmd = 'resolve' && ! $acceptOpt ]]
-	then
-	    COMPREPLY=( $( compgen -W '--accept' -- $cur ) )
-	    # force option now! others will be available on later completions
-	    return 0
-	fi
-
 	# maximum number of additional arguments expected in various forms
 	case $cmd in
 	    merge)
@@ -789,7 +781,7 @@ _svn()
 
 	# otherwise build possible options for the command
 	pOpts="--username --password --no-auth-cache --non-interactive \
-	       --trust-server-cert"
+	       --trust-server-cert --force-interactive"
 	mOpts="-m --message -F --file --encoding --force-log --with-revprop"
 	rOpts="-r --revision"
 	qOpts="-q --quiet"
@@ -826,7 +818,8 @@ _svn()
 		;;
 	commit|ci)
 		cmdOpts="$mOpts $qOpts $nOpts --targets --editor-cmd $pOpts \
-		         --no-unlock $cOpts --keep-changelists"
+		         --no-unlock $cOpts --keep-changelists \
+		         --include-externals"
 		;;
 	copy|cp)
 		cmdOpts="$mOpts $rOpts $qOpts --editor-cmd $pOpts --parents \
@@ -840,7 +833,9 @@ _svn()
 		cmdOpts="$rOpts -x --extensions --diff-cmd --no-diff-deleted \
 		         $nOpts $pOpts --force --old --new --notice-ancestry \
 		         -c --change --summarize $cOpts --xml --git \
-		         --internal-diff --show-copies-as-adds"
+		         --internal-diff --show-copies-as-adds \
+		         --ignore-properties --properties-only --no-diff-added \
+		         --patch-compatible"
 		;;
 	export)
 		cmdOpts="$rOpts $qOpts $pOpts $nOpts --force --native-eol \
@@ -859,7 +854,7 @@ _svn()
 		;;
 	list|ls)
 		cmdOpts="$rOpts -v --verbose -R --recursive $pOpts \
-                         --incremental --xml --depth"
+                         --incremental --xml --depth --include-externals"
 		;;
 	lock)
 		cmdOpts="-m --message -F --file --encoding --force-log \
@@ -870,13 +865,13 @@ _svn()
 		         --incremental --xml $qOpts -l --limit -c --change \
                          $gOpts --with-all-revprops --with-revprop --depth \
 		         --diff --diff-cmd -x --extensions --internal-diff \
-		         --with-no-revprops"
+		         --with-no-revprops --search --search-and"
 		;;
 	merge)
 		cmdOpts="$rOpts $nOpts $qOpts --force --dry-run --diff3-cmd \
 		         $pOpts --ignore-ancestry -c --change -x --extensions \
                          --record-only --accept --reintegrate \
-		         --allow-mixed-revisions"
+		         --allow-mixed-revisions -v --verbose"
 		;;
 	mergeinfo)
 	        cmdOpts="$rOpts $pOpts --depth --show-revs -R --recursive"
@@ -886,7 +881,7 @@ _svn()
 		;;
 	move|mv|rename|ren)
 		cmdOpts="$mOpts $rOpts $qOpts --force --editor-cmd $pOpts \
-                         --parents"
+                         --parents --allow-mixed-revisions"
 		;;
 	patch)
 		cmdOpts="$qOpts $pOpts --dry-run --ignore-whitespace \
@@ -903,13 +898,13 @@ _svn()
 		    cmdOpts="$cmdOpts --revprop $rOpts"
 		;;
 	propget|pget|pg)
-	        cmdOpts="-v --verbose -R --recursive $rOpts --strict $pOpts $cOpts \
-                         --depth --xml"
+	        cmdOpts="-v --verbose -R --recursive $rOpts --strict \
+		         $pOpts $cOpts --depth --xml --show-inherited-props"
 		[[ $isRevProp || ! $prop ]] && cmdOpts="$cmdOpts --revprop"
 		;;
 	proplist|plist|pl)
 		cmdOpts="-v --verbose -R --recursive $rOpts --revprop $qOpts \
-		         $pOpts $cOpts --depth --xml"
+		         $pOpts $cOpts --depth --xml --show-inherited-props"
 		;;
 	propset|pset|ps)
 		cmdOpts="$qOpts --targets -R --recursive \
@@ -1035,9 +1030,9 @@ _svnadmin ()
 	cur=${COMP_WORDS[COMP_CWORD]}
 
 	# Possible expansions, without pure-prefix abbreviations such as "h".
-	cmds='crashtest create deltify dump help hotcopy list-dblogs \
-	      list-unused-dblogs load lslocks lstxns pack recover rmlocks \
-	      rmtxns setlog setrevprop setuuid upgrade verify --version'
+	cmds='crashtest create deltify dump freeze help hotcopy list-dblogs \
+	      list-unused-dblogs load lock lslocks lstxns pack recover rmlocks \
+	      rmtxns setlog setrevprop setuuid unlock upgrade verify --version'
 
 	if [[ $COMP_CWORD -eq 1 ]] ; then
 		COMPREPLY=( $( compgen -W "$cmds" -- $cur ) )
@@ -1046,7 +1041,8 @@ _svnadmin ()
 
 	# options that require a parameter
 	# note: continued lines must end '|' continuing lines must start '|'
-	optsParam="-r|--revision|--parent-dir|--fs-type"
+	optsParam="-r|--revision|--parent-dir|--fs-type|-M|--memory-cache-size"
+	optsParam="$optsParam|-F|--file"
 
 	# if not typing an option, or if the previous option required a
 	# parameter, then fallback on ordinary filename expansion
@@ -1061,13 +1057,18 @@ _svnadmin ()
 	case ${COMP_WORDS[1]} in
 	create)
 		cmdOpts="--bdb-txn-nosync --bdb-log-keep --config-dir \
-		         --fs-type --pre-1.4-compatible --pre-1.5-compatible"
+		         --fs-type --pre-1.4-compatible --pre-1.5-compatible \
+		         --pre-1.6-compatible --compatible-version"
 		;;
 	deltify)
 		cmdOpts="-r --revision -q --quiet"
 		;;
 	dump)
-		cmdOpts="-r --revision --incremental -q --quiet --deltas"
+		cmdOpts="-r --revision --incremental -q --quiet --deltas \
+		         -M --memory-cache-size"
+		;;
+	freeze)
+		cmdOpts="-F --file"
 		;;
 	help|h|\?)
 		cmdOpts="$cmds"
@@ -1077,7 +1078,11 @@ _svnadmin ()
 		;;
 	load)
 		cmdOpts="--ignore-uuid --force-uuid --parent-dir -q --quiet \
-		         --use-pre-commit-hook --use-post-commit-hook"
+		         --use-pre-commit-hook --use-post-commit-hook \
+		         --bypass-prop-validation -M --memory-cache-size"
+		;;
+	lock|unlock)
+		cmdOpts="--bypass-hooks"
 		;;
 	recover)
 		cmdOpts="--wait"
@@ -1121,6 +1126,10 @@ _svnadmin ()
 		--help)          cmdOpts=${cmdOpts/ -h / } ;;
 		-r)              cmdOpts=${cmdOpts/ --revision / } ;;
 		--revision)      cmdOpts=${cmdOpts/ -r / } ;;
+		-F)              cmdOpts=${cmdOpts/ --file / } ;;
+		--file)          cmdOpts=${cmdOpts/ -F / } ;;
+		-M)              cmdOpts=${cmdOpts/ --memory-cache-size / } ;;
+		--memory-cache-size) cmdOpts=${cmdOpts/ --M / } ;;
 		esac
 
 		# skip next option if this one requires a parameter

Modified: subversion/branches/fsfs-format7/tools/dev/unix-build/Makefile.svn
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/dev/unix-build/Makefile.svn?rev=1453290&r1=1453289&r2=1453290&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/dev/unix-build/Makefile.svn (original)
+++ subversion/branches/fsfs-format7/tools/dev/unix-build/Makefile.svn Wed Mar  6 11:10:01 2013
@@ -71,7 +71,7 @@ GNU_ICONV_VER	= 1.14
 APR_UTIL_VER	= 1.4.1
 HTTPD_VER	= 2.2.22
 NEON_VER	= 0.29.6
-SERF_VER	= 1.1.0
+SERF_VER	= 1.2.0
 SERF_OLD_VER	= 0.3.1
 CYRUS_SASL_VER	= 2.1.25
 SQLITE_VER	= 3071201
@@ -1378,7 +1378,8 @@ HTTPD_START_CMD = $(HTTPD_CMD) -k start
 HTTPD_START_CMD_DEBUG = $(HTTPD_START_CMD) -X
 HTTPD_STOP_CMD = $(HTTPD_CMD) -k stop; sleep 3
 
-SVNSERVE_START_CMD = (ls $(PWD)/svnserve-*.pid | while read pidfile; do \
+SVNSERVE_START_CMD = (test -e $(PWD)/svnserve-*.pid && \
+			ls $(PWD)/svnserve-*.pid | while read pidfile; do \
 				kill `cat "$$pidfile"`; sleep 3; \
 				rm -f $$pidfile; \
 			done); \

Propchange: subversion/branches/fsfs-format7/tools/dist/make-deps-tarball.sh
------------------------------------------------------------------------------
  Merged /subversion/trunk/tools/dist/make-deps-tarball.sh:r1445081-1453266

Modified: subversion/branches/fsfs-format7/tools/hook-scripts/mailer/mailer.py
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/hook-scripts/mailer/mailer.py?rev=1453290&r1=1453289&r2=1453290&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/hook-scripts/mailer/mailer.py (original)
+++ subversion/branches/fsfs-format7/tools/hook-scripts/mailer/mailer.py Wed Mar  6 11:10:01 2013
@@ -99,7 +99,7 @@ def main(pool, cmd, config_fname, repos_
     revision = int(cmd_args[0])
     repos = Repository(repos_dir, revision, pool)
     cfg = Config(config_fname, repos,
-                 {'author': author,
+                 {'author': repos.author,
                   'repos_basename': os.path.basename(repos.repos_dir)
                  })
     messenger = Commit(pool, cfg, repos)
@@ -237,6 +237,7 @@ class MailedOutput(OutputBase):
       self.reply_to = self.reply_to[3:]
 
   def mail_headers(self, group, params):
+    from email import Utils
     subject = self.make_subject(group, params)
     try:
       subject.encode('ascii')
@@ -246,6 +247,8 @@ class MailedOutput(OutputBase):
     hdrs = 'From: %s\n'    \
            'To: %s\n'      \
            'Subject: %s\n' \
+           'Date: %s\n' \
+           'Message-ID: %s\n' \
            'MIME-Version: 1.0\n' \
            'Content-Type: text/plain; charset=UTF-8\n' \
            'Content-Transfer-Encoding: 8bit\n' \
@@ -253,8 +256,9 @@ class MailedOutput(OutputBase):
            'X-Svn-Commit-Author: %s\n' \
            'X-Svn-Commit-Revision: %d\n' \
            'X-Svn-Commit-Repository: %s\n' \
-           % (self.from_addr, ', '.join(self.to_addrs), subject,
-              group, self.repos.author or 'no_author', self.repos.rev,
+           % (self.from_addr, ', '.join(self.to_addrs), subject, 
+              Utils.formatdate(), Utils.make_msgid(), group,
+              self.repos.author or 'no_author', self.repos.rev,
               os.path.basename(self.repos.repos_dir))
     if self.reply_to:
       hdrs = '%sReply-To: %s\n' % (hdrs, self.reply_to)
@@ -352,7 +356,7 @@ class Commit(Messenger):
     editor = svn.repos.ChangeCollector(repos.fs_ptr, repos.root_this, \
                                        self.pool)
     e_ptr, e_baton = svn.delta.make_editor(editor, self.pool)
-    svn.repos.replay(repos.root_this, e_ptr, e_baton, self.pool)
+    svn.repos.replay2(repos.root_this, "", svn.core.SVN_INVALID_REVNUM, 1, e_ptr, e_baton, None, self.pool)
 
     self.changelist = sorted(editor.get_changes().items())
 

Modified: subversion/branches/fsfs-format7/tools/hook-scripts/mailer/tests/mailer-init.sh
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/hook-scripts/mailer/tests/mailer-init.sh?rev=1453290&r1=1453289&r2=1453290&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/hook-scripts/mailer/tests/mailer-init.sh (original)
+++ subversion/branches/fsfs-format7/tools/hook-scripts/mailer/tests/mailer-init.sh Wed Mar  6 11:10:01 2013
@@ -52,7 +52,7 @@ svn commit -m "initial load"
 svn ps prop1 propval1 file1
 echo change C1 >> file2
 svn ps svn:keywords Id file2
-svn ps svn:new_svn_prop val file2
+svn ps --force svn:new_svn_prop val file2
 svn ps prop1 propval1 file2
 svn ps prop3 propval3 dir1
 echo change C2 >> dir2/file5
@@ -103,6 +103,7 @@ svn commit -m "copy dir, then make a cha
 # add a binary file and set property to binary value
 echo -e "\x00\x01\x02\x03\x04" > file11
 svn add file11
+svn ps svn:mime-type application/octect-stream file11
 svn ps prop2 -F file11 file9 
 svn commit -m "add binary file"
 

Modified: subversion/branches/fsfs-format7/tools/hook-scripts/mailer/tests/mailer-t1.output
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/hook-scripts/mailer/tests/mailer-t1.output?rev=1453290&r1=1453289&r2=1453290&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/hook-scripts/mailer/tests/mailer-t1.output (original)
+++ subversion/branches/fsfs-format7/tools/hook-scripts/mailer/tests/mailer-t1.output Wed Mar  6 11:10:01 2013
@@ -1,3 +1,30 @@
+Group: file
+Subject: r1 -  dir1 dir2
+
+Author: mailer test
+Date: Sun Sep  9 01:46:40 2001
+New Revision: 1
+
+Log:
+initial load
+
+Added:
+   file1
+   file2
+
+Added: file1
+==============================================================================
+--- /dev/null	00:00:00 1970	(empty, because file is newly added)
++++ file1	Sun Sep  9 01:46:40 2001	(r1)
+@@ -0,0 +1 @@
++file1
+
+Added: file2
+==============================================================================
+--- /dev/null	00:00:00 1970	(empty, because file is newly added)
++++ file2	Sun Sep  9 01:46:40 2001	(r1)
+@@ -0,0 +1 @@
++file2
 Group: file plus other areas
 Subject: r1 -  dir1 dir2
 
@@ -126,32 +153,26 @@ Added: file2
 @@ -0,0 +1 @@
 +file2
 Group: file
-Subject: r1 -  dir1 dir2
+Subject: r2 -  dir1 dir2
 
 Author: mailer test
-Date: Sun Sep  9 01:46:40 2001
-New Revision: 1
+Date: Sun Sep  9 04:33:20 2001
+New Revision: 2
 
 Log:
-initial load
-
-Added:
-   file1
-   file2
+two file changes.  Fixes Blah#123
 
-Added: file1
-==============================================================================
---- /dev/null	00:00:00 1970	(empty, because file is newly added)
-+++ file1	Sun Sep  9 01:46:40 2001	(r1)
-@@ -0,0 +1 @@
-+file1
+Modified:
+   file1   (props changed)
+   file2   (contents, props changed)
 
-Added: file2
+Modified: file2
 ==============================================================================
---- /dev/null	00:00:00 1970	(empty, because file is newly added)
-+++ file2	Sun Sep  9 01:46:40 2001	(r1)
-@@ -0,0 +1 @@
-+file2
+--- file2	Sun Sep  9 01:46:40 2001	(r1)
++++ file2	Sun Sep  9 04:33:20 2001	(r2)
+@@ -1 +1,2 @@
+ file2
++change C1
 Group: bugtracker
 Subject: Fix for Blah#123: r2 -  dir1 dir2
 
@@ -250,27 +271,6 @@ Modified: dir2/file5
 @@ -1 +1,2 @@
  file5
 +change C2
-Group: file
-Subject: r2 -  dir1 dir2
-
-Author: mailer test
-Date: Sun Sep  9 04:33:20 2001
-New Revision: 2
-
-Log:
-two file changes.  Fixes Blah#123
-
-Modified:
-   file1   (props changed)
-   file2   (contents, props changed)
-
-Modified: file2
-==============================================================================
---- file2	Sun Sep  9 01:46:40 2001	(r1)
-+++ file2	Sun Sep  9 04:33:20 2001	(r2)
-@@ -1 +1,2 @@
- file2
-+change C1
 Group: All
 Subject: r3 - dir2 dir3
 
@@ -314,7 +314,7 @@ Copied and modified: dir3/file8 (from r2
 @@ -1 +1,2 @@
  file1
 +change C3
-Group: file plus other areas
+Group: file
 Subject: r5 -  dir1 dir3
 
 Author: mailer test
@@ -326,12 +326,7 @@ changes and deletes of properties
 
 Modified:
    file2   (props changed)
-
-Changes in other areas also in this revision:
-Modified:
-   dir1/   (props changed)
-   dir3/   (props changed)
-Group: All
+Group: file plus other areas
 Subject: r5 -  dir1 dir3
 
 Author: mailer test
@@ -342,10 +337,13 @@ Log:
 changes and deletes of properties
 
 Modified:
+   file2   (props changed)
+
+Changes in other areas also in this revision:
+Modified:
    dir1/   (props changed)
    dir3/   (props changed)
-   file2   (props changed)
-Group: file
+Group: All
 Subject: r5 -  dir1 dir3
 
 Author: mailer test
@@ -356,6 +354,8 @@ Log:
 changes and deletes of properties
 
 Modified:
+   dir1/   (props changed)
+   dir3/   (props changed)
    file2   (props changed)
 Group: file
 Subject: r6 -  dir1 dir4
@@ -411,8 +411,8 @@ Modified: dir1/file3
 @@ -1 +1,2 @@
  file3
 +change C4
-Group: All
-Subject: r6 -  dir1 dir4
+Group: bugtracker
+Subject: Fix for Blaz#456: r6 -  dir1 dir4
 
 Author: mailer test
 Date: Sun Sep  9 15:40:00 2001
@@ -471,8 +471,8 @@ Added: file9
 +++ file9	Sun Sep  9 15:40:00 2001	(r6)
 @@ -0,0 +1 @@
 +file9
-Group: bugtracker
-Subject: Fix for Blaz#456: r6 -  dir1 dir4
+Group: All
+Subject: r6 -  dir1 dir4
 
 Author: mailer test
 Date: Sun Sep  9 15:40:00 2001
@@ -501,6 +501,26 @@ Added: file9
 +++ file9	Sun Sep  9 15:40:00 2001	(r6)
 @@ -0,0 +1 @@
 +file9
+Group: file
+Subject: r7 -  dir1 dir2 dir3 dir3/dir5
+
+Author: mailer test
+Date: Sun Sep  9 18:26:40 2001
+New Revision: 7
+
+Log:
+adds, deletes, and a change
+
+Deleted:
+   file2
+
+Deleted: file2
+==============================================================================
+--- file2	Sun Sep  9 18:26:40 2001	(r6)
++++ /dev/null	00:00:00 1970	(deleted)
+@@ -1,2 +0,0 @@
+-file2
+-change C1
 Group: file plus other areas
 Subject: r7 -  dir1 dir2 dir3 dir3/dir5
 
@@ -588,26 +608,6 @@ Deleted: file2
 @@ -1,2 +0,0 @@
 -file2
 -change C1
-Group: file
-Subject: r7 -  dir1 dir2 dir3 dir3/dir5
-
-Author: mailer test
-Date: Sun Sep  9 18:26:40 2001
-New Revision: 7
-
-Log:
-adds, deletes, and a change
-
-Deleted:
-   file2
-
-Deleted: file2
-==============================================================================
---- file2	Sun Sep  9 18:26:40 2001	(r6)
-+++ /dev/null	00:00:00 1970	(deleted)
-@@ -1,2 +0,0 @@
--file2
--change C1
 Group: All
 Subject: r8 - in dir6: . dir5
 
@@ -644,7 +644,7 @@ Modified: dir6/file4
 @@ -1 +1,2 @@
  file4
 +change C6
-Group: file plus other areas
+Group: file
 Subject: r9 - 
 
 Author: mailer test
@@ -662,7 +662,7 @@ Modified:
 Added: file11
 ==============================================================================
 Binary file. No diff available.
-Group: All
+Group: file plus other areas
 Subject: r9 - 
 
 Author: mailer test
@@ -680,7 +680,7 @@ Modified:
 Added: file11
 ==============================================================================
 Binary file. No diff available.
-Group: file
+Group: All
 Subject: r9 - 
 
 Author: mailer test
@@ -698,7 +698,7 @@ Modified:
 Added: file11
 ==============================================================================
 Binary file. No diff available.
-Group: file plus other areas
+Group: file
 Subject: r10 - 
 
 Author: mailer test
@@ -715,7 +715,7 @@ Modified:
 Modified: file11
 ==============================================================================
 Binary file (source and/or target). No diff available.
-Group: All
+Group: file plus other areas
 Subject: r10 - 
 
 Author: mailer test
@@ -732,7 +732,7 @@ Modified:
 Modified: file11
 ==============================================================================
 Binary file (source and/or target). No diff available.
-Group: file
+Group: All
 Subject: r10 - 
 
 Author: mailer test

Modified: subversion/branches/fsfs-format7/tools/server-side/fsfs-stats.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/server-side/fsfs-stats.c?rev=1453290&r1=1453289&r2=1453290&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/server-side/fsfs-stats.c (original)
+++ subversion/branches/fsfs-format7/tools/server-side/fsfs-stats.c Wed Mar  6 11:10:01 2013
@@ -191,6 +191,44 @@ typedef struct largest_changes_t
   large_change_info_t **changes;
 } largest_changes_t;
 
+/* Information we gather per size bracket.
+ */
+typedef struct histogram_line_t
+{
+  /* number of item that fall into this bracket */
+  apr_int64_t count;
+
+  /* sum of values in this bracket */
+  apr_int64_t sum;
+} histogram_line_t;
+
+/* A histogram of 64 bit integer values. 
+ */
+typedef struct histogram_t
+{
+  /* total sum over all brackets */
+  histogram_line_t total;
+
+  /* one bracket per binary step.
+   * line[i] is the 2^(i-1) <= x < 2^i bracket */
+  histogram_line_t lines[64];
+} histogram_t;
+
+/* Information we collect per file ending. 
+ */
+typedef struct extension_info_t
+{
+  /* file extension, including leading "."
+   * "(none)" in the container for files w/o extension. */
+  const char *extension;
+  
+  /* histogram of representation sizes */
+  histogram_t rep_histogram;
+  
+  /* histogram of sizes of changed files */
+  histogram_t node_histogram;
+} extension_info_t;
+
 /* Root data structure containing all information about a given repository.
  */
 typedef struct fs_fs_t
@@ -225,6 +263,42 @@ typedef struct fs_fs_t
 
   /* track the biggest contributors to repo size */
   largest_changes_t *largest_changes;
+
+  /* history of representation sizes */
+  histogram_t rep_size_histogram;
+
+  /* history of sizes of changed nodes */
+  histogram_t node_size_histogram;
+
+  /* history of unused representations */
+  histogram_t unused_rep_histogram;
+
+  /* history of sizes of changed files */
+  histogram_t file_histogram;
+
+  /* history of sizes of file representations */
+  histogram_t file_rep_histogram;
+
+  /* history of sizes of changed file property sets */
+  histogram_t file_prop_histogram;
+
+  /* history of sizes of file property representations */
+  histogram_t file_prop_rep_histogram;
+
+  /* history of sizes of changed directories (in bytes) */
+  histogram_t dir_histogram;
+
+  /* history of sizes of directories representations */
+  histogram_t dir_rep_histogram;
+
+  /* history of sizes of changed directories property sets */
+  histogram_t dir_prop_histogram;
+
+  /* history of sizes of directories property representations */
+  histogram_t dir_prop_rep_histogram;
+
+  /* extension -> extension_info_t* map */
+  apr_hash_t *by_extension;
 } fs_fs_t;
 
 /* Return the rev pack folder for revision REV in FS.
@@ -393,28 +467,48 @@ initialize_largest_changes(fs_fs_t *fs,
     }
 }
 
-/* Update data aggregators in FS with this representation of on-disk SIZE
- * for PATH in REVSION.
+/* Add entry for SIZE to HISTOGRAM.
+ */
+static void
+add_to_histogram(histogram_t *histogram,
+                 apr_int64_t size)
+{
+  apr_int64_t shift = 0;
+
+  while (((apr_int64_t)(1) << shift) <= size)
+    shift++;
+
+  histogram->total.count++;
+  histogram->total.sum += size;
+  histogram->lines[(apr_size_t)shift].count++;
+  histogram->lines[(apr_size_t)shift].sum += size;
+}
+
+/* Update data aggregators in FS with this representation of type KIND, on-
+ * disk REP_SIZE and expanded node size EXPANDED_SIZE for PATH in REVSION.
  */
 static void
 add_change(fs_fs_t *fs,
-           apr_size_t size,
+           apr_int64_t rep_size,
+           apr_int64_t expanded_size,
            svn_revnum_t revision,
-           const char *path)
+           const char *path,
+           rep_kind_t kind)
 {
-  if (size >= fs->largest_changes->min_size)
+  /* identify largest reps */
+  if (rep_size >= fs->largest_changes->min_size)
     {
       apr_size_t i;
       large_change_info_t *info
         = fs->largest_changes->changes[fs->largest_changes->count - 1];
-      info->size = size;
+      info->size = rep_size;
       info->revision = revision;
       svn_stringbuf_set(info->path, path);
 
       /* linear insertion but not too bad since count is low and insertions
        * near the end are more likely than close to front */
       for (i = fs->largest_changes->count - 1; i > 0; --i)
-        if (fs->largest_changes->changes[i-1]->size >= size)
+        if (fs->largest_changes->changes[i-1]->size >= rep_size)
           break;
         else
           fs->largest_changes->changes[i] = fs->largest_changes->changes[i-1];
@@ -423,6 +517,66 @@ add_change(fs_fs_t *fs,
       fs->largest_changes->min_size
         = fs->largest_changes->changes[fs->largest_changes->count-1]->size;
     }
+
+  /* global histograms */
+  add_to_histogram(&fs->rep_size_histogram, rep_size);
+  add_to_histogram(&fs->node_size_histogram, expanded_size);
+
+  /* specific histograms by type */
+  switch (kind)
+    {
+      case unused_rep:        add_to_histogram(&fs->unused_rep_histogram,
+                                               rep_size);
+                              break;
+      case dir_property_rep:  add_to_histogram(&fs->dir_prop_rep_histogram,
+                                               rep_size);
+                              add_to_histogram(&fs->dir_prop_histogram,
+                                              expanded_size);
+                              break;
+      case file_property_rep: add_to_histogram(&fs->file_prop_rep_histogram,
+                                               rep_size);
+                              add_to_histogram(&fs->file_prop_histogram,
+                                               expanded_size);
+                              break;
+      case dir_rep:           add_to_histogram(&fs->dir_rep_histogram,
+                                               rep_size);
+                              add_to_histogram(&fs->dir_histogram,
+                                               expanded_size);
+                              break;
+      case file_rep:          add_to_histogram(&fs->file_rep_histogram,
+                                               rep_size);
+                              add_to_histogram(&fs->file_histogram,
+                                               expanded_size);
+                              break;
+    }
+
+  /* by extension */
+  if (kind == file_rep)
+    {
+      /* determine extension */
+      extension_info_t *info;
+      const char * file_name = strrchr(path, '/');
+      const char * extension = file_name ? strrchr(file_name, '.') : NULL;
+
+      if (extension == NULL || extension == file_name + 1)
+        extension = "(none)";
+
+      /* get / auto-insert entry for this extension */
+      info = apr_hash_get(fs->by_extension, extension, APR_HASH_KEY_STRING);
+      if (info == NULL)
+        {
+          apr_pool_t *pool = apr_hash_pool_get(fs->by_extension);
+          info = apr_pcalloc(pool, sizeof(*info));
+          info->extension = apr_pstrdup(pool, extension);
+
+          apr_hash_set(fs->by_extension, info->extension,
+                       APR_HASH_KEY_STRING, info);
+        }
+
+      /* update per-extension histogram */
+      add_to_histogram(&info->node_histogram, expanded_size);
+      add_to_histogram(&info->rep_histogram, rep_size);
+    }
 }
 
 /* Given rev pack PATH in FS, read the manifest file and return the offsets
@@ -1198,7 +1352,11 @@ read_noderev(fs_fs_t *fs,
 
   /* record largest changes */
   if (text && text->ref_count == 1)
-    add_change(fs, text->size, text->revision, path);
+    add_change(fs, (apr_int64_t)text->size, (apr_int64_t)text->expanded_size,
+               text->revision, path, text->kind);
+  if (props && props->ref_count == 1)
+    add_change(fs, (apr_int64_t)props->size, (apr_int64_t)props->expanded_size,
+               props->revision, path, props->kind);
   
   /* if this is a directory and has not been processed, yet, read and
    * process it recursively */
@@ -1409,6 +1567,7 @@ read_revisions(fs_fs_t **fs,
                                     sizeof(revision_info_t *));
   (*fs)->null_base = apr_pcalloc(pool, sizeof(*(*fs)->null_base));
   initialize_largest_changes(*fs, 64, pool);
+  (*fs)->by_extension = apr_hash_make(pool);
 
   SVN_ERR(svn_cache__create_membuffer_cache(&(*fs)->window_cache,
                                             svn_cache__get_global_membuffer_cache(),
@@ -1547,6 +1706,213 @@ print_largest_reps(largest_changes_t *ch
            changes->changes[i]->path->data);
 }
 
+/* Print the non-zero section of HISTOGRAM to console. 
+ * Use POOL for allocations.
+ */
+static void
+print_histogram(histogram_t *histogram,
+                apr_pool_t *pool)
+{
+  int first = 0;
+  int last = 63;
+  int i;
+
+  /* identify non-zero range */
+  while (last > 0 && histogram->lines[last].count == 0)
+    --last;
+
+  while (first <= last && histogram->lines[first].count == 0)
+    ++first;
+
+  /* display histogram lines */
+  for (i = last; i >= first; --i)
+    printf(_("  [2^%2d, 2^%2d)   %15s (%2d%%) bytes in %12s (%2d%%) items\n"),
+           i-1, i,
+           svn__i64toa_sep(histogram->lines[i].sum, ',', pool),
+           (int)(histogram->lines[i].sum * 100 / histogram->total.sum),
+           svn__i64toa_sep(histogram->lines[i].count, ',', pool),
+           (int)(histogram->lines[i].count * 100 / histogram->total.count));
+}
+
+/* COMPARISON_FUNC for svn_sort__hash.
+ * Sort extension_info_t values by total count in descending order.
+ */
+static int
+compare_count(const svn_sort__item_t *a,
+              const svn_sort__item_t *b)
+{
+  const extension_info_t *lhs = a->value;
+  const extension_info_t *rhs = b->value;
+  apr_int64_t diff = lhs->node_histogram.total.count
+                   - rhs->node_histogram.total.count;
+
+  return diff > 0 ? -1 : (diff < 0 ? 1 : 0);
+}
+
+/* COMPARISON_FUNC for svn_sort__hash.
+ * Sort extension_info_t values by total uncompressed size in descending order.
+ */
+static int
+compare_node_size(const svn_sort__item_t *a,
+                  const svn_sort__item_t *b)
+{
+  const extension_info_t *lhs = a->value;
+  const extension_info_t *rhs = b->value;
+  apr_int64_t diff = lhs->node_histogram.total.sum
+                   - rhs->node_histogram.total.sum;
+
+  return diff > 0 ? -1 : (diff < 0 ? 1 : 0);
+}
+
+/* COMPARISON_FUNC for svn_sort__hash.
+ * Sort extension_info_t values by total prep count in descending order.
+ */
+static int
+compare_rep_size(const svn_sort__item_t *a,
+                 const svn_sort__item_t *b)
+{
+  const extension_info_t *lhs = a->value;
+  const extension_info_t *rhs = b->value;
+  apr_int64_t diff = lhs->rep_histogram.total.sum
+                   - rhs->rep_histogram.total.sum;
+
+  return diff > 0 ? -1 : (diff < 0 ? 1 : 0);
+}
+
+/* Return an array of extension_info_t* for the (up to) 16 most prominent
+ * extensions in FS according to the sort criterion COMPARISON_FUNC.
+ * Allocate results in POOL.
+ */
+static apr_array_header_t *
+get_by_extensions(fs_fs_t *fs,
+                  int (*comparison_func)(const svn_sort__item_t *,
+                                         const svn_sort__item_t *),
+                  apr_pool_t *pool)
+{
+  /* sort all data by extension */
+  apr_array_header_t *sorted
+    = svn_sort__hash(fs->by_extension, comparison_func, pool);
+
+  /* select the top (first) 16 entries */
+  int count = MIN(sorted->nelts, 16);
+  apr_array_header_t *result
+    = apr_array_make(pool, count, sizeof(extension_info_t*));
+  int i;
+
+  for (i = 0; i < count; ++i)
+    APR_ARRAY_PUSH(result, extension_info_t*)
+     = APR_ARRAY_IDX(sorted, i, svn_sort__item_t).value;
+
+  return result;
+}
+
+/* Print the (up to) 16 extensions in FS with the most changes. 
+ * Use POOL for allocations.
+ */
+static void
+print_extensions_by_changes(fs_fs_t *fs,
+                            apr_pool_t *pool)
+{
+  apr_array_header_t *data = get_by_extensions(fs, compare_count, pool);
+  apr_int64_t sum = 0;
+  int i;
+
+  for (i = 0; i < data->nelts; ++i)
+    {
+      extension_info_t *info = APR_ARRAY_IDX(data, i, extension_info_t *);
+      sum += info->node_histogram.total.count;
+      printf(_("  %9s %12s (%2d%%) changes\n"),
+             info->extension,
+             svn__i64toa_sep(info->node_histogram.total.count, ',', pool),
+             (int)(info->node_histogram.total.count * 100 /
+                   fs->file_histogram.total.count));
+    }
+
+  printf(_("  %9s %12s (%2d%%) changes\n"),
+         "(others)",
+         svn__i64toa_sep(fs->file_histogram.total.count - sum, ',', pool),
+         (int)((fs->file_histogram.total.count - sum) * 100 /
+               fs->file_histogram.total.count));
+}
+
+/* Print the (up to) 16 extensions in FS with the largest total size of
+ * changed file content.  Use POOL for allocations.
+ */
+static void
+print_extensions_by_nodes(fs_fs_t *fs,
+                          apr_pool_t *pool)
+{
+  apr_array_header_t *data = get_by_extensions(fs, compare_node_size, pool);
+  apr_int64_t sum = 0;
+  int i;
+
+  for (i = 0; i < data->nelts; ++i)
+    {
+      extension_info_t *info = APR_ARRAY_IDX(data, i, extension_info_t *);
+      sum += info->node_histogram.total.sum;
+      printf(_("  %9s %20s (%2d%%) bytes\n"),
+             info->extension,
+             svn__i64toa_sep(info->node_histogram.total.sum, ',', pool),
+             (int)(info->node_histogram.total.sum * 100 /
+                   fs->file_histogram.total.sum));
+    }
+
+  printf(_("  %9s %20s (%2d%%) bytes\n"),
+         "(others)",
+         svn__i64toa_sep(fs->file_histogram.total.sum - sum, ',', pool),
+         (int)((fs->file_histogram.total.sum - sum) * 100 /
+               fs->file_histogram.total.sum));
+}
+
+/* Print the (up to) 16 extensions in FS with the largest total size of
+ * changed file content.  Use POOL for allocations.
+ */
+static void
+print_extensions_by_reps(fs_fs_t *fs,
+                         apr_pool_t *pool)
+{
+  apr_array_header_t *data = get_by_extensions(fs, compare_rep_size, pool);
+  apr_int64_t sum = 0;
+  int i;
+
+  for (i = 0; i < data->nelts; ++i)
+    {
+      extension_info_t *info = APR_ARRAY_IDX(data, i, extension_info_t *);
+      sum += info->rep_histogram.total.sum;
+      printf(_("  %9s %20s (%2d%%) bytes\n"),
+             info->extension,
+             svn__i64toa_sep(info->rep_histogram.total.sum, ',', pool),
+             (int)(info->rep_histogram.total.sum * 100 /
+                   fs->rep_size_histogram.total.sum));
+    }
+
+  printf(_("  %9s %20s (%2d%%) bytes\n"),
+         "(others)",
+         svn__i64toa_sep(fs->rep_size_histogram.total.sum - sum, ',', pool),
+         (int)((fs->rep_size_histogram.total.sum - sum) * 100 /
+               fs->rep_size_histogram.total.sum));
+}
+
+/* Print per-extension histograms for the most frequent extensions in FS.
+ * Use POOL for allocations. */
+static void
+print_histograms_by_extension(fs_fs_t *fs,
+                              apr_pool_t *pool)
+{
+  apr_array_header_t *data = get_by_extensions(fs, compare_count, pool);
+  int i;
+
+  for (i = 0; i < data->nelts; ++i)
+    {
+      extension_info_t *info = APR_ARRAY_IDX(data, i, extension_info_t *);
+      printf("\nHistogram of '%s' file sizes:\n", info->extension);
+      print_histogram(&info->node_histogram, pool);
+      printf("\nHistogram of '%s' file representation sizes:\n",
+             info->extension);
+      print_histogram(&info->rep_histogram, pool);
+    }
+}
+
 /* Post-process stats for FS and print them to the console.
  * Use POOL for allocations.
  */
@@ -1677,8 +2043,38 @@ print_stats(fs_fs_t *fs,
   print_rep_stats(&dir_prop_rep_stats, pool);
   printf("\nFile property representation statistics:\n");
   print_rep_stats(&file_prop_rep_stats, pool);
+
   printf("\nLargest representations:\n");
   print_largest_reps(fs->largest_changes, pool);
+  printf("\nExtensions by number of changes:\n");
+  print_extensions_by_changes(fs, pool);
+  printf("\nExtensions by size of changed files:\n");
+  print_extensions_by_nodes(fs, pool);
+  printf("\nExtensions by size of representations:\n");
+  print_extensions_by_reps(fs, pool);
+
+  printf("\nHistogram of expanded node sizes:\n");
+  print_histogram(&fs->node_size_histogram, pool);
+  printf("\nHistogram of representation sizes:\n");
+  print_histogram(&fs->rep_size_histogram, pool);
+  printf("\nHistogram of file sizes:\n");
+  print_histogram(&fs->file_histogram, pool);
+  printf("\nHistogram of file representation sizes:\n");
+  print_histogram(&fs->file_rep_histogram, pool);
+  printf("\nHistogram of file property sizes:\n");
+  print_histogram(&fs->file_prop_histogram, pool);
+  printf("\nHistogram of file property representation sizes:\n");
+  print_histogram(&fs->file_prop_rep_histogram, pool);
+  printf("\nHistogram of directory sizes:\n");
+  print_histogram(&fs->dir_histogram, pool);
+  printf("\nHistogram of directory representation sizes:\n");
+  print_histogram(&fs->dir_rep_histogram, pool);
+  printf("\nHistogram of directory property sizes:\n");
+  print_histogram(&fs->dir_prop_histogram, pool);
+  printf("\nHistogram of directory property representation sizes:\n");
+  print_histogram(&fs->dir_prop_rep_histogram, pool);
+
+  print_histograms_by_extension(fs, pool);
 }
 
 /* Write tool usage info text to OSTREAM using PROGNAME as a prefix and

Modified: subversion/branches/fsfs-format7/tools/server-side/svnauthz.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/server-side/svnauthz.c?rev=1453290&r1=1453289&r2=1453290&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/server-side/svnauthz.c (original)
+++ subversion/branches/fsfs-format7/tools/server-side/svnauthz.c Wed Mar  6 11:10:01 2013
@@ -68,6 +68,7 @@ static const apr_getopt_option_t options
      "   no    no access\n")
   },
   {"groups-file", svnauthz__groups_file, 1, ("path to the global groups file")},
+  {"recursive", 'R', 0, ("recursive access to path")},
   {0, 0, 0, 0}
 };
 
@@ -75,6 +76,7 @@ struct svnauthz_opt_state
 {
   svn_boolean_t help;
   svn_boolean_t version;
+  svn_boolean_t recursive;
   const char *authz_file;
   const char *groups_file;
   const char *username;
@@ -124,7 +126,7 @@ static const svn_opt_subcommand_desc2_t 
     ),
    {'t'} },
   {"accessof", subcommand_accessof, {0} /* no aliases */,
-   ("Print or test the permissions set by an authz file for a specific circumstance.\n"
+   ("Print or test the permissions set by an authz file.\n"
     "usage: 1. svnauthz accessof [--username USER] [--groups-file GROUPS_FILE] TARGET\n"
     "       2. svnauthz accessof [--username USER] [--groups-file GROUPS_FILE] \\\n"
     "                            -t TXN REPOS_PATH FILE_PATH\n\n"
@@ -148,7 +150,7 @@ static const svn_opt_subcommand_desc2_t 
     "    3   when --is argument doesn't match\n"
     ),
    {'t', svnauthz__username, svnauthz__path, svnauthz__repos, svnauthz__is,
-    svnauthz__groups_file} },
+    svnauthz__groups_file, 'R'} },
   { NULL, NULL, {0}, NULL, {0} }
 };
 
@@ -289,6 +291,11 @@ subcommand_accessof(apr_getopt_t *os, vo
   const char *path = opt_state->fspath;
   const char *repos = opt_state->repos_name;
   const char *is = opt_state->is;
+  svn_repos_authz_access_t request;
+
+  if (opt_state->recursive && !path)
+    return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+                            ("--recursive not valid without --path"));
 
   /* Handle is argument parsing/allowed values */
   if (is) {
@@ -306,13 +313,23 @@ subcommand_accessof(apr_getopt_t *os, vo
   SVN_ERR(get_authz(&authz, opt_state, pool));
 
 
+  request = svn_authz_write;
+  if (opt_state->recursive)
+    request |= svn_authz_recursive;
   err = svn_repos_authz_check_access(authz, repos, path, user,
-                                     svn_authz_write, &write_access,
+                                     request, &write_access,
                                      pool);
+
   if (!write_access && !err)
-    err = svn_repos_authz_check_access(authz, repos, path, user,
-                                       svn_authz_read, &read_access,
-                                       pool);
+    {
+      request = svn_authz_read;
+      if (opt_state->recursive)
+        request |= svn_authz_recursive;
+      err = svn_repos_authz_check_access(authz, repos, path, user,
+                                         request, &read_access,
+                                         pool);
+    }
+
   if (!err)
     {
       const char *access_str = write_access ? "rw" : read_access ? "r" : "no";
@@ -509,6 +526,9 @@ sub_main(int argc, const char *argv[], a
             case 't':
               SVN_INT_ERR(svn_utf_cstring_to_utf8(&opt_state.txn, arg, pool));
               break;
+            case 'R':
+              opt_state.recursive = TRUE;
+              break;
             case svnauthz__version:
               opt_state.version = TRUE;
               break;

Modified: subversion/branches/fsfs-format7/win-tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/win-tests.py?rev=1453290&r1=1453289&r2=1453290&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/win-tests.py (original)
+++ subversion/branches/fsfs-format7/win-tests.py Wed Mar  6 11:10:01 2013
@@ -78,6 +78,7 @@ def _usage_exit():
   print("                           will be used, if not specified")
   print("  --httpd-daemon         : Run Apache httpd as daemon")
   print("  --httpd-service        : Run Apache httpd as Windows service (default)")
+  print("  --httpd-no-log         : Disable httpd logging")
   print("  --http-short-circuit   : Use SVNPathAuthz short_circuit on HTTP server")
   print("  --disable-http-v2      : Do not advertise support for HTTPv2 on server")
   print("  --disable-bulk-updates : Disable bulk updates on HTTP server")
@@ -127,7 +128,7 @@ opts, args = my_getopt(sys.argv[1:], 'hr
                        ['release', 'debug', 'verbose', 'quiet', 'cleanup',
                         'test=', 'url=', 'svnserve-args=', 'fs-type=', 'asp.net-hack',
                         'httpd-dir=', 'httpd-port=', 'httpd-daemon',
-                        'httpd-server', 'http-short-circuit',
+                        'httpd-server', 'http-short-circuit', 'httpd-no-log',
                         'disable-http-v2', 'disable-bulk-updates', 'help',
                         'fsfs-packing', 'fsfs-sharding=', 'javahl',
                         'list', 'enable-sasl', 'bin=', 'parallel',
@@ -148,6 +149,7 @@ svnserve_args = None
 run_httpd = None
 httpd_port = None
 httpd_service = None
+httpd_no_log = None
 http_short_circuit = False
 advertise_httpv2 = True
 http_bulk_updates = True
@@ -200,6 +202,8 @@ for opt, val in opts:
     httpd_service = 0
   elif opt == '--httpd-service':
     httpd_service = 1
+  elif opt == '--httpd-no-log':
+    httpd_no_log = 1
   elif opt == '--http-short-circuit':
     http_short_circuit = True
   elif opt == '--disable-http-v2':
@@ -432,7 +436,7 @@ class Svnserve:
 class Httpd:
   "Run httpd for DAV tests"
   def __init__(self, abs_httpd_dir, abs_objdir, abs_builddir, httpd_port,
-               service, httpv2, short_circuit, bulk_updates):
+               service, no_log, httpv2, short_circuit, bulk_updates):
     self.name = 'apache.exe'
     self.httpd_port = httpd_port
     self.httpd_dir = abs_httpd_dir
@@ -509,10 +513,14 @@ class Httpd:
     fp.write('ServerName   localhost\n')
     fp.write('PidFile      pid\n')
     fp.write('ErrorLog     log\n')
-    fp.write('LogFormat    "%h %l %u %t \\"%r\\" %>s %b" common\n')
-    fp.write('Customlog    log common\n')
-    fp.write('LogLevel     Debug\n')
     fp.write('Listen       ' + str(self.httpd_port) + '\n')
+    
+    if not no_log:
+      fp.write('LogFormat    "%h %l %u %t \\"%r\\" %>s %b" common\n')
+      fp.write('Customlog    log common\n')
+      fp.write('LogLevel     Debug\n')
+    else:
+      fp.write('LogLevel     Crit\n')
 
     # Write LoadModule for minimal system module
     fp.write(self._sys_module('dav_module', 'mod_dav.so'))
@@ -691,7 +699,8 @@ if not list_tests:
 
   if run_httpd:
     daemon = Httpd(abs_httpd_dir, abs_objdir, abs_builddir, httpd_port,
-                   httpd_service, advertise_httpv2, http_short_circuit,
+                   httpd_service, httpd_no_log,
+                   advertise_httpv2, http_short_circuit,
                    http_bulk_updates)
 
   # Start service daemon, if any