1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
/*
SPDX-FileCopyrightText: 2007 Andreas Pakulat <apaku@gmx.de>
SPDX-License-Identifier: LGPL-2.0-or-later
*/
#include "svninfojob.h"
#include "svninfojob_p.h"
#include <QMutexLocker>
#include <QTimeZone>
#include <KLocalizedString>
#include "kdevsvncpp/client.hpp"
#include "kdevsvncpp/info.hpp"
SvnInternalInfoJob::SvnInternalInfoJob( SvnJobBase* parent )
: SvnInternalJobBase( parent )
{
}
void SvnInternalInfoJob::run(ThreadWeaver::JobPointer /*self*/, ThreadWeaver::Thread* /*thread*/)
{
initBeforeRun();
svn::Client cli(m_ctxt);
try
{
QByteArray ba = location().toString( QUrl::PreferLocalFile | QUrl::StripTrailingSlash ).toUtf8();
svn::InfoVector v = cli.info( ba.data() );
svn::Info i = v.at(0);
SvnInfoHolder h;
h.name = QString::fromUtf8( i.path().path().c_str() );
h.url = QUrl::fromUserInput( QString::fromUtf8( i.url() ) );
h.rev = qlonglong( i.revision() );
h.kind = i.kind();
h.repoUrl = QUrl::fromUserInput( QString::fromUtf8( i.repos() ) );
h.repouuid = QString::fromUtf8( i.uuid() );
h.lastChangedRev = qlonglong( i.lastChangedRevision() );
h.lastChangedDate = QDateTime::fromSecsSinceEpoch(i.lastChangedDate(), QTimeZone::LocalTime);
h.lastChangedAuthor = QString::fromUtf8( i.lastChangedAuthor() );
h.scheduled = i.schedule();
h.copyFromUrl = QUrl::fromUserInput( QString::fromUtf8( i.copyFromUrl() ) );
h.copyFromRevision = qlonglong( i.copyFromRevision() );
h.textTime = QDateTime::fromSecsSinceEpoch(i.textTime(), QTimeZone::LocalTime);
h.propertyTime = QDateTime::fromSecsSinceEpoch(i.propertyTime(), QTimeZone::LocalTime);
h.oldFileConflict = QString::fromUtf8( i.oldConflictFile() );
h.newFileConflict = QString::fromUtf8( i.newConflictFile() );
h.workingCopyFileConflict = QString::fromUtf8( i.workingConflictFile() );
h.propertyRejectFile = QString::fromUtf8( i.propertyRejectFile() );
emit gotInfo( h );
}catch( const svn::ClientException& ce )
{
qCDebug(PLUGIN_SVN) << "Exception while getting info for file: "
<< m_location
<< QString::fromUtf8( ce.message() );
setErrorMessage( QString::fromUtf8( ce.message() ) );
m_success = false;
}
}
void SvnInternalInfoJob::setLocation( const QUrl &url )
{
QMutexLocker l( &m_mutex );
m_location = url;
}
QUrl SvnInternalInfoJob::location() const
{
QMutexLocker l( &m_mutex );
return m_location;
}
SvnInfoJob::SvnInfoJob( KDevSvnPlugin* parent )
: SvnJobBaseImpl( parent, KDevelop::OutputJob::Silent ), m_provideInfo( SvnInfoJob::AllInfo )
{
setType( KDevelop::VcsJob::Add );
connect( m_job.data(), &SvnInternalInfoJob::gotInfo,
this, &SvnInfoJob::setInfo, Qt::QueuedConnection );
setObjectName(i18n("Subversion Info"));
}
QVariant SvnInfoJob::fetchResults()
{
if( m_provideInfo == RepoUrlOnly )
{
return QVariant(m_info.url);
}else if( m_provideInfo == RevisionOnly )
{
KDevelop::VcsRevision rev;
svn::Revision svnRev( m_info.rev );
switch( m_provideRevisionType )
{
case KDevelop::VcsRevision::Date:
rev.setRevisionValue(QVariant(QDateTime::fromSecsSinceEpoch(svnRev.date(), QTimeZone::LocalTime)),
KDevelop::VcsRevision::Date);
break;
default:
rev.setRevisionValue( QVariant( qlonglong( svnRev.revnum() ) ),
KDevelop::VcsRevision::GlobalNumber );
break;
}
return QVariant::fromValue<KDevelop::VcsRevision>(rev);
}
return QVariant::fromValue<SvnInfoHolder>(m_info);
}
void SvnInfoJob::start()
{
if (!m_job->location().isValid()) {
internalJobFailed();
setErrorText( i18n( "Not enough information to execute info job" ) );
} else {
startInternalJob();
}
}
void SvnInfoJob::setLocation( const QUrl &url )
{
if( status() == KDevelop::VcsJob::JobNotStarted )
m_job->setLocation( url );
}
void SvnInfoJob::setProvideInformation( ProvideInformationType type )
{
m_provideInfo = type;
}
void SvnInfoJob::setProvideRevisionType( KDevelop::VcsRevision::RevisionType t )
{
m_provideRevisionType = t;
}
void SvnInfoJob::setInfo( const SvnInfoHolder& info )
{
m_info = info;
emit resultsReady( this );
}
#include "moc_svninfojob.cpp"
#include "moc_svninfojob_p.cpp"
|