Bug 106706 - local filenames are http escaped when using svn over http.
Summary: local filenames are http escaped when using svn over http.
Status: RESOLVED FIXED
Alias: None
Product: kdevplatform
Classification: Developer tools
Component: subversion (show other bugs)
Version: unspecified
Platform: unspecified Linux
: NOR normal
Target Milestone: ---
Assignee: kdevelop-bugs-null
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-06-03 02:39 UTC by Steven T. Hatton
Modified: 2008-08-23 22:55 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Steven T. Hatton 2005-06-03 02:39:58 UTC
Version:           CVS (using KDE 3.4.1%20Level%20%22a%22%20,%20SUSE%209.2%20UNSUPPORTED)
Compiler:          gcc%20version%203.3.4%20(pre%203.3.5%2020040809)
OS:                Linux%20(i686)%20release%202.6.8-24.14-default

The following did _not_ happen when I created a project without SVN version control.

When creating a (C++ simple hello world) project, selecting svn for version control and pointing it to an http svn server, local file names (<path>/c++/<project>) are escaped as if they were http strings. For example:

code/c++/gs/

becomes:

code/c%2B%2B/gs/

and the latter is what is used when Kdevelop tries to write to the local file system.  I found that the string is stored in the customized.kdevses as this:

<Doc0 NumberOfViews="1" URL="file:///home/hattons/code/c%2B%2B/gs/customized/src/customized.cpp" >

I attempted to recreate the project and was able to capture this error message, which I believe briefly flashed up the first time:

_______________________________________________________________________________
Warning: The file "/home/hattons/code/c++/gs/customized/src/customized.cpp" has been deleted on disk.
If this was not your intention, make sure to save this file now.
________________________________________________________________________________

When these things happen, nothing but three configuration file are written to the harddrive. These are:

customized.kdevelop  customized.kdevelop.pcs  customized.kdevses

The following is from the terminal output of Kdevelop:

