File indexing completed on 2024-05-05 04:41:01
0001 /* 0002 SPDX-FileCopyrightText: 2007 Andreas Pakulat <apaku@gmx.de> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "svninfojob.h" 0008 0009 #include "svninfojob_p.h" 0010 0011 #include <QMutexLocker> 0012 0013 #include <KLocalizedString> 0014 0015 #include "kdevsvncpp/client.hpp" 0016 #include "kdevsvncpp/info.hpp" 0017 0018 SvnInternalInfoJob::SvnInternalInfoJob( SvnJobBase* parent ) 0019 : SvnInternalJobBase( parent ) 0020 { 0021 } 0022 0023 void SvnInternalInfoJob::run(ThreadWeaver::JobPointer /*self*/, ThreadWeaver::Thread* /*thread*/) 0024 { 0025 initBeforeRun(); 0026 svn::Client cli(m_ctxt); 0027 try 0028 { 0029 QByteArray ba = location().toString( QUrl::PreferLocalFile | QUrl::StripTrailingSlash ).toUtf8(); 0030 svn::InfoVector v = cli.info( ba.data() ); 0031 svn::Info i = v.at(0); 0032 SvnInfoHolder h; 0033 h.name = QString::fromUtf8( i.path().path().c_str() ); 0034 h.url = QUrl::fromUserInput( QString::fromUtf8( i.url() ) ); 0035 h.rev = qlonglong( i.revision() ); 0036 h.kind = i.kind(); 0037 h.repoUrl = QUrl::fromUserInput( QString::fromUtf8( i.repos() ) ); 0038 h.repouuid = QString::fromUtf8( i.uuid() ); 0039 h.lastChangedRev = qlonglong( i.lastChangedRevision() ); 0040 h.lastChangedDate = QDateTime::fromSecsSinceEpoch(i.lastChangedDate(), Qt::LocalTime); 0041 h.lastChangedAuthor = QString::fromUtf8( i.lastChangedAuthor() ); 0042 h.scheduled = i.schedule(); 0043 h.copyFromUrl = QUrl::fromUserInput( QString::fromUtf8( i.copyFromUrl() ) ); 0044 h.copyFromRevision = qlonglong( i.copyFromRevision() ); 0045 h.textTime = QDateTime::fromSecsSinceEpoch(i.textTime(), Qt::LocalTime); 0046 h.propertyTime = QDateTime::fromSecsSinceEpoch(i.propertyTime(), Qt::LocalTime); 0047 h.oldFileConflict = QString::fromUtf8( i.oldConflictFile() ); 0048 h.newFileConflict = QString::fromUtf8( i.newConflictFile() ); 0049 h.workingCopyFileConflict = QString::fromUtf8( i.workingConflictFile() ); 0050 h.propertyRejectFile = QString::fromUtf8( i.propertyRejectFile() ); 0051 0052 emit gotInfo( h ); 0053 }catch( const svn::ClientException& ce ) 0054 { 0055 qCDebug(PLUGIN_SVN) << "Exception while getting info for file: " 0056 << m_location 0057 << QString::fromUtf8( ce.message() ); 0058 setErrorMessage( QString::fromUtf8( ce.message() ) ); 0059 m_success = false; 0060 } 0061 } 0062 0063 void SvnInternalInfoJob::setLocation( const QUrl &url ) 0064 { 0065 QMutexLocker l( &m_mutex ); 0066 m_location = url; 0067 } 0068 0069 QUrl SvnInternalInfoJob::location() const 0070 { 0071 QMutexLocker l( &m_mutex ); 0072 return m_location; 0073 } 0074 0075 SvnInfoJob::SvnInfoJob( KDevSvnPlugin* parent ) 0076 : SvnJobBaseImpl( parent, KDevelop::OutputJob::Silent ), m_provideInfo( SvnInfoJob::AllInfo ) 0077 { 0078 setType( KDevelop::VcsJob::Add ); 0079 connect( m_job.data(), &SvnInternalInfoJob::gotInfo, 0080 this, &SvnInfoJob::setInfo, Qt::QueuedConnection ); 0081 setObjectName(i18n("Subversion Info")); 0082 } 0083 0084 QVariant SvnInfoJob::fetchResults() 0085 { 0086 if( m_provideInfo == RepoUrlOnly ) 0087 { 0088 return QVariant(m_info.url); 0089 }else if( m_provideInfo == RevisionOnly ) 0090 { 0091 KDevelop::VcsRevision rev; 0092 svn::Revision svnRev( m_info.rev ); 0093 switch( m_provideRevisionType ) 0094 { 0095 case KDevelop::VcsRevision::Date: 0096 rev.setRevisionValue( QVariant( QDateTime::fromSecsSinceEpoch(svnRev.date(), Qt::LocalTime) ), 0097 KDevelop::VcsRevision::Date ); 0098 break; 0099 default: 0100 rev.setRevisionValue( QVariant( qlonglong( svnRev.revnum() ) ), 0101 KDevelop::VcsRevision::GlobalNumber ); 0102 break; 0103 } 0104 return QVariant::fromValue<KDevelop::VcsRevision>(rev); 0105 } 0106 return QVariant::fromValue<SvnInfoHolder>(m_info); 0107 } 0108 0109 void SvnInfoJob::start() 0110 { 0111 if (!m_job->location().isValid()) { 0112 internalJobFailed(); 0113 setErrorText( i18n( "Not enough information to execute info job" ) ); 0114 } else { 0115 startInternalJob(); 0116 } 0117 } 0118 0119 void SvnInfoJob::setLocation( const QUrl &url ) 0120 { 0121 if( status() == KDevelop::VcsJob::JobNotStarted ) 0122 m_job->setLocation( url ); 0123 } 0124 0125 void SvnInfoJob::setProvideInformation( ProvideInformationType type ) 0126 { 0127 m_provideInfo = type; 0128 } 0129 0130 void SvnInfoJob::setProvideRevisionType( KDevelop::VcsRevision::RevisionType t ) 0131 { 0132 m_provideRevisionType = t; 0133 } 0134 0135 void SvnInfoJob::setInfo( const SvnInfoHolder& info ) 0136 { 0137 m_info = info; 0138 emit resultsReady( this ); 0139 } 0140 0141 #include "moc_svninfojob.cpp" 0142 #include "moc_svninfojob_p.cpp"