9#include "kompareprocess.h"
17#include <komparediffdebug.h>
18#include "diffsettings.h"
39 for (; upLevels > 0; --upLevels) {
40 relative += QStringLiteral(
"../");
50 m_diffSettings(diffSettings),
53 m_textDecoder(nullptr)
57 this, &KompareProcess::slotFinished);
59 setEnv(QStringLiteral(
"LANG"), QStringLiteral(
"C"));
62 if (m_diffMode == Kompare::Default)
64 writeDefaultCommandLine();
72 setWorkingDirectory(dir);
76 *
this << QStringLiteral(
"--");
79 if (m_mode == Kompare::ComparingStringFile)
81 *
this << QStringLiteral(
"-");
82 m_customString = source;
86 *
this << constructRelativePath(dir, source);
89 if (m_mode == Kompare::ComparingFileString)
91 *
this << QStringLiteral(
"-");
92 m_customString = destination;
96 *
this << constructRelativePath(dir, destination);
100void KompareProcess::writeDefaultCommandLine()
102 if (!m_diffSettings || m_diffSettings->m_diffProgram.
isEmpty())
104 *
this << QStringLiteral(
"diff") << QStringLiteral(
"-dr");
108 *
this << m_diffSettings->m_diffProgram << QStringLiteral(
"-dr");
111 *
this << QStringLiteral(
"-U") <<
QString::number(m_diffSettings->m_linesOfContext);
114void KompareProcess::writeCommandLine()
117 if (m_diffSettings->m_diffProgram.
isEmpty())
119 qCDebug(LIBKOMPAREDIFF2) <<
"Using the first diff in the path...";
120 *
this << QStringLiteral(
"diff");
124 qCDebug(LIBKOMPAREDIFF2) <<
"Using a user specified diff, namely: " << m_diffSettings->m_diffProgram;
125 *
this << m_diffSettings->m_diffProgram;
128 switch (m_diffSettings->m_format) {
129 case Kompare::Unified :
130 *
this << QStringLiteral(
"-U") <<
QString::number(m_diffSettings->m_linesOfContext);
132 case Kompare::Context :
133 *
this << QStringLiteral(
"-C") <<
QString::number(m_diffSettings->m_linesOfContext);
136 *
this << QStringLiteral(
"-n");
139 *
this << QStringLiteral(
"-e");
141 case Kompare::SideBySide:
142 *
this << QStringLiteral(
"-y");
144 case Kompare::Normal :
145 case Kompare::UnknownFormat :
150 if (m_diffSettings->m_largeFiles
153#
if defined(__OpenBSD__)
154 && !m_diffSettings->m_diffProgram.
isEmpty()
158 *
this << QStringLiteral(
"-H");
161 if (m_diffSettings->m_ignoreWhiteSpace)
163 *
this << QStringLiteral(
"-b");
166 if (m_diffSettings->m_ignoreAllWhiteSpace)
168 *
this << QStringLiteral(
"-w");
171 if (m_diffSettings->m_ignoreEmptyLines)
173 *
this << QStringLiteral(
"-B");
176 if (m_diffSettings->m_ignoreChangesDueToTabExpansion)
178 *
this << QStringLiteral(
"-E");
181 if (m_diffSettings->m_createSmallerDiff)
183 *
this << QStringLiteral(
"-d");
186 if (m_diffSettings->m_ignoreChangesInCase)
188 *
this << QStringLiteral(
"-i");
191 if (m_diffSettings->m_ignoreRegExp && !m_diffSettings->m_ignoreRegExpText.
isEmpty())
193 *
this << QStringLiteral(
"-I") << m_diffSettings->m_ignoreRegExpText;
196 if (m_diffSettings->m_showCFunctionChange)
198 *
this << QStringLiteral(
"-p");
201 if (m_diffSettings->m_convertTabsToSpaces)
203 *
this << QStringLiteral(
"-t");
206 if (m_diffSettings->m_recursive)
208 *
this << QStringLiteral(
"-r");
211 if (m_diffSettings->m_newFiles)
213 *
this << QStringLiteral(
"-N");
222 if (m_diffSettings->m_excludeFilePattern)
225 std::as_const(m_diffSettings->m_excludeFilePatternList)) {
226 *
this << QStringLiteral(
"-x") << it;
230 if (m_diffSettings->m_excludeFilesFile && !m_diffSettings->m_excludeFilesFileURL.
isEmpty())
232 *
this << QStringLiteral(
"-X") << m_diffSettings->m_excludeFilesFileURL;
236KompareProcess::~KompareProcess()
238 delete m_textDecoder;
241void KompareProcess::setEncoding(
const QString& encoding)
245 m_codec = QTextCodec::codecForLocale();
246 m_textDecoder = m_codec->makeDecoder();
250 m_codec = QTextCodec::codecForName(encoding.
toUtf8());
252 m_textDecoder = m_codec->makeDecoder();
255 qCDebug(LIBKOMPAREDIFF2) <<
"Using locale codec as backup...";
256 m_codec = QTextCodec::codecForLocale();
257 m_textDecoder = m_codec->makeDecoder();
262void KompareProcess::start()
269 for (; it !=
end; ++it)
271 qCDebug(LIBKOMPAREDIFF2) << cmdLine;
278 if ((m_mode == Kompare::ComparingStringFile) || (m_mode == Kompare::ComparingFileString))
279 write(m_codec->fromUnicode(m_customString));
292 qCDebug(LIBKOMPAREDIFF2) <<
"KompareProcess::slotFinished : No decoder !!!";
297 qCDebug(LIBKOMPAREDIFF2) <<
"Exited with exit code : " <<
exitCode;
301#include "moc_kompareprocess.cpp"
void setNextOpenMode(QIODevice::OpenMode mode)
QStringList program() const
void setOutputChannelMode(OutputChannelMode mode)
KIOCORE_EXPORT QUrl upUrl(const QUrl &url)
KIOCORE_EXPORT QString dir(const QString &fileClass)
const QList< QKeySequence > & end()
qint64 write(const QByteArray &data)
const_iterator constBegin() const const
const_iterator constEnd() const const
int exitCode() const const
QProcess::ExitStatus exitStatus() const const
void finished(int exitCode, QProcess::ExitStatus exitStatus)
QByteArray readAllStandardError()
QByteArray readAllStandardOutput()
int compare(QLatin1StringView s1, const QString &s2, Qt::CaseSensitivity cs)
bool isEmpty() const const
qsizetype length() const const
QString number(double n, char format, int precision)
QString & remove(QChar ch, Qt::CaseSensitivity cs)
QByteArray toUtf8() const const
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)
bool isParentOf(const QUrl &childUrl) const const
bool isValid() const const
QString path(ComponentFormattingOptions options) const const