ASSERT: "part && parent" in partwidget.cpp (40)
ERROR: syntax error
ERROR: syntax error
ERROR: syntax error
kdevelop (file view): Requested FileTree for: /home/hattons/code/c++/gs/customized
ERROR: syntax error
ERROR: syntax error
ERROR: syntax error
ERROR: syntax error
kdevelop: dirpath /home/hattons/code/c++/gs/customized/.svn/false
kdevelop: entries /home/hattons/code/c++/gs/customized/.svn/entriesfalse
kdevelop (file view): Valid VCS directory: false
ERROR: syntax error
ERROR: syntax error
ERROR: syntax error
ERROR: syntax error
kdevelop: dirpath /home/hattons/code/c++/gs/customized/.svn/false
kdevelop: entries /home/hattons/code/c++/gs/customized/.svn/entriesfalse
kdevelop (file view): FileTreeViewWidgetImpl::FileTreeViewWidgetImpl()
kdevelop (file view): StdFileTreeWidgetImpl::StdFileTreeWidgetImpl()
kdevelop (file view): FileTreeWidget::openDirectory(): /home/hattons/code/c++/gs/customized
kdevelop (file view): files added to project: 1
kdevelop (file view): MyFileTreeViewItem::hideOrShow(): /home/hattons/code/c++/gs/customized
kdevelop (file view): MyFileTreeViewItem::hideOrShow(): /home/hattons/code/c++/gs/customized/src
kdevelop (file view): MyFileTreeViewItem::hideOrShow(): /home/hattons/code/c++/gs/customized/NEWS
kdevelop (file view): MyFileTreeViewItem::hideOrShow(): /home/hattons/code/c++/gs/customized/TODO
kdevelop (file view): MyFileTreeViewItem::hideOrShow(): /home/hattons/code/c++/gs/customized/depcomp
kdevelop (file view): MyFileTreeViewItem::hideOrShow(): /home/hattons/code/c++/gs/customized/README
kdevelop (file view): MyFileTreeViewItem::hideOrShow(): /home/hattons/code/c++/gs/customized/ltmain.sh
kdevelop (file view): MyFileTreeViewItem::hideOrShow(): /home/hattons/code/c++/gs/customized/configure.in
kdevelop (file view): MyFileTreeViewItem::hideOrShow(): /home/hattons/code/c++/gs/customized/config.guess
kdevelop (file view): MyFileTreeViewItem::hideOrShow(): /home/hattons/code/c++/gs/customized/install-sh
kdevelop (file view): MyFileTreeViewItem::hideOrShow(): /home/hattons/code/c++/gs/customized/config.sub
kdevelop (file view): MyFileTreeViewItem::hideOrShow(): /home/hattons/code/c++/gs/customized/missing
kdevelop (file view): MyFileTreeViewItem::hideOrShow(): /home/hattons/code/c++/gs/customized/customized.kdevses
kdevelop (file view): MyFileTreeViewItem::hideOrShow(): /home/hattons/code/c++/gs/customized/mkinstalldirs
kdevelop (file view): MyFileTreeViewItem::hideOrShow(): /home/hattons/code/c++/gs/customized/Makefile.am
kdevelop (file view): MyFileTreeViewItem::hideOrShow(): /home/hattons/code/c++/gs/customized/Makefile.cvs
kdevelop (file view): MyFileTreeViewItem::hideOrShow(): /home/hattons/code/c++/gs/customized/AUTHORS
kdevelop (file view): MyFileTreeViewItem::hideOrShow(): /home/hattons/code/c++/gs/customized/INSTALL
kdevelop (file view): MyFileTreeViewItem::hideOrShow(): /home/hattons/code/c++/gs/customized/customized.kdevelop
kdevelop (file view): MyFileTreeViewItem::hideOrShow(): /home/hattons/code/c++/gs/customized/ChangeLog
kdevelop (file view): MyFileTreeViewItem::hideOrShow(): /home/hattons/code/c++/gs/customized/COPYING
kdevelop (file view): MyFileTreeViewItem::hideOrShow(): /home/hattons/code/c++/gs/customized/Doxyfile
kdevelop (file view): MyFileTreeViewItem::hideOrShow(): /home/hattons/code/c++/gs/customized/templates
kdevelop (core): [void PartController::slotDocumentDirty(Kate::Document*, bool, unsigned char)] 
kdevelop (core): file:///home/hattons/code/c%2B%2B/gs/customized/src/customized.cpp
kdevelop (core): true
kdevelop (core): \x03
shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
Comment 1 Steven T. Hatton 2005-06-03 03:01:03 UTC
When this posted I saw that the system description was http escaped.  That indicates to me the problem is with the new KDE 3.4.1 bits, and not KDevelop.  But I'm not sure.
Comment 2 Steven T. Hatton 2005-06-03 04:33:37 UTC
It looks as if my conjecture about this being caused by http escapes may not 
be completely correct.  I tried this with a directory that has no non-alpha 
characters other than '/', and the SVN project still failed to work 
correctly.  It may be due to the use of file:// protocol specification. As 
in:

  shell-init: error retrieving current directory: getcwd: cannot access parent 
directories: No such file or directory
kdevelop (core): [void PartController::slotDocumentDirty(Kate::Document*, 
bool, unsigned char)] 
kdevelop (core): file:///home/hattons/code/cxx/gs/breakme/src/breakme.cpp
kdevelop (core): true
kdevelop (core): \x03
kdevelop (grep view): context in grepview
kdevelop: file context with /home/hattons/code/cxx/gs/breakme/src/breakme.cpp
kdevelop: dirpath /home/hattons/code/cxx/gs/breakme/.svn/false
kdevelop: entries /home/hattons/code/cxx/gs/breakme/.svn/entriesfalse
kdevelop (core): [void PartController::slotDocumentDirty(Kate::Document*, 
bool, unsigned char)] 


But that really is a guess.  It depends if its trying to tell the file system 
to use that name.  In any case.  I can't use the SVN support.
Comment 3 Steven T. Hatton 2005-06-05 14:38:15 UTC
I've now noticed that all the project files _are_ actually being created.  They are deleted when KDevelop tries to run svn import.  I assume the intention is to import the project, then replace the local files with files checked out from the server.  There are not files being added to the server.

I am, however, challenged for a password, and I can hear the harddrive is being accessed on the server, so it's talking to the server. 
Comment 4 Steven T. Hatton 2005-06-05 18:38:14 UTC
I fetched the latest kdesdk and replaced the SuSE provided rpms with my local 
build.  That had no effect on the problem.  I did notice this a bit higher up 
in the text dump from KDevelop:

kdevelop: 
kdevelop: 
kdevelop (core): dcop emitting project opened
QObject::connect: No such slot subversionPart::slotActionAddToIgnoreList()
QObject::connect:  (sender name:   'subversion_ignore')
QObject::connect:  (receiver name: 'Subversion')
QObject::connect: No such slot 
subversionPart::slotActionRemoveFromIgnoreList()
QObject::connect:  (sender name:   'subversion_donot_ignore')
QObject::connect:  (receiver name: 'Subversion')
QObject::connect: No such slot 
subversionPart::slotStopButtonClicked(KDevPlugin*)
QObject::connect:  (sender name:   'unnamed')
QObject::connect:  (receiver name: 'Subversion')
Comment 5 Steven T. Hatton 2005-06-05 19:26:30 UTC
I tried allowing unauthenticated access to the server see if that worked. But it didn't.  This is the /var/log/apache2/access_log
63.161.169.137 - - [05/Jun/2005:13:12:18 -0400] "PROPFIND /repos/gs HTTP/1.1" 207 647 "-" "SVN/1.0.8 (r11084) neon/0.24.7"
63.161.169.137 - - [05/Jun/2005:13:12:18 -0400] "PROPFIND /repos/gs/!svn/vcc/default HTTP/1.1" 207 398 "-" "SVN/1.0.8 (r11084) neon/0.24.7"
63.161.169.137 - - [05/Jun/2005:13:12:18 -0400] "PROPFIND /repos/gs/!svn/bln/4 HTTP/1.1" 207 449 "-" "SVN/1.0.8 (r11084) neon/0.24.7"
63.161.169.137 - - [05/Jun/2005:13:12:18 -0400] "PROPFIND /repos/gs HTTP/1.1" 207 647 "-" "SVN/1.0.8 (r11084) neon/0.24.7"
63.161.169.137 - - [05/Jun/2005:13:12:18 -0400] "PROPFIND /repos/gs/!svn/vcc/default HTTP/1.1" 207 449 "-" "SVN/1.0.8 (r11084) neon/0.24.7"
63.161.169.137 - - [05/Jun/2005:13:12:18 -0400] "PROPFIND /repos/gs/!svn/bc/4 HTTP/1.1" 207 657 "-" "SVN/1.0.8 (r11084) neon/0.24.7"
63.161.169.137 - - [05/Jun/2005:13:12:18 -0400] "PROPFIND /repos/gs HTTP/1.1" 207 647 "-" "SVN/1.0.8 (r11084) neon/0.24.7"
63.161.169.137 - - [05/Jun/2005:13:12:18 -0400] "PROPFIND /repos/gs HTTP/1.1" 207 647 "-" "SVN/1.0.8 (r11084) neon/0.24.7"
63.161.169.137 - - [05/Jun/2005:13:12:18 -0400] "PROPFIND /repos/gs/!svn/vcc/default HTTP/1.1" 207 398 "-" "SVN/1.0.8 (r11084) neon/0.24.7"
63.161.169.137 - - [05/Jun/2005:13:12:18 -0400] "PROPFIND /repos/gs/!svn/bln/4 HTTP/1.1" 207 449 "-" "SVN/1.0.8 (r11084) neon/0.24.7"
63.161.169.137 - - [05/Jun/2005:13:12:18 -0400] "PROPFIND /repos/gs HTTP/1.1" 207 647 "-" "SVN/1.0.8 (r11084) neon/0.24.7"
63.161.169.137 - - [05/Jun/2005:13:12:18 -0400] "REPORT /repos/gs/!svn/vcc/default HTTP/1.1" 200 2558 "-" "SVN/1.0.8 (r11084) neon/0.24.7"

I'm running: Subversion version 1.0.8, if that matters.
Comment 6 Steven T. Hatton 2005-06-07 17:26:20 UTC
I wonder if this might be the problem:
vcs/subversion/subversion_core.cpp
line 241
void subversionCore::createNewProject( const QString& // dirName
                                       , const KURL& // importURL
                                       , bool // init
                                       ) {

}
Comment 7 Steven T. Hatton 2005-06-13 19:00:44 UTC
I still have more to investigate, but I am fairly confident the problem is in 
the syntax of the request sent to the server. Using GDB I've been able to 
determine the problem is almost certainly in the "if" block of the first "if 
else" of the following function:

kdevelop/vcs/subversion/integrator/svnintegratordlg.cpp:46
void SvnIntegratorDlg::accept()
{
	KURL servURL (repos1->url());
	if ( servURL.isEmpty() ) return;
	if ( ! servURL.protocol().startsWith( "svn" ) )
		servURL.setProtocol( "svn+" + servURL.protocol() ); //make sure it starts 
with "svn"
	kdDebug(9036) << "servURL : " << servURL.prettyURL() << endl;

	if ( importProject->isChecked() ) {
		QByteArray parms;
		QDataStream s( parms, IO_WriteOnly );
		int cmd = 5;
		s << cmd << servURL << KURL::fromPathOrURL( m_projectLocation );
		SimpleJob * job = KIO::special(servURL, parms, true);
#if KDE_VERSION <= KDE_MAKE_VERSION(3,3,90)
		KIO_COMPAT::NetAccess::synchronousRun(job, 0);
#else
		NetAccess::synchronousRun(job, 0);
#endif
	} else if ( createProject->isChecked() ) {
/*		KURL miscURL = servURL;
		miscURL.setPath(servURL.path() + "/tags/");
		KIO::SimpleJob * job = KIO::mkdir(miscURL);
		NetAccess::synchronousRun(job, 0);
		miscURL.setPath(servURL.path() + "/branches/");
		job = KIO::mkdir(miscURL);
		NetAccess::synchronousRun(job, 0);
		miscURL.setPath(servURL.path() + "/vendor/");
		job = KIO::mkdir(miscURL);
		NetAccess::synchronousRun(job, 0);*/
		KURL::List list;
		KURL miscURL = servURL;
		miscURL.setPath( servURL.path() + "/tags/" );
		list << miscURL;
		miscURL.setPath( servURL.path() + "/branches/" );
		list << miscURL;
		miscURL.setPath( servURL.path() + "/vendor/" );
		list << miscURL;

		QByteArray parms;
		QDataStream s( parms, IO_WriteOnly );
		int cmd = 10; // MKDIR(list)
		s << cmd << list;
		SimpleJob *job = KIO::special(servURL, parms, true);
#if KDE_VERSION <= KDE_MAKE_VERSION(3,3,90)
		KIO_COMPAT::NetAccess::synchronousRun(job, 0);
#else
		NetAccess::synchronousRun(job, 0);
#endif
		QByteArray parms2;
		QDataStream s2( parms2, IO_WriteOnly );
		cmd = 5; //IMPORT
		servURL.setPath(servURL.path()+ "/trunk/");
		s2 << cmd << servURL << KURL::fromPathOrURL( m_projectLocation );
		job = KIO::special(servURL, parms2, true);
#if KDE_VERSION <= KDE_MAKE_VERSION(3,3,90)
		KIO_COMPAT::NetAccess::synchronousRun(job, 0);
#else
		NetAccess::synchronousRun(job, 0);
#endif
	}

	//delete the template directory and checkout a fresh one from the server
    KProcess *rmproc = new KProcess();
    *rmproc << "rm";
    *rmproc << "-f" << "-r" << m_projectLocation;
    rmproc->start(KProcess::Block);
        
	QByteArray parms3;
	QDataStream s3( parms3, IO_WriteOnly );
	int cmd2 = 1; //CHECKOUT
	int rev = -1;
	//servURL should be set correctly above
	s3 << cmd2 << servURL << KURL::fromPathOrURL( m_projectLocation ) << rev << 
QString( "HEAD" );
	SimpleJob *job2 = KIO::special(servURL, parms3, true);
#if KDE_VERSION <= KDE_MAKE_VERSION(3,3,90)
	KIO_COMPAT::NetAccess::synchronousRun(job2, 0);
#else
	NetAccess::synchronousRun(job2, 0);
#endif
}
Comment 8 Matt Rogers 2005-09-23 04:40:05 UTC
Excellent debugging, thanks!

Just to be sure, you're talking about the code path that is used if import project is checked and create project is not checked, correct?
Comment 9 Andreas Pakulat 2007-12-01 00:29:54 UTC
Svn support got large improvements, I think this is fixed.