Author: stefan2
Date: Mon Sep 14 16:03:02 2015
New Revision: 1702983
URL: http://svn.apache.org/r1702983
Log:
Introduce svn_stream_for_stdin2 that supports optional APR buffering.
Update all callers.
* subversion/include/svn_io.h
(svn_stream_for_stdin2): Declare new, bumped API version.
(svn_stream_for_stdin): Depcreate.
* subversion/libsvn_subr/deprecated.c
(svn_stream_for_stdin): Implement in terms of the new API version.
* subversion/libsvn_subr/stream.c
(svn_stream_for_stdin2): Implement.
* subversion/svnadmin/svnadmin.c
(subcommand_load): Update caller.
(subcommand_load_revprops): Same. Also, don't use the buffering
read stream wrapper anymore.
* subversion/svnfsfs/load-index-cmd.c
(subcommand__load_index): Ditto.
* subversion/svnmucc/svnmucc.c
(execute): Update caller.
* subversion/svnserve/svnserve.c
(sub_main): Same.
* tools/dev/x509-parser.c
(main): Same.
Modified:
subversion/trunk/subversion/include/svn_io.h
subversion/trunk/subversion/libsvn_subr/deprecated.c
subversion/trunk/subversion/libsvn_subr/stream.c
subversion/trunk/subversion/svnadmin/svnadmin.c
subversion/trunk/subversion/svnfsfs/load-index-cmd.c
subversion/trunk/subversion/svnmucc/svnmucc.c
subversion/trunk/subversion/svnserve/svnserve.c
subversion/trunk/tools/dev/x509-parser.c
Modified: subversion/trunk/subversion/include/svn_io.h
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_io.h?rev=1702983&r1=1702982&r2=1702983&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_io.h (original)
+++ subversion/trunk/subversion/include/svn_io.h Mon Sep 14 16:03:02 2015
@@ -1102,11 +1102,29 @@ svn_stream_from_aprfile(apr_file_t *file
apr_pool_t *pool);
/** Set @a *in to a generic stream connected to stdin, allocated in
- * @a pool. The stream and its underlying APR handle will be closed
- * when @a pool is cleared or destroyed.
+ * @a pool. If @a buffered is set, APR buffering will be enabled.
+ * The stream and its underlying APR handle will be closed when @a pool
+ * is cleared or destroyed.
+ *
+ * @note APR buffering will try to fill the whole internal buffer before
+ * serving read requests. This may be inappropriate for interactive
+ * applications where stdin will not deliver any more data unless
+ * the application processed the data already received.
+ *
+ * @since New in 1.10.
+ */
+svn_error_t *
+svn_stream_for_stdin2(svn_stream_t **in,
+ svn_boolean_t buffered,
+ apr_pool_t *pool);
+
+/** Similar to svn_stream_for_stdin2(), but with buffering being disabled.
*
* @since New in 1.7.
+ *
+ * @deprecated Provided for backward compatibility with the 1.9 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_stream_for_stdin(svn_stream_t **in,
apr_pool_t *pool);
Modified: subversion/trunk/subversion/libsvn_subr/deprecated.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/deprecated.c?rev=1702983&r1=1702982&r2=1702983&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/deprecated.c (original)
+++ subversion/trunk/subversion/libsvn_subr/deprecated.c Mon Sep 14 16:03:02
2015
@@ -1066,6 +1066,12 @@ svn_stream_from_aprfile(apr_file_t *file
}
svn_error_t *
+svn_stream_for_stdin(svn_stream_t **in, apr_pool_t *pool)
+{
+ return svn_error_trace(svn_stream_for_stdin2(in, FALSE, pool));
+}
+
+svn_error_t *
svn_stream_contents_same(svn_boolean_t *same,
svn_stream_t *stream1,
svn_stream_t *stream2,
Modified: subversion/trunk/subversion/libsvn_subr/stream.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/stream.c?rev=1702983&r1=1702982&r2=1702983&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/stream.c (original)
+++ subversion/trunk/subversion/libsvn_subr/stream.c Mon Sep 14 16:03:02 2015
@@ -1838,12 +1838,15 @@ svn_stream_wrap_buffered_read(svn_stream
svn_error_t *
-svn_stream_for_stdin(svn_stream_t **in, apr_pool_t *pool)
+svn_stream_for_stdin2(svn_stream_t **in,
+ svn_boolean_t buffered,
+ apr_pool_t *pool)
{
apr_file_t *stdin_file;
apr_status_t apr_err;
- apr_err = apr_file_open_stdin(&stdin_file, pool);
+ apr_uint32_t flags = buffered ? APR_BUFFERED : 0;
+ apr_err = apr_file_open_flags_stdin(&stdin_file, flags, pool);
if (apr_err)
return svn_error_wrap_apr(apr_err, "Can't open stdin");
Modified: subversion/trunk/subversion/svnadmin/svnadmin.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/svnadmin/svnadmin.c?rev=1702983&r1=1702982&r2=1702983&view=diff
==============================================================================
--- subversion/trunk/subversion/svnadmin/svnadmin.c (original)
+++ subversion/trunk/subversion/svnadmin/svnadmin.c Mon Sep 14 16:03:02 2015
@@ -1503,7 +1503,7 @@ subcommand_load(apr_getopt_t *os, void *
SVN_ERR(open_repos(&repos, opt_state->repository_path, pool));
/* Read the stream from STDIN. Users can redirect a file. */
- SVN_ERR(svn_stream_for_stdin(&stdin_stream, pool));
+ SVN_ERR(svn_stream_for_stdin2(&stdin_stream, TRUE, pool));
/* Progress feedback goes to STDOUT, unless they asked to suppress it. */
if (! opt_state->quiet)
@@ -1547,8 +1547,7 @@ subcommand_load_revprops(apr_getopt_t *o
SVN_ERR(open_repos(&repos, opt_state->repository_path, pool));
/* Read the stream from STDIN. Users can redirect a file. */
- SVN_ERR(svn_stream_for_stdin(&stdin_stream, pool));
- stdin_stream = svn_stream_wrap_buffered_read(stdin_stream, pool);
+ SVN_ERR(svn_stream_for_stdin2(&stdin_stream, TRUE, pool));
/* Progress feedback goes to STDOUT, unless they asked to suppress it. */
if (! opt_state->quiet)
Modified: subversion/trunk/subversion/svnfsfs/load-index-cmd.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/svnfsfs/load-index-cmd.c?rev=1702983&r1=1702982&r2=1702983&view=diff
==============================================================================
--- subversion/trunk/subversion/svnfsfs/load-index-cmd.c (original)
+++ subversion/trunk/subversion/svnfsfs/load-index-cmd.c Mon Sep 14 16:03:02
2015
@@ -186,8 +186,7 @@ subcommand__load_index(apr_getopt_t *os,
svnfsfs__opt_state *opt_state = baton;
svn_stream_t *input;
- SVN_ERR(svn_stream_for_stdin(&input, pool));
- input = svn_stream_wrap_buffered_read(input, pool);
+ SVN_ERR(svn_stream_for_stdin2(&input, TRUE, pool));
SVN_ERR(load_index(opt_state->repository_path, input, pool));
return SVN_NO_ERROR;
Modified: subversion/trunk/subversion/svnmucc/svnmucc.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/svnmucc/svnmucc.c?rev=1702983&r1=1702982&r2=1702983&view=diff
==============================================================================
--- subversion/trunk/subversion/svnmucc/svnmucc.c (original)
+++ subversion/trunk/subversion/svnmucc/svnmucc.c Mon Sep 14 16:03:02 2015
@@ -193,7 +193,7 @@ execute(const apr_array_header_t *action
SVN_ERR(svn_stream_open_readonly(&src, action->path[1],
pool, iterpool));
else
- SVN_ERR(svn_stream_for_stdin(&src, pool));
+ SVN_ERR(svn_stream_for_stdin2(&src, TRUE, pool));
if (kind == svn_node_file)
Modified: subversion/trunk/subversion/svnserve/svnserve.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/svnserve/svnserve.c?rev=1702983&r1=1702982&r2=1702983&view=diff
==============================================================================
--- subversion/trunk/subversion/svnserve/svnserve.c (original)
+++ subversion/trunk/subversion/svnserve/svnserve.c Mon Sep 14 16:03:02 2015
@@ -1030,7 +1030,9 @@ sub_main(int *exit_code, int argc, const
apr_pool_cleanup_register(pool, pool, apr_pool_cleanup_null,
redirect_stdout);
- SVN_ERR(svn_stream_for_stdin(&stdin_stream, pool));
+ /* We are an interactive server, i.e. can't use APR buffering on
+ * stdin. */
+ SVN_ERR(svn_stream_for_stdin2(&stdin_stream, FALSE, pool));
SVN_ERR(svn_stream_for_stdout(&stdout_stream, pool));
/* Use a subpool for the connection to ensure that if SASL is used
Modified: subversion/trunk/tools/dev/x509-parser.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/tools/dev/x509-parser.c?rev=1702983&r1=1702982&r2=1702983&view=diff
==============================================================================
--- subversion/trunk/tools/dev/x509-parser.c (original)
+++ subversion/trunk/tools/dev/x509-parser.c Mon Sep 14 16:03:02 2015
@@ -158,7 +158,7 @@ int main (int argc, const char *argv[])
}
else if (argc == 1)
{
- err = svn_stream_for_stdin(&in, pool);
+ err = svn_stream_for_stdin2(&in, TRUE, pool);
}
else
err = svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL, _("Too many
arguments"));