File indexing completed on 2024-05-05 04:41:00
0001 /* 0002 SPDX-FileCopyrightText: 2007 Andreas Pakulat <apaku@gmx.de> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "svncheckoutjob.h" 0008 #include "svncheckoutjob_p.h" 0009 0010 #include <QFileInfo> 0011 #include <QMutexLocker> 0012 0013 #include <KIO/Global> 0014 #include <KLocalizedString> 0015 0016 #include "kdevsvncpp/client.hpp" 0017 #include "kdevsvncpp/path.hpp" 0018 0019 #include <vcs/vcslocation.h> 0020 #include <util/path.h> 0021 0022 SvnInternalCheckoutJob::SvnInternalCheckoutJob( SvnJobBase* parent ) 0023 : SvnInternalJobBase( parent ) 0024 { 0025 } 0026 0027 bool SvnInternalCheckoutJob::isValid() const 0028 { 0029 QMutexLocker l( &m_mutex ); 0030 return m_sourceRepository.isValid() && m_destinationDirectory.isLocalFile() && QFileInfo::exists(KIO::upUrl(m_destinationDirectory).toLocalFile()); 0031 } 0032 0033 void SvnInternalCheckoutJob::run(ThreadWeaver::JobPointer /*self*/, ThreadWeaver::Thread* /*thread*/) 0034 { 0035 initBeforeRun(); 0036 0037 svn::Client cli(m_ctxt); 0038 try { 0039 bool recurse = ( recursion() == KDevelop::IBasicVersionControl::Recursive ); 0040 QUrl desturl = QUrl( source().repositoryServer() ).adjusted(QUrl::StripTrailingSlash | QUrl::NormalizePathSegments ); 0041 const QByteArray srcba = desturl.url().toUtf8(); 0042 KDevelop::Path destdir(KDevelop::Path(destination()).parent(), destination().fileName()); 0043 QByteArray destba = destdir.toLocalFile().toUtf8(); 0044 qCDebug(PLUGIN_SVN) << srcba << destba << recurse; 0045 cli.checkout( srcba.data(), svn::Path( destba.data() ), svn::Revision::HEAD, recurse ); 0046 } catch( const svn::ClientException& ce ) { 0047 qCDebug(PLUGIN_SVN) << "Exception while checking out: " << source().repositoryServer() << ce.message(); 0048 setErrorMessage( QString::fromUtf8( ce.message() ) ); 0049 m_success = false; 0050 } 0051 } 0052 0053 0054 void SvnInternalCheckoutJob::setMapping( const KDevelop::VcsLocation & sourceRepository, const QUrl & destinationDirectory, KDevelop::IBasicVersionControl::RecursionMode recursion ) 0055 { 0056 QMutexLocker l( &m_mutex ); 0057 m_sourceRepository = sourceRepository; 0058 m_destinationDirectory = destinationDirectory; 0059 m_recursion = recursion; 0060 } 0061 0062 KDevelop::VcsLocation SvnInternalCheckoutJob::source() const 0063 { 0064 QMutexLocker l( &m_mutex ); 0065 return m_sourceRepository; 0066 } 0067 0068 KDevelop::IBasicVersionControl::RecursionMode SvnInternalCheckoutJob::recursion() const 0069 { 0070 QMutexLocker l( &m_mutex ); 0071 return m_recursion; 0072 } 0073 0074 QUrl SvnInternalCheckoutJob::destination() const 0075 { 0076 QMutexLocker l( &m_mutex ); 0077 return m_destinationDirectory; 0078 } 0079 0080 SvnCheckoutJob::SvnCheckoutJob( KDevSvnPlugin* parent ) 0081 : SvnJobBaseImpl( parent, KDevelop::OutputJob::Silent ) 0082 { 0083 setType( KDevelop::VcsJob::Import ); 0084 setObjectName(i18n("Subversion Checkout")); 0085 } 0086 0087 QVariant SvnCheckoutJob::fetchResults() 0088 { 0089 return QVariant(); 0090 } 0091 0092 void SvnCheckoutJob::start() 0093 { 0094 if (!m_job->isValid() ) { 0095 internalJobFailed(); 0096 setErrorText( i18n( "Not enough information to checkout" ) ); 0097 } else { 0098 qCDebug(PLUGIN_SVN) << "checking out: " << m_job->source().repositoryServer(); 0099 startInternalJob(); 0100 } 0101 } 0102 0103 void SvnCheckoutJob::setMapping( const KDevelop::VcsLocation & sourceRepository, const QUrl & destinationDirectory, KDevelop::IBasicVersionControl::RecursionMode recursion ) 0104 { 0105 if( status() == KDevelop::VcsJob::JobNotStarted ) { 0106 m_job->setMapping(sourceRepository, destinationDirectory, recursion); 0107 } 0108 } 0109 0110 #include "moc_svncheckoutjob_p.cpp" 0111 #include "moc_svncheckoutjob.cpp"