void SvnInternalCommitJob::run(ThreadWeaver::JobPointer /*self*/, ThreadWeaver::Thread* /*thread*/) { initBeforeRun(); svn::Client cli(m_ctxt); std::vector<svn::Path> targets; QList<QUrl> l = urls(); foreach( const QUrl &u, l ) { QByteArray path = u.toString( QUrl::PreferLocalFile | QUrl::StripTrailingSlash ).toUtf8(); targets.push_back( svn::Path( path.data() ) ); }
void SvnInternalRevertJob::run() { initBeforeRun(); svn::Client cli(m_ctxt); std::vector<svn::Path> targets; KUrl::List l = locations(); foreach( const KUrl &url, l ) { QByteArray ba = url.toLocalFile( KUrl::RemoveTrailingSlash ).toUtf8(); targets.push_back( svn::Path( ba.data() ) ); }
void SvnInternalAddJob::run(ThreadWeaver::JobPointer /*self*/, ThreadWeaver::Thread* /*thread*/) { initBeforeRun(); svn::Client cli(m_ctxt); QList<QUrl> l = locations(); foreach( const QUrl &url, l ) { try { QByteArray ba = url.toString( QUrl::PreferLocalFile | QUrl::StripTrailingSlash ).toUtf8(); cli.add( svn::Path( ba.data() ), recursive() ); }catch( svn::ClientException ce ) { qCDebug(PLUGIN_SVN) << "Exception while adding file: " << url << QString::fromUtf8( ce.message() ); setErrorMessage( QString::fromUtf8( ce.message() ) ); m_success = false; } } }
void SvnInternalLogJob::run() { initBeforeRun(); SvnClient cli(m_ctxt); connect( &cli, SIGNAL(logEventReceived(KDevelop::VcsEvent)), this, SIGNAL(logEvent(KDevelop::VcsEvent)) ); try { QByteArray ba = location().toLocalFile( KUrl::RemoveTrailingSlash ).toUtf8(); cli.log( ba.data(), createSvnCppRevisionFromVcsRevision( startRevision() ), createSvnCppRevisionFromVcsRevision( endRevision() ), limit() ); }catch( svn::ClientException ce ) { kDebug(9510) << "Exception while logging file: " << location() << QString::fromUtf8( ce.message() ); setErrorMessage( QString::fromUtf8( ce.message() ) ); m_success = false; } }
void SvnInternalDiffJob::run() { initBeforeRun(); SvnClient cli(m_ctxt); try { QString diff; if( destination().isValid() ) { QByteArray srcba; if( source().type() == KDevelop::VcsLocation::LocalLocation ) { KUrl url = source().localUrl(); if( url.isLocalFile() ) { srcba = url.toLocalFile( KUrl::RemoveTrailingSlash ).toUtf8(); }else { srcba = url.url( KUrl::RemoveTrailingSlash ).toUtf8(); } }else { srcba = source().repositoryServer().toUtf8(); } QByteArray dstba; if( destination().type() == KDevelop::VcsLocation::LocalLocation ) { KUrl url = destination().localUrl(); if( url.isLocalFile() ) { dstba = url.toLocalFile( KUrl::RemoveTrailingSlash ).toUtf8(); }else { dstba = url.url().toUtf8(); } }else { dstba = destination().repositoryServer().toUtf8(); } svn::Revision srcRev = createSvnCppRevisionFromVcsRevision( srcRevision() ); svn::Revision dstRev = createSvnCppRevisionFromVcsRevision( dstRevision() ); if( srcba.isEmpty() || ( dstba.isEmpty() && srcRev.kind() == svn_opt_revision_unspecified && dstRev.kind() == svn_opt_revision_unspecified ) ) { throw svn::ClientException( "Not enough information for a diff"); } diff = cli.diff( svn::Path( srcba.data() ), srcRev, svn::Path( dstba.data() ), dstRev, recursive(), ignoreAncestry(), noDiffOnDelete(), ignoreContentType() ); }else { QByteArray srcba; if( source().type() == KDevelop::VcsLocation::LocalLocation ) { KUrl url = source().localUrl(); if( url.isLocalFile() ) { srcba = url.toLocalFile( KUrl::RemoveTrailingSlash ).toUtf8(); }else { srcba = url.url().toUtf8(); } }else { srcba = source().repositoryServer().toUtf8(); } svn::Revision pegRev = createSvnCppRevisionFromVcsRevision( pegRevision() ); svn::Revision srcRev = createSvnCppRevisionFromVcsRevision( srcRevision() ); svn::Revision dstRev = createSvnCppRevisionFromVcsRevision( dstRevision() ); if( srcba.isEmpty() || pegRev.kind() == svn_opt_revision_unspecified || dstRev.kind() == svn_opt_revision_unspecified || srcRev.kind() == svn_opt_revision_unspecified) { throw svn::ClientException( "Not enough information for a diff"); } //@TODO: Make sure there's no diff-cmd set via the users configuration file, can be done only via C api diff = cli.diff( svn::Path( srcba.data() ), pegRev, srcRev, dstRev, recursive(), ignoreAncestry(), noDiffOnDelete(), ignoreContentType() ); } diff = repairDiff(diff); emit gotDiff( diff ); }catch( svn::ClientException ce ) { kDebug(9510) << "Exception while doing a diff: " << m_source.localUrl() << m_source.repositoryServer() << m_srcRevision.prettyValue() << m_destination.localUrl() << m_destination.repositoryServer() << m_dstRevision.prettyValue() << QString::fromUtf8( ce.message() ); setErrorMessage( QString::fromUtf8( ce.message() ) ); m_success = false; } }
void SvnInternalBlameJob::run() { initBeforeRun(); QByteArray ba = location().toLocalFile( KUrl::RemoveTrailingSlash ).toUtf8(); svn::Client cli(m_ctxt); svn::AnnotatedFile* file; try { file = cli.annotate( ba.data(), createSvnCppRevisionFromVcsRevision( startRevision() ), createSvnCppRevisionFromVcsRevision( endRevision() ) ); }catch( svn::ClientException ce ) { kDebug(9510) << "Exception while blaming file: " << location() << QString::fromUtf8( ce.message() ); setErrorMessage( QString::fromUtf8( ce.message() ) ); m_success = false; return; } svn_revnum_t minrev = -1, maxrev = -1; for( svn::AnnotatedFile::const_iterator it = file->begin(); it != file->end(); it++ ) { if( (*it).revision() < minrev || minrev == -1 ) { minrev = (*it).revision(); } if( (*it).revision() > maxrev || maxrev == -1 ) { maxrev = (*it).revision(); } } QHash<svn_revnum_t,QString> commitMessages; try { const svn::LogEntries* entries = cli.log( ba.data(), svn::Revision(minrev), svn::Revision(maxrev), false, false ); for( svn::LogEntries::const_iterator it = entries->begin(); it != entries->end(); it++ ) { commitMessages[(*it).revision] = QString::fromUtf8( (*it).message.c_str() ); } }catch( svn::ClientException ce ) { kDebug(9510) << "Exception while fetching log messages for blame: " << location() << QString::fromUtf8( ce.message() ); setErrorMessage( QString::fromUtf8( ce.message() ) ); m_success = false; } for( svn::AnnotatedFile::const_iterator it = file->begin(); it != file->end(); it++ ) { KDevelop::VcsAnnotationLine line; line.setAuthor( QString::fromUtf8( it->author().c_str() ) ); line.setDate( QDateTime::fromString( QString::fromUtf8( it->date().c_str() ), Qt::ISODate ) ); line.setText( QString::fromUtf8( it->line().c_str() ) ); KDevelop::VcsRevision rev; rev.setRevisionValue( QVariant( qlonglong( it->revision() ) ), KDevelop::VcsRevision::GlobalNumber ); line.setRevision( rev ); line.setLineNumber( it->lineNumber() ); line.setCommitMessage( commitMessages[it->revision()] ); emit blameLine( line ); } }