You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Timothy Place <ti...@electrotap.com> on 2006/11/15 06:34:42 UTC

Making a simple svn client

Hi...

I am trying to make a very simple svn client which basically just  
does one thing: a fresh svn checkout from a fixed url.  For example,  
in the code at the end of this email I am attempting to do the  
equivalent of this command line:
	svn co https://svn.sourceforge.net/svnroot/ttblue/trunk/ttblue/dsplib/
	
I just want to do a checkout on program startup, then the program  
ends.  It is from sourceforge, meaning no username or password are  
required.  I don't need any sort of progress reporting.  I am  
building off of 1.3.x libraries.

The problem that I am having is that when I get to the bottom, the  
checkout fails with an error like so:
	PROPFIND request failed on '/svnroot/ttblue/trunk/ttblue/dsplib'
I seem to be doing something wrong, but I'm not sure what that is.   
Can anyone lend me a hand?

Many thanks,
    Tim

{
	svn_auth_provider_object_t	*username_wc_provider;
	apr_array_header_t			*providers;
	svn_auth_baton_t			*ab;
	svn_config_t				*cfg;
	apr_allocator_t				*allocator;
	apr_pool_t					*pool;
	apr_pool_t					*subpool;
	apr_array_header_t			*received_opts;
	svn_client_ctx_t			*ctx;
	svn_error_t					*err;
	svn_revnum_t				result_rev;
	svn_opt_revision_t			revision;
	
	apr_initialize();			
	
	// Create our top-level pool.  Use a seperate mutexless allocator,
	// given this application is single threaded.
	if(apr_allocator_create(&allocator))
		error("EXIT_FAILURE");

	apr_allocator_max_free_set(allocator,  
SVN_ALLOCATOR_RECOMMENDED_MAX_FREE);
	pool = svn_pool_create_ex(NULL, allocator);
	apr_allocator_owner_set(allocator, pool);
	received_opts = apr_array_make(pool, SVN_OPT_MAX_OPTIONS, sizeof(int));
	
	err = svn_ra_initialize(pool);
	if(err)
		error("svn_ra_initialize(pool) FAILED");
		
	svn_client_create_context(&ctx, pool);

	err = svn_config_get_config(&(ctx->config), NULL, pool);
	if(err)
		error("svn_config_get_config() FAILED");
		
	cfg = (svn_config_t *)apr_hash_get(ctx->config,  
SVN_CONFIG_CATEGORY_CONFIG, APR_HASH_KEY_STRING);
		
	providers = apr_array_make(pool, 1, sizeof 
(svn_auth_provider_object_t *));
	username_wc_provider = (svn_auth_provider_object_t *)apr_pcalloc 
(pool, sizeof(*username_wc_provider));
	svn_client_get_username_provider(&username_wc_provider, pool);
	*(svn_auth_provider_object_t **)apr_array_push(providers) =  
username_wc_provider;

	// Build an authentication baton to give to libsvn_client.
	svn_auth_open(&ab, providers, pool);

	// Place any default --username or --password credentials into the  
auth_baton's run-time parameter hash.
	svn_auth_set_parameter(ab, SVN_AUTH_PARAM_DEFAULT_USERNAME, "");
	svn_auth_set_parameter(ab, SVN_AUTH_PARAM_DEFAULT_PASSWORD, "");
	svn_auth_set_parameter(ab, SVN_AUTH_PARAM_NON_INTERACTIVE, "");
	svn_auth_set_parameter(ab, SVN_AUTH_PARAM_NO_AUTH_CACHE, "");

	ctx->auth_baton = ab;

	subpool = svn_pool_create(pool);
	svn_pool_clear(subpool);

	revision.kind = svn_opt_revision_head;

	err = svn_client_checkout(
			NULL,
			"https://svn.sourceforge.net/svnroot/ttblue/trunk/ttblue/dsplib/",
			"/Users/tim/",
			&revision,
			TRUE,
			ctx,
			subpool);

	if(err){
		error("svn_client_checkout error: %s", err->message);
	}
	svn_pool_destroy(subpool);
			
	apr_terminate();
}

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org