SVN commit 921832 by marchand: backport kio_svn fixes from trunk M +24 -1 ksvnd/ksvnd.cpp M +60 -42 svn.cpp M +2 -0 svnhelper/kio_svn_helper.cpp M +1 -1 svnhelper/subversion.desktop --- branches/KDE/4.2/kdesdk/kioslave/svn/ksvnd/ksvnd.cpp #921831:921832 @@ -117,12 +117,29 @@ bool KSvnd::isFileInSvnEntries ( const QString &filename, const QString &entfile ) { QFile file( entfile ); + bool potential = false; if ( file.open( QIODevice::ReadOnly ) ) { QTextStream stream( &file ); QString line; while ( !stream.atEnd() ) { line = stream.readLine().simplified(); - if ( line == "name=\""+ filename + "\"" ) { + + if ( potential == true ) { + // Check that filename is really a file or dir + if ( line == "dir" || line == "file" ) { + file.close(); + return true; + } else { + // Reset potential to false + potential=false; + } + } + + if ( line == filename ) { + // Assume we're using SVN >= 1.4 + potential=true; + } else if ( line == "name=\""+ filename + "\"" ) { + // We could still be using SVN <= 1.3 (XML format) file.close(); return true; } @@ -270,6 +287,12 @@ if ( !(listStatus & SomeAreInParentsEntries) && !(listStatus & SomeAreExternalToParent) && !(listStatus & SomeHaveSvn)) { + if ( (listStatus & AllParentsHaveSvn) ) { + // These files can only be added to SVN + result << "Add"; + result << "_SEPARATOR_"; + } + if( list.size() == 1 && listStatus & SomeAreFolders) { result << "Checkout"; result << "Export"; --- branches/KDE/4.2/kdesdk/kioslave/svn/svn.cpp #921831:921832 @@ -286,7 +286,7 @@ svn_pool_destroy (subpool); } -void kio_svnProtocol::stat(const KUrl & url){ +void kio_svnProtocol::stat(const KUrl & url) { kDebug(7128) << "kio_svn::stat(const KUrl& url) : " << url.url(); void *ra_baton, *session; @@ -327,12 +327,16 @@ svn_error_t *err = svn_ra_init_ra_libs(&ra_baton,subpool); if ( err ) { kDebug(7128) << "init RA libs failed : " << err->message; + error( KIO::ERR_SLAVE_DEFINED, err->message ); + svn_pool_destroy( subpool ); return; } //find RA libs err = svn_ra_get_ra_library(&ra_lib,ra_baton,svn_path_canonicalize( target.toUtf8(), subpool ),subpool); if ( err ) { kDebug(7128) << "RA get libs failed : " << err->message; + error( KIO::ERR_SLAVE_DEFINED, err->message ); + svn_pool_destroy( subpool ); return; } kDebug(7128) << "RA init completed"; @@ -354,6 +358,8 @@ err = ra_lib->open(&session,svn_path_canonicalize( target.toUtf8(), subpool ),cbtable,callbackbt,ctx->config,subpool); if ( err ) { kDebug(7128)<< "Open session " << err->message; + error( KIO::ERR_SLAVE_DEFINED, err->message ); + svn_pool_destroy( subpool ); return; } kDebug(7128) << "Session opened to " << target; @@ -362,13 +368,19 @@ err = ra_lib->get_latest_revnum(session,&rev.value.number,subpool); if ( err ) { kDebug(7128)<< "Latest RevNum " << err->message; + error( KIO::ERR_SLAVE_DEFINED, err->message ); + svn_pool_destroy( subpool ); return; } kDebug(7128) << "Got rev " << rev.value.number; } //get it - ra_lib->check_path(session,"",rev.value.number,&kind,subpool); + err = ra_lib->check_path(session,"",rev.value.number,&kind,subpool); + if ( err ) { + error( KIO::ERR_SLAVE_DEFINED, err->message ); + svn_pool_destroy( subpool ); + } kDebug(7128) << "Checked Path"; UDSEntry entry; switch ( kind ) { @@ -532,11 +544,10 @@ initNotifier(false, false, false, subpool); svn_error_t *err = svn_client_copy(&commit_info, srcsvn.toUtf8(), &rev, destsvn.toUtf8(), ctx, subpool); - if ( err ) { + if ( err ) error( KIO::ERR_SLAVE_DEFINED, err->message ); - } - - finished(); + else + finished(); svn_pool_destroy (subpool); } @@ -560,11 +571,10 @@ initNotifier(false, false, false, subpool); svn_error_t *err = svn_client_mkdir(&commit_info,targets,ctx,subpool); - if ( err ) { + if ( err ) error( KIO::ERR_COULD_NOT_MKDIR, err->message ); - } - - finished(); + else + finished(); svn_pool_destroy (subpool); } @@ -583,11 +593,10 @@ initNotifier(false, false, false, subpool); svn_error_t *err = svn_client_mkdir(&commit_info,targets,ctx,subpool); - if ( err ) { + if ( err ) error( KIO::ERR_COULD_NOT_MKDIR, err->message ); - } - - finished(); + else + finished(); svn_pool_destroy (subpool); } @@ -606,11 +615,10 @@ initNotifier(false, false, false, subpool); svn_error_t *err = svn_client_delete(&commit_info,targets,false/*force remove locally modified files in wc*/,ctx,subpool); - if ( err ) { + if ( err ) error( KIO::ERR_CANNOT_DELETE, err->message ); - } - - finished(); + else + finished(); svn_pool_destroy (subpool); } @@ -652,11 +660,10 @@ initNotifier(false, false, false, subpool); svn_error_t *err = svn_client_move(&commit_info, srcsvn.toUtf8(), &rev, destsvn.toUtf8(), false/*force remove locally modified files in wc*/, ctx, subpool); - if ( err ) { + if ( err ) error( KIO::ERR_CANNOT_RENAME, err->message ); - } - - finished(); + else + finished(); svn_pool_destroy (subpool); } @@ -931,8 +938,11 @@ initNotifier(false, false, false, subpool); svn_error_t *err = svn_client_diff (options, path1, &revision1, path2, &revision2, recurse, false, true, outfile, NULL, ctx, subpool); - if ( err ) + if ( err ) { error( KIO::ERR_SLAVE_DEFINED, err->message ); + svn_pool_destroy (subpool); + return; + } //read the content of the outfile now QStringList tmp; apr_file_close(outfile); @@ -979,8 +989,8 @@ svn_error_t *err = svn_client_switch (NULL/*result revision*/, path, url, &rev, recurse, ctx, subpool); if ( err ) error( KIO::ERR_SLAVE_DEFINED, err->message ); - - finished(); + else + finished(); svn_pool_destroy (subpool); } @@ -995,12 +1005,17 @@ svn_opt_revision_t rev = createRevision( revnumber, revkind, subpool ); +// apr_array_header_t *targets = apr_array_make(subpool, 1, sizeof(const char *)); +// const char *_target = apr_pstrdup( subpool, svn_path_canonicalize( target.toUtf8() , subpool ) ); +// (*(( const char ** )apr_array_push(( apr_array_header_t* )targets)) ) = _target; + initNotifier(false, false, false, subpool); svn_error_t *err = svn_client_update (NULL, svn_path_canonicalize( target.toUtf8(), subpool ), &rev, true, ctx, subpool); +// svn_error_t *err = svn_client_update2 (NULL, targets, &rev, true, false, ctx, subpool); if ( err ) error( KIO::ERR_SLAVE_DEFINED, err->message ); - - finished(); + else + finished(); svn_pool_destroy (subpool); } @@ -1027,8 +1042,8 @@ svn_error_t *err = svn_client_import(&commit_info,path,url,nonrecursive,ctx,subpool); if ( err ) error( KIO::ERR_SLAVE_DEFINED, err->message ); - - finished(); + else + finished(); svn_pool_destroy (subpool); } @@ -1051,8 +1066,8 @@ svn_error_t *err = svn_client_checkout (NULL/* rev actually checkedout */, svn_path_canonicalize( target.toUtf8(), subpool ), svn_path_canonicalize ( dpath.toUtf8(), subpool ), &rev, true, ctx, subpool); if ( err ) error( KIO::ERR_SLAVE_DEFINED, err->message ); - - finished(); + else + finished(); svn_pool_destroy (subpool); } @@ -1074,8 +1089,11 @@ initNotifier(false, false, false, subpool); svn_error_t *err = svn_client_commit(&commit_info,targets,nonrecursive,ctx,subpool); - if ( err ) + if ( err ) { error( KIO::ERR_SLAVE_DEFINED, err->message ); + svn_pool_destroy (subpool); + return; + } if ( commit_info ) { for ( QList::const_iterator it = wc.begin(); it != wc.end() ; ++it ) { @@ -1116,8 +1134,8 @@ svn_error_t *err = svn_client_add(svn_path_canonicalize( nurl.path().toUtf8(), subpool ),nonrecursive,ctx,subpool); if ( err ) error( KIO::ERR_SLAVE_DEFINED, err->message ); - - finished(); + else + finished(); svn_pool_destroy (subpool); } @@ -1142,8 +1160,8 @@ if ( err ) error( KIO::ERR_SLAVE_DEFINED, err->message ); - - finished(); + else + finished(); svn_pool_destroy (subpool); } @@ -1166,8 +1184,8 @@ svn_error_t *err = svn_client_revert(targets,nonrecursive,ctx,subpool); if ( err ) error( KIO::ERR_SLAVE_DEFINED, err->message ); - - finished(); + else + finished(); svn_pool_destroy (subpool); } @@ -1188,8 +1206,8 @@ svn_error_t *err = svn_client_status(&result_rev, svn_path_canonicalize( nurl.path().toUtf8(), subpool ), &rev, kio_svnProtocol::status, this, fullRecurse, getAll, checkRepos, no_ignore, ctx, subpool); if ( err ) error( KIO::ERR_SLAVE_DEFINED, err->message ); - - finished(); + else + finished(); svn_pool_destroy (subpool); } @@ -1554,8 +1572,8 @@ svn_error_t *err = svn_client_resolved(svn_path_canonicalize( nurl.path().toUtf8(), subpool ), recurse,ctx,subpool); if ( err ) error( KIO::ERR_SLAVE_DEFINED, err->message ); - - finished(); + else + finished(); svn_pool_destroy (subpool); } --- branches/KDE/4.2/kdesdk/kioslave/svn/svnhelper/kio_svn_helper.cpp #921831:921832 @@ -251,6 +251,8 @@ KIO::SimpleJob * job = KIO::special(servURL, parms); connect( job, SIGNAL( result( KJob * ) ), this, SLOT( slotResult( KJob * ) ) ); KIO::NetAccess::synchronousRun( job, 0 ); + } else if (args->isSet("R")) { + kDebug(7128) << "rename/move TODO " << list; } else if (args->isSet("C")) { kDebug(7128) << "checkout " << list; SubversionCheckoutDialog d; --- branches/KDE/4.2/kdesdk/kioslave/svn/svnhelper/subversion.desktop #921831:921832 @@ -259,7 +259,7 @@ Name[zh_CN]=重命名... Name[zh_TW]=重新命名... Icon=edit-rename -Exec=kio_svn_helper -r %U +Exec=kio_svn_helper -R %U Comment=Rename a file locally and in the repository. Use this rather than adding and deleting to rename a file. Comment[ca]=Reanomena un fitxer localment i en el repositori. Use-ho en comptes d'afegir i eliminar per a reanomenar un fitxer. Comment[cs]=Přejmenovat soubor lokálně a v repository. Použijte raději než přidání a smazání souboru k docílení jeho přejmenování.