I don't really like having to edit ~/.subversion/servers before i
can use ra-svn over ssh. With cvs, i could just set CVS_RSH to
ssh and use the ext method. That's as permanent as a config file
if you arrange to have that environment variable set for you at
login, or as temporary as a command-line option if you don't.
Very handy.
I recently saw Greg Hudson say that he wasn't really happy with
the current method, so i decided to take a look at it.
I have a patch that makes ra-svn check the SVN_TUNNEL_AGENT
environment variable before it checks .subversion/servers. That
addresses my primary concern. I have also changed it so that
these two sources are parsed for arguments to the tunnel agent.
This solves Overfiend's problem (from IRC); he can just set
either the environment variable or the config file (both parsed
with the same code) to say 'ssh -p 1817'.
Greg was -0 on SVN_TUNNEL_AGENT when i asked him about it.
Here's what he suggested in response:
> Perhaps there's a middle ground... a tunnel scheme definition
> could include the name of an environment variable which
> overrides the default command name. And the predefined tunnel
> scheme would respect SVN_TUNNEL_AGENT and default to "ssh" if
> that's not defined. (The predefined scheme might be called
> something more generic like "ext" because of that, a la CVS's
> :ext: method, or perhaps we'd still call it "ssh"; no strong
> opinion there.)
If i understand correctly, this means svn://foo/bar/ and
svn+ext://foo/bar/ are identical, just as :ext:foo:/bar and
foo:/bar are identical to CVS. And this default 'ext' method
would call ssh unless SVN_TUNNEL_AGENT were set. The user could
then define additional tunneling schemes with some as yet
undefined syntax in the config file.
I'm not sure i like this. I certainly don't object to it since
it solves my complaint, but i don't see what the extra complexity
buys.
--- client.c.~1~ Wed Apr 16 00:56:27 2003
+++ client.c Sat Apr 19 04:35:42 2003
@@ -255,18 +255,25 @@
static svn_error_t *find_tunnel_agent(const char *hostname, const char **agent,
apr_hash_t *config, apr_pool_t *pool)
{
- svn_config_t *cfg = config ? apr_hash_get (config,
- SVN_CONFIG_CATEGORY_SERVERS,
- APR_HASH_KEY_STRING) : NULL;
+ svn_config_t *cfg;
const char *server_group;
- server_group = svn_config_find_group(cfg, hostname,
- SVN_CONFIG_SECTION_GROUPS, pool);
- if (! server_group)
- server_group = SVN_CONFIG_SECTION_GLOBAL;
+ *agent = getenv ("SVN_TUNNEL_AGENT");
- svn_config_get(cfg, agent, server_group, SVN_CONFIG_OPTION_SVN_TUNNEL_AGENT,
- NULL);
+ /* If not found in the environment, try the config file. */
+ if (!*agent)
+ {
+ cfg = config ? apr_hash_get(config, SVN_CONFIG_CATEGORY_SERVERS,
+ APR_HASH_KEY_STRING) : NULL;
+
+ server_group = svn_config_find_group(cfg, hostname,
+ SVN_CONFIG_SECTION_GROUPS, pool);
+ if (! server_group)
+ server_group = SVN_CONFIG_SECTION_GLOBAL;
+
+ svn_config_get(cfg, agent, server_group,
+ SVN_CONFIG_OPTION_SVN_TUNNEL_AGENT, NULL);
+ }
return SVN_NO_ERROR;
}
@@ -307,7 +314,7 @@
{
svn_ra_svn_conn_t *conn;
apr_socket_t *sock;
- const char *hostname, *user, *status, *tunnel_agent, *args[5];
+ const char *hostname, *user, *status, *tunnel_agent, **args;
unsigned short port;
apr_uint64_t minver, maxver;
apr_array_header_t *mechlist, *caplist, *status_param;
@@ -321,17 +328,18 @@
SVN_ERR(find_tunnel_agent(hostname, &tunnel_agent, config, pool));
if (tunnel_agent)
{
- /* ### It would be nice if tunnel_agent could contain flags. */
- args[0] = tunnel_agent;
- args[1] = hostname;
- args[2] = "svnserve";
- args[3] = "-t";
- args[4] = NULL;
+ char *tmp;
+
+ tmp = apr_pstrcat(pool,
+ tunnel_agent, " ", hostname, " svnserve -t",
+ NULL);
+ apr_tokenize_to_argv(tmp, (char ***)&args, pool);
+
apr_procattr_create(&attr, pool);
apr_procattr_io_set(attr, 1, 1, 0);
apr_procattr_cmdtype_set(attr, APR_PROGRAM_PATH);
proc = apr_palloc(pool, sizeof(*proc));
- apr_proc_create(proc, tunnel_agent, args, NULL, attr, pool);
+ apr_proc_create(proc, args[0], args, NULL, attr, pool);
conn = svn_ra_svn_create_conn(NULL, proc->out, proc->in, pool);
conn->proc = proc;
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Tue Apr 22 21:36:42 2003