octopi-git: Prep. for upstreaming (WIP)

This commit is contained in:
Ray Donnelly
2014-09-28 21:35:22 +01:00
parent f2f1e77efc
commit 43aaa073f0
13 changed files with 885 additions and 317 deletions

View File

@@ -1,29 +0,0 @@
From 8d958a00b5ef2dc1c2f48fb795ea3484c8c040ac Mon Sep 17 00:00:00 2001
From: Ray Donnelly <mingw.android@gmail.com>
Date: Thu, 27 Feb 2014 17:00:08 +0000
Subject: [PATCH 1/5] Hack isRootRunning() to always be false for _WIN32
---
src/unixcommand.h | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/unixcommand.h b/src/unixcommand.h
index 3105307..334cef0 100644
--- a/src/unixcommand.h
+++ b/src/unixcommand.h
@@ -110,8 +110,12 @@ public:
static bool isAppRunning(const QString &appName, bool justOneInstance = false);
static bool isRootRunning(){
+#if defined(_WIN32)
+ return false;
+#else
int uid = geteuid();
return (uid == 0); //Returns TRUE if root is running Octopi
+#endif
}
static QFile* getTemporaryFile(){
--
2.1.0

View File

@@ -0,0 +1,154 @@
From c0ad3d9e7b5fe955bfe1bfda7e6dfd1ec7c85e3d Mon Sep 17 00:00:00 2001
From: Ray Donnelly <mingw.android@gmail.com>
Date: Sat, 27 Sep 2014 14:57:41 +0100
Subject: [PATCH 01/10] Use Q_PID instead of int, reducing QProcess repitition
Process ids are not ints on all systems
---
src/utils.cpp | 70 +++++++++++++++++++++++++++++++++++------------------------
src/utils.h | 6 ++---
2 files changed, 45 insertions(+), 31 deletions(-)
diff --git a/src/utils.cpp b/src/utils.cpp
index 2161190..04ad195 100644
--- a/src/utils.cpp
+++ b/src/utils.cpp
@@ -77,6 +77,38 @@ void utils::ProcessWrapper::onProcessStarted()
emit startedTerminal();
}
+QString Ps_To_Q_PIDs(QString ps_args)
+{
+ QString out;
+ QProcess proc;
+ proc.start(ps_args);
+ proc.waitForFinished(-1);
+ out = proc.readAll();
+ proc.close();
+ return out;
+}
+
+QStringList Ps_To_Q_PIDs_SL(QString ps_args)
+{
+ QString out = Ps_To_Q_PIDs(ps_args);
+ QStringList list = out.split("\n", QString::SkipEmptyParts);
+ return list;
+}
+
+/*
+ * Returns the _PROCESS_INFORMATION* on Windows, does nothing on
+ * others.
+ */
+Q_PID int_to_Q_PID(int in_pid)
+{
+ return in_pid;
+}
+
+int Q_PID_to_int(Q_PID in_pid)
+{
+ return in_pid;
+}
+
/*
* We need this to search for the SH process pid (which spaws AUR tool)
*/
@@ -86,21 +118,11 @@ void utils::ProcessWrapper::onSingleShot()
QProcess pAux;
QString saux;
- proc.start("ps -o pid -C sh");
- proc.waitForFinished(-1);
- QString out = proc.readAll();
- proc.close();
-
- QStringList list = out.split("\n", QString::SkipEmptyParts);
+ QStringList list = Ps_To_Q_PIDs_SL(QLatin1String("ps -o pid -C sh"));
if (list.count() == 1)
{
- proc.start("ps -o pid -C bash");
- proc.waitForFinished(-1);
- out = proc.readAll();
- proc.close();
-
- list = out.split("\n", QString::SkipEmptyParts);
+ list = Ps_To_Q_PIDs_SL(QLatin1String("ps -o pid -C bash"));
}
QStringList slist;
@@ -109,12 +131,10 @@ void utils::ProcessWrapper::onSingleShot()
{
int candidatePid = list.at(c).trimmed().toInt();
- if (candidatePid < m_pidTerminal) continue;
+ // Determine if candidatePid is a child of m_pidTerminal
+ if (candidatePid < Q_PID_to_int(m_pidTerminal)) continue;
- QString cmd = QString("ps -O cmd --ppid %1").arg(candidatePid);
- proc.start(cmd);
- proc.waitForFinished(-1);
- QString out = proc.readAll();
+ QString out = Ps_To_Q_PIDs(QString("ps -O cmd --ppid %1").arg(candidatePid));
if (UnixCommand::getLinuxDistro() == ectn_KAOS)
{
@@ -131,8 +151,8 @@ void utils::ProcessWrapper::onSingleShot()
if (candidatePid < candidatePid2)
{
- m_pidSH = candidatePid;
- m_pidAUR = candidatePid2;
+ m_pidSH = int_to_Q_PID(candidatePid);
+ m_pidAUR = int_to_Q_PID(candidatePid2);
m_timer->start();
return;
@@ -155,8 +175,8 @@ void utils::ProcessWrapper::onSingleShot()
if (candidatePid < candidatePid2)
{
- m_pidSH = candidatePid;
- m_pidAUR = candidatePid2;
+ m_pidSH = int_to_Q_PID(candidatePid);
+ m_pidAUR = int_to_Q_PID(candidatePid2);
m_timer->start();
return;
@@ -175,16 +195,10 @@ void utils::ProcessWrapper::onSingleShot()
void utils::ProcessWrapper::onTimer()
{
QProcess proc;
- QString cmd = QString("ps -p %1 %2").arg(m_pidSH).arg(m_pidAUR);
+ QString out = Ps_To_Q_PIDs(QString("ps -p %1 %2").arg(Q_PID_to_int(m_pidSH)).arg(Q_PID_to_int(m_pidAUR)));
//std::cout << "PIDS: " << cmd.toLatin1().data() << "\n" << std::endl;
- proc.start(cmd);
- proc.waitForFinished(-1);
-
- //If any of the processes have finished...
- QString out = proc.readAll();
-
//std::cout << "Output: " << out.toLatin1().data() << "\n" << std::endl;
if (!out.contains(".qt_temp_", Qt::CaseInsensitive))
diff --git a/src/utils.h b/src/utils.h
index 54a8edc..a1f79a9 100644
--- a/src/utils.h
+++ b/src/utils.h
@@ -34,9 +34,9 @@ class ProcessWrapper : public QObject
Q_OBJECT
private:
- int m_pidTerminal;
- int m_pidSH;
- int m_pidAUR;
+ Q_PID m_pidTerminal;
+ Q_PID m_pidSH;
+ Q_PID m_pidAUR;
QProcess *m_process;
QTimer *m_timer;
QTimer *m_timerSingleShot;
--
2.1.1

View File

@@ -0,0 +1,281 @@
From f55e9c79fc71f5088bcb0a4c0b376acb4d0158c7 Mon Sep 17 00:00:00 2001
From: Ray Donnelly <mingw.android@gmail.com>
Date: Sat, 27 Sep 2014 15:23:27 +0100
Subject: [PATCH 02/10] Use a shared QProcessEnvironment
This reduces a lot of repetition. Environment variables
LANG, LC_MESSAGES, LC_ALL are set to "C" for all cases.
---
octopi.pro | 2 ++
src/unixcommand.cpp | 88 +++++++++++------------------------------------------
src/unixcommand.h | 15 +++++++++
3 files changed, 35 insertions(+), 70 deletions(-)
diff --git a/octopi.pro b/octopi.pro
index cac9348..0531b6d 100644
--- a/octopi.pro
+++ b/octopi.pro
@@ -120,6 +120,8 @@ TRANSLATIONS += resources/translations/octopi_pt_BR.ts \
resources/translations/octopi_ja.ts \
resources/translations/octopi_eu.ts
+win32: LIBS += -lwtsapi32
+
greaterThan(QT_MAJOR_VERSION, 4){
TRANSLATIONS += resources/translations/octopi_ast.ts
}
diff --git a/src/unixcommand.cpp b/src/unixcommand.cpp
index a32b775..6ab57b9 100644
--- a/src/unixcommand.cpp
+++ b/src/unixcommand.cpp
@@ -36,6 +36,7 @@
*/
QFile *UnixCommand::m_temporaryFile = 0;
+QProcessEnvironment *UnixCommand::m_env = 0;
/*
* Executes given command and returns the StandardError Output.
@@ -43,12 +44,7 @@ QFile *UnixCommand::m_temporaryFile = 0;
QString UnixCommand::runCommand(const QString& commandToRun)
{
QProcess proc;
- QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
- env.remove("LANG");
- env.remove("LC_MESSAGES");
- env.insert("LANG", "C");
- env.insert("LC_MESSAGES", "C");
- proc.setProcessEnvironment(env);
+ proc.setProcessEnvironment(getEnv());
proc.start(commandToRun);
proc.waitForStarted();
proc.waitForFinished(-1);
@@ -63,10 +59,7 @@ QString UnixCommand::runCommand(const QString& commandToRun)
*/
QString UnixCommand::runCurlCommand(const QString& commandToRun){
QProcess proc;
- QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
- env.insert("LANG", "C");
- env.insert("LC_MESSAGES", "C");
- proc.setProcessEnvironment(env);
+ proc.setProcessEnvironment(getEnv());
proc.start(commandToRun);
proc.waitForStarted();
proc.waitForFinished(-1);
@@ -87,10 +80,7 @@ QString UnixCommand::runCurlCommand(const QString& commandToRun){
*/
QString UnixCommand::discoverBinaryPath(const QString& binary){
QProcess proc;
- QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
- env.insert("LANG", "C");
- env.insert("LC_MESSAGES", "C");
- proc.setProcessEnvironment(env);
+ proc.setProcessEnvironment(getEnv());
proc.start("/bin/sh -c \"which " + binary + "\"");
proc.waitForFinished();
@@ -117,10 +107,7 @@ QString UnixCommand::discoverBinaryPath(const QString& binary){
bool UnixCommand::cleanPacmanCache()
{
QProcess pacman;
- QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
- env.insert("LANG", "C");
- env.insert("LC_MESSAGES", "C");
- pacman.setProcessEnvironment(env);
+ pacman.setProcessEnvironment(getEnv());
QString commandStr = "\"yes | pacman -Scc\"";
QString command = WMHelper::getSUCommand() + " " + commandStr;
@@ -138,11 +125,7 @@ QByteArray UnixCommand::performQuery(const QStringList args)
QByteArray result("");
QProcess pacman;
- QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
- env.insert("LANG", "C");
- env.insert("LC_MESSAGES", "C");
- env.insert("LC_ALL", "C");
- pacman.setProcessEnvironment(env);
+ pacman.setProcessEnvironment(getEnv());
pacman.start("pacman", args);
pacman.waitForFinished();
@@ -161,11 +144,7 @@ QByteArray UnixCommand::performQuery(const QString &args)
QByteArray result("");
QProcess pacman;
- QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
- env.insert("LANG", "C");
- env.insert("LC_MESSAGES", "C");
- env.insert("LC_ALL", "C");
- pacman.setProcessEnvironment(env);
+ pacman.setProcessEnvironment(getEnv());
pacman.start("pacman " + args);
pacman.waitForFinished();
@@ -182,10 +161,7 @@ QByteArray UnixCommand::performAURCommand(const QString &args)
QByteArray result("");
QProcess aur;
- QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
- env.insert("LANG", "C");
- env.insert("LC_MESSAGES", "C");
- aur.setProcessEnvironment(env);
+ aur.setProcessEnvironment(getEnv());
aur.start(StrConstants::getForeignRepositoryToolName() + " " + args);
aur.waitForFinished();
@@ -202,11 +178,8 @@ QByteArray UnixCommand::getAURPackageList(const QString &searchString)
{
QByteArray result("");
QProcess aur;
- QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
- env.insert("LANG", "C");
- env.insert("LC_MESSAGES", "C");
- aur.setProcessEnvironment(env);
+ aur.setProcessEnvironment(getEnv());
if (UnixCommand::getLinuxDistro() == ectn_KAOS)
aur.start(StrConstants::getForeignRepositoryToolName() + " -s " + searchString);
@@ -341,8 +314,7 @@ bool UnixCommand::isPkgfileInstalled()
{
QProcess pkgfile;
- QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
- pkgfile.setProcessEnvironment(env);
+ pkgfile.setProcessEnvironment(getEnv());
pkgfile.start("pkgfile -V");
pkgfile.waitForFinished();
@@ -359,10 +331,7 @@ QByteArray UnixCommand::getPackageContentsUsingPkgfile(const QString &pkgName)
{
QByteArray result("");
QProcess pkgfile;
- QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
- env.insert("LANG", "C");
- env.insert("LC_MESSAGES", "C");
- pkgfile.setProcessEnvironment(env);
+ pkgfile.setProcessEnvironment(getEnv());
pkgfile.start("pkgfile -l " + pkgName);
pkgfile.waitForFinished();
@@ -397,10 +366,7 @@ QString UnixCommand::getPackageByFilePath(const QString &filePath)
QStringList UnixCommand::getFilePathSuggestions(const QString &file)
{
QProcess slocate;
- QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
- env.insert("LANG", "C");
- env.insert("LC_MESSAGES", "C");
- slocate.setProcessEnvironment(env);
+ slocate.setProcessEnvironment(getEnv());
slocate.start("slocate -l 8 " + file);
slocate.waitForFinished();
@@ -467,10 +433,7 @@ QString UnixCommand::getSystemArchitecture()
{
QStringList slParam;
QProcess proc;
- QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
- env.insert("LANG", "C");
- env.insert("LC_MESSAGES", "C");
- proc.setProcessEnvironment(env);
+ proc.setProcessEnvironment(getEnv());
slParam << "-m";
proc.start("uname", slParam);
@@ -524,10 +487,7 @@ bool UnixCommand::hasInternetConnection()
bool UnixCommand::doInternetPingTest()
{
QProcess ping;
- QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
- env.insert("LANG", "C");
- env.insert("LC_MESSAGES", "C");
- ping.setProcessEnvironment(env);
+ ping.setProcessEnvironment(getEnv());
if (UnixCommand::getLinuxDistro() == ectn_MOOOSLINUX)
ping.start("torsocks ping -c 1 -W 3 www.google.com");
@@ -549,10 +509,7 @@ bool UnixCommand::isKtsussVersionOK()
{
QProcess proc;
- QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
- env.insert("LANG", "C");
- env.insert("LC_MESSAGES", "C");
- proc.setProcessEnvironment(env);
+ proc.setProcessEnvironment(getEnv());
QStringList slParam("-v");
proc.start("ktsuss", slParam );
@@ -621,10 +578,7 @@ void UnixCommand::removeTemporaryFiles()
void UnixCommand::execCommand(const QString &pCommand)
{
QProcess p;
- QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
- env.insert("LANG", "C");
- env.insert("LC_MESSAGES", "C");
- p.setProcessEnvironment(env);
+ p.setProcessEnvironment(getEnv());
p.start(WMHelper::getSUCommand() + "\"" + pCommand + "\"");
p.waitForFinished(-1);
@@ -637,10 +591,7 @@ void UnixCommand::execCommand(const QString &pCommand)
bool UnixCommand::isTextFile(const QString& fileName)
{
QProcess *p = new QProcess();
- QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
- env.insert("LANG", "C");
- env.insert("LC_MESSAGES", "C");
- p->setProcessEnvironment(env);
+ p->setProcessEnvironment(getEnv());
QStringList s(fileName);
p->start( "file", s );
@@ -760,10 +711,7 @@ UnixCommand::UnixCommand(QObject *parent): QObject()
m_process = new QProcess(parent);
m_terminal = new Terminal(parent, SettingsManager::getTerminal());
- QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
- env.insert("LANG", "C");
- env.insert("LC_MESSAGES", "C");
- m_process->setProcessEnvironment(env);
+ m_process->setProcessEnvironment(getEnv());
QObject::connect(m_process, SIGNAL( started() ), this,
SIGNAL( started() ));
diff --git a/src/unixcommand.h b/src/unixcommand.h
index 3105307..89b0f31 100644
--- a/src/unixcommand.h
+++ b/src/unixcommand.h
@@ -54,6 +54,7 @@ private:
Terminal *m_terminal;
QProcess *m_process;
static QFile *m_temporaryFile;
+ static QProcessEnvironment *m_env;
public:
UnixCommand(QObject *parent);
@@ -114,6 +115,20 @@ public:
return (uid == 0); //Returns TRUE if root is running Octopi
}
+ static QProcessEnvironment const& getEnv(){
+ if (!m_env)
+ {
+ m_env = new QProcessEnvironment(QProcessEnvironment::systemEnvironment());
+ m_env->remove("LANG");
+ m_env->remove("LC_MESSAGES");
+ m_env->remove("LC_ALL");
+ m_env->insert("LANG", "C");
+ m_env->insert("LC_MESSAGES", "C");
+ m_env->insert("LC_ALL", "C");
+ }
+ return *m_env;
+ }
+
static QFile* getTemporaryFile(){
QTime time = QTime::currentTime();
qsrand(time.minute() + time.second() + time.msec());
--
2.1.1

View File

@@ -1,27 +1,25 @@
From a0d6e7f38f1af68cd0f3aa88edc0c98463458fbb Mon Sep 17 00:00:00 2001
From 49f2c29096f5de952c9c159baf2d9596e2ac3c26 Mon Sep 17 00:00:00 2001
From: Ray Donnelly <mingw.android@gmail.com>
Date: Thu, 27 Feb 2014 17:06:21 +0000
Subject: [PATCH 2/5] Define QT_WA() as unicode
Date: Sat, 27 Sep 2014 15:02:24 +0100
Subject: [PATCH 03/10] Define QT_WA
---
src/QtSolutions/qtlockedfile_win.cpp | 4 ++++
1 file changed, 4 insertions(+)
src/QtSolutions/qtlockedfile_win.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/QtSolutions/qtlockedfile_win.cpp b/src/QtSolutions/qtlockedfile_win.cpp
index 4cd2003..6aa3921 100755
index 4cd2003..c28aae8 100755
--- a/src/QtSolutions/qtlockedfile_win.cpp
+++ b/src/QtSolutions/qtlockedfile_win.cpp
@@ -45,6 +45,10 @@
@@ -45,6 +45,8 @@
// Maximum number of concurrent read locks. Must not be greater than MAXIMUM_WAIT_OBJECTS
#define MAX_READERS MAXIMUM_WAIT_OBJECTS
+#if QT_VERSION >= 0x050000
+#define QT_WA(unicode, ansi) unicode
+#endif
+
Qt::HANDLE QtLockedFile::getMutexHandle(int idx, bool doCreate)
{
if (mutexname.isEmpty()) {
--
2.1.0
2.1.1

View File

@@ -1,213 +0,0 @@
From 187473cb1f86e76615cee40c8269051bc05f3c5b Mon Sep 17 00:00:00 2001
From: Ray Donnelly <mingw.android@gmail.com>
Date: Thu, 27 Feb 2014 17:07:39 +0000
Subject: [PATCH 3/5] Win32: Use WTSEnumerateProcesses() instead of ps
Use Q_PIDs instead of ints for process ids too.
Work in progress.
---
octopi.pro | 2 +
src/QtSolutions/qtlockedfile_win.cpp | 2 -
src/utils.cpp | 105 +++++++++++++++++++++++++++++++++--
src/utils.h | 6 +-
4 files changed, 104 insertions(+), 11 deletions(-)
diff --git a/octopi.pro b/octopi.pro
index d9865f6..a87f550 100644
--- a/octopi.pro
+++ b/octopi.pro
@@ -134,6 +134,8 @@ TRANSLATIONS += resources/translations/octopi_pt_BR.ts \
resources/translations/octopi_ja.ts \
resources/translations/octopi_eu.ts
+win32: LIBS += -lwtsapi32
+
greaterThan(QT_MAJOR_VERSION, 4){
TRANSLATIONS += resources/translations/octopi_ast.ts
}
diff --git a/src/QtSolutions/qtlockedfile_win.cpp b/src/QtSolutions/qtlockedfile_win.cpp
index 6aa3921..c28aae8 100755
--- a/src/QtSolutions/qtlockedfile_win.cpp
+++ b/src/QtSolutions/qtlockedfile_win.cpp
@@ -45,9 +45,7 @@
// Maximum number of concurrent read locks. Must not be greater than MAXIMUM_WAIT_OBJECTS
#define MAX_READERS MAXIMUM_WAIT_OBJECTS
-#if QT_VERSION >= 0x050000
#define QT_WA(unicode, ansi) unicode
-#endif
Qt::HANDLE QtLockedFile::getMutexHandle(int idx, bool doCreate)
{
diff --git a/src/utils.cpp b/src/utils.cpp
index c1edca6..e570068 100644
--- a/src/utils.cpp
+++ b/src/utils.cpp
@@ -35,6 +35,12 @@
#include <QDomDocument>
#include <QProcess>
#include <QTimer>
+#include <QDebug>
+
+#if defined(Q_OS_WIN)
+#include <windows.h>
+#include <wtsapi32.h>
+#endif
/*
* The needed constructor
@@ -77,6 +83,92 @@ void utils::ProcessWrapper::onProcessStarted()
emit startedTerminal();
}
+QStringList Ps_To_Q_PIDs(QString ps_args)
+{
+ QStringList list;
+#if defined(Q_OS_WIN)
+ QString ps_name;
+ QStringList in_pids;
+ if (ps_args.startsWith(QLatin1String("ps -o pid -C")))
+ {
+ ps_name = ps_args.remove(QLatin1String("ps -o pid -C")).trimmed();
+ }
+ else if (ps_args.startsWith(QLatin1String("ps -O cmd --ppid")))
+ {
+ in_pids.append(ps_args.remove("ps -O cmd --ppid").trimmed());
+ }
+ else if (ps_args.startsWith(QLatin1String("ps -p")))
+ {
+ QString temp = ps_args.remove("ps -p").trimmed();
+ QTextStream pid_args(&temp);
+ while (!pid_args.atEnd())
+ {
+ QString a_pid;
+ pid_args >> a_pid;
+ in_pids.append(a_pid);
+ }
+ }
+ WTS_PROCESS_INFO* pProcessInfo = 0;
+ DWORD Count;
+ if(WTSEnumerateProcesses(WTS_CURRENT_SERVER_HANDLE, 0, 1, &pProcessInfo, &Count))
+ {
+ for(DWORD i = 0; i < Count; i++)
+ {
+ qDebug() << pProcessInfo[i].pProcessName << "\tPID="
+ << pProcessInfo[i].ProcessId << "\tSess="
+ << pProcessInfo[i].SessionId;
+ QString process_name = QString::fromWCharArray(pProcessInfo[i].pProcessName);
+ if (!ps_name.isEmpty())
+ {
+ list.append("PID");
+ if (ps_name == process_name)
+ {
+ list.append(QString::number(pProcessInfo[i].ProcessId));
+ return list;
+ }
+ }
+ }
+// BOOL WINAPI EnumProcesses(
+// _Out_ DWORD *pProcessIds,
+// _In_ DWORD cb,
+// _Out_ DWORD *pBytesReturned
+// );
+ }
+#else
+ QProcess proc;
+ proc.start(ps_args);
+ proc.waitForFinished(-1);
+ QString out = proc.readAll();
+ proc.close();
+ QStringList list = out.split("\n", QString::SkipEmptyParts);
+#endif
+ return list;
+}
+
+/*
+ * Returns the _PROCESS_INFORMATION* on Windows, does nothing on
+ * others.
+ */
+Q_PID int_to_Q_PID(int in_pid)
+{
+#if defined(Q_OS_WIN)
+ Q_UNUSED(in_pid);
+ return 0;
+#else
+ return in_pid
+#endif
+}
+
+int Q_PID_to_int(Q_PID in_pid)
+{
+#if defined(Q_OS_WIN)
+ Q_UNUSED(in_pid);
+ return 1;
+#else
+ return in_pid;
+#endif
+}
+
/*
* We need this to search for the SH process pid (which spaws AUR tool)
*/
@@ -109,7 +201,8 @@ void utils::ProcessWrapper::onSingleShot()
{
int candidatePid = list.at(c).trimmed().toInt();
- if (candidatePid < m_pidTerminal) continue;
+ // This if appears to be being used to determine if candidatePid is a child of m_pidTerminal?!
+ if (candidatePid < Q_PID_to_int(m_pidTerminal)) continue;
QString cmd = QString("ps -O cmd --ppid %1").arg(candidatePid);
proc.start(cmd);
@@ -131,8 +224,8 @@ void utils::ProcessWrapper::onSingleShot()
if (candidatePid < candidatePid2)
{
- m_pidSH = candidatePid;
- m_pidAUR = candidatePid2;
+ m_pidSH = int_to_Q_PID(candidatePid);
+ m_pidAUR = int_to_Q_PID(candidatePid2);
m_timer->start();
return;
@@ -155,8 +248,8 @@ void utils::ProcessWrapper::onSingleShot()
if (candidatePid < candidatePid2)
{
- m_pidSH = candidatePid;
- m_pidAUR = candidatePid2;
+ m_pidSH = int_to_Q_PID(candidatePid);
+ m_pidAUR = int_to_Q_PID(candidatePid2);
m_timer->start();
return;
@@ -175,7 +268,7 @@ void utils::ProcessWrapper::onSingleShot()
void utils::ProcessWrapper::onTimer()
{
QProcess proc;
- QString cmd = QString("ps -p %1 %2").arg(m_pidSH).arg(m_pidAUR);
+ QString cmd = QString("ps -p %1 %2").arg(Q_PID_to_int(m_pidSH)).arg(Q_PID_to_int(m_pidAUR));
//std::cout << "PIDS: " << cmd.toLatin1().data() << "\n" << std::endl;
diff --git a/src/utils.h b/src/utils.h
index 54a8edc..a1f79a9 100644
--- a/src/utils.h
+++ b/src/utils.h
@@ -34,9 +34,9 @@ class ProcessWrapper : public QObject
Q_OBJECT
private:
- int m_pidTerminal;
- int m_pidSH;
- int m_pidAUR;
+ Q_PID m_pidTerminal;
+ Q_PID m_pidSH;
+ Q_PID m_pidAUR;
QProcess *m_process;
QTimer *m_timer;
QTimer *m_timerSingleShot;
--
2.1.0

View File

@@ -0,0 +1,48 @@
From 77c8fd4a2f7a6f5f6bcb46193d2af395b21a1e7d Mon Sep 17 00:00:00 2001
From: Ray Donnelly <mingw.android@gmail.com>
Date: Sat, 27 Sep 2014 15:31:32 +0100
Subject: [PATCH 04/10] MSYS2: Add ectn_MSYS2 as a LinuxDistro
---
src/unixcommand.cpp | 4 ++++
src/unixcommand.h | 2 +-
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/unixcommand.cpp b/src/unixcommand.cpp
index 6ab57b9..c319796 100644
--- a/src/unixcommand.cpp
+++ b/src/unixcommand.cpp
@@ -867,6 +867,9 @@ QStringList UnixCommand::getIgnorePkg()
LinuxDistro UnixCommand::getLinuxDistro()
{
static LinuxDistro ret;
+#if defined(Q_OS_WIN)
+ ret = ectn_MSYS2;
+#else
static bool firstTime = true;
if (firstTime)
@@ -926,6 +929,7 @@ LinuxDistro UnixCommand::getLinuxDistro()
file.close();
}
}
+#endif
return ret;
}
diff --git a/src/unixcommand.h b/src/unixcommand.h
index 89b0f31..9efebd2 100644
--- a/src/unixcommand.h
+++ b/src/unixcommand.h
@@ -37,7 +37,7 @@ enum CommandExecuting { ectn_NONE, ectn_MIRROR_CHECK, ectn_SYNC_DATABASE,
ectn_RUN_IN_TERMINAL };
enum LinuxDistro { ectn_ANTERGOS, ectn_ARCHBANGLINUX, ectn_ARCHBSD, ectn_ARCHLINUX, ectn_CHAKRA,
- ectn_KAOS, ectn_MANJAROLINUX, ectn_MOOOSLINUX, ectn_NETRUNNER, ectn_UNKNOWN };
+ ectn_KAOS, ectn_MANJAROLINUX, ectn_MOOOSLINUX, ectn_NETRUNNER, ectn_MSYS2, ectn_UNKNOWN };
//Forward class declarations.
class QString;
--
2.1.1

View File

@@ -1,44 +0,0 @@
From 658957a94f2c290bbc180f24aeafbca4ac576d1f Mon Sep 17 00:00:00 2001
From: Ray Donnelly <mingw.android@gmail.com>
Date: Thu, 27 Feb 2014 23:21:00 +0000
Subject: [PATCH 4/5] Win32: Add some path checks to sh.exe as getSUCommand()
for _WIN32
Relative path, working directory and then some hardcoded paths are
checked.
---
src/wmhelper.cpp | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/src/wmhelper.cpp b/src/wmhelper.cpp
index 187087e..6ea6fa2 100644
--- a/src/wmhelper.cpp
+++ b/src/wmhelper.cpp
@@ -292,6 +292,24 @@ QString WMHelper::getGKSUCommand(){
QString WMHelper::getSUCommand(){
QString result(ctn_NO_SU_COMMAND);
+#if defined(_WIN32)
+ QString testPath = QCoreApplication::applicationDirPath() + QLatin1String("/../../bin/sh.exe");
+ if (QFile::exists(testPath))
+ {
+ return testPath + QLatin1String(" -c ");
+ }
+ /* For use when hacking on this, could remove finally. */
+ testPath = QDir::currentPath() + QLatin1String("/sh.exe");
+ if (QFile::exists(testPath))
+ {
+ return testPath + QLatin1String(" -c ");
+ }
+ // Return a semi reasonable default.
+#if Q_OS_WIN32
+ return QLatin1String("/msys32/usr/bin/sh.exe -c ");
+#else
+ return QLatin1String("/msys64/usr/bin/sh.exe -c ");
+#endif
if (isXFCERunning() && (UnixCommand::hasTheExecutable(ctn_GKSU_2))){
result = getGKSUCommand();
}
--
2.1.0

View File

@@ -0,0 +1,78 @@
From 1945068f7841780f3d1fa7522099bb965be86bab Mon Sep 17 00:00:00 2001
From: Ray Donnelly <mingw.android@gmail.com>
Date: Sat, 27 Sep 2014 15:38:23 +0100
Subject: [PATCH 05/10] MSYS2: Add getMSYS2Root()
Because MSYS2 can be installed anywhere, the real location
is determined using a relative path from octopi.exe
---
src/unixcommand.cpp | 1 +
src/unixcommand.h | 19 +++++++++++++++++++
2 files changed, 20 insertions(+)
diff --git a/src/unixcommand.cpp b/src/unixcommand.cpp
index c319796..6a908b2 100644
--- a/src/unixcommand.cpp
+++ b/src/unixcommand.cpp
@@ -37,6 +37,7 @@
QFile *UnixCommand::m_temporaryFile = 0;
QProcessEnvironment *UnixCommand::m_env = 0;
+QString UnixCommand::m_msys2Root;
/*
* Executes given command and returns the StandardError Output.
diff --git a/src/unixcommand.h b/src/unixcommand.h
index 9efebd2..612acbe 100644
--- a/src/unixcommand.h
+++ b/src/unixcommand.h
@@ -24,6 +24,7 @@
#include <QObject>
#include <QProcess>
#include <QTime>
+#include <QCoreApplication>
#include <unistd.h>
#include "package.h"
@@ -55,6 +56,7 @@ private:
QProcess *m_process;
static QFile *m_temporaryFile;
static QProcessEnvironment *m_env;
+ static QString m_msys2Root;
public:
UnixCommand(QObject *parent);
@@ -115,6 +117,14 @@ public:
return (uid == 0); //Returns TRUE if root is running Octopi
}
+ static QString getMSYS2Root(){
+ if (m_msys2Root.isEmpty())
+ {
+ m_msys2Root = QDir::cleanPath(QCoreApplication::applicationDirPath() + QLatin1String("/../.."));
+ }
+ return m_msys2Root;
+ }
+
static QProcessEnvironment const& getEnv(){
if (!m_env)
{
@@ -125,6 +135,15 @@ public:
m_env->insert("LANG", "C");
m_env->insert("LC_MESSAGES", "C");
m_env->insert("LC_ALL", "C");
+ if (UnixCommand::getLinuxDistro() == ectn_MSYS2)
+ {
+ getMSYS2Root();
+ QString path = m_env->value(QLatin1String("PATH"));
+ QString msys2_usr_bin = QDir::cleanPath(m_msys2Root + "\\usr\\bin");
+ path.prepend(msys2_usr_bin+QLatin1Char(';'));
+ _wputenv_s(L"PATH", path.toStdWString().c_str());
+ m_env->insert("PATH", path);
+ }
}
return *m_env;
}
--
2.1.1

View File

@@ -0,0 +1,51 @@
From 2f8a0cceff1983365b65396b52c52a24ea77f74c Mon Sep 17 00:00:00 2001
From: Ray Donnelly <mingw.android@gmail.com>
Date: Sat, 27 Sep 2014 15:40:36 +0100
Subject: [PATCH 06/10] MSYS2: hasPacmanDatabase() getMSYS2Root() changes
---
src/package.cpp | 11 ++++++++++-
src/package.h | 5 +++--
2 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/src/package.cpp b/src/package.cpp
index 3795e54..648edb6 100644
--- a/src/package.cpp
+++ b/src/package.cpp
@@ -1210,7 +1210,16 @@ bool Package::hasPacmanDatabase()
if (!done)
{
- QFile f(ctn_PACMAN_CORE_DB_FILE);
+ QString dbFile;
+ if (UnixCommand::getLinuxDistro() == ectn_MSYS2)
+ {
+ dbFile = UnixCommand::getMSYS2Root() + ctn_PACMAN_MSYS2_DB_FILE;
+ }
+ else
+ {
+ dbFile = ctn_PACMAN_CORE_DB_FILE;
+ }
+ QFile f(dbFile);
answer = f.exists();
done = true;
}
diff --git a/src/package.h b/src/package.h
index 173f714..cb2b4f0 100644
--- a/src/package.h
+++ b/src/package.h
@@ -40,8 +40,9 @@ const QString ctn_STRING_RELEASES = "(alfa|beta|rc|pre|patch|^[0-9]{8}$|(^[rR]
const QString ctn_DATE_RELEASE = "^[0-9]{8}$";
const QString ctn_NO_MATCH = "not found!";
-const QString ctn_PACMAN_DATABASE_DIR = "/var/lib/pacman";
-const QString ctn_PACMAN_CORE_DB_FILE = "/var/lib/pacman/sync/core.db";
+const QString ctn_PACMAN_DATABASE_DIR = "/var/lib/pacman";
+const QString ctn_PACMAN_CORE_DB_FILE = "/var/lib/pacman/sync/core.db";
+const QString ctn_PACMAN_MSYS2_DB_FILE = "/var/lib/pacman/sync/msys.db";
enum PackageStatus { ectn_INSTALLED, ectn_NON_INSTALLED, ectn_OUTDATED, ectn_NEWER,
ectn_FOREIGN, ectn_FOREIGN_OUTDATED };
--
2.1.1

View File

@@ -0,0 +1,88 @@
From e17b51b890abb845900a5fd9d68d430f587fc7f2 Mon Sep 17 00:00:00 2001
From: Ray Donnelly <mingw.android@gmail.com>
Date: Sat, 27 Sep 2014 15:42:50 +0100
Subject: [PATCH 07/10] MSYS2: openRootTerminal(), getSUCommand(),
isRootRunning()
MSYS2 behaviour changes for these:
openRootTerminal runs msys2_shell.bat
getSUCommand returns "sh.exe -c "
isRootRunning returns false
---
src/terminal.cpp | 7 ++++++-
src/unixcommand.h | 6 ++++++
src/wmhelper.cpp | 5 ++++-
src/wmhelper.h | 2 ++
4 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/src/terminal.cpp b/src/terminal.cpp
index 5085007..0495acc 100644
--- a/src/terminal.cpp
+++ b/src/terminal.cpp
@@ -198,7 +198,12 @@ void Terminal::openRootTerminal()
{
if (m_selectedTerminal == ctn_AUTOMATIC)
{
- if (UnixCommand::getLinuxDistro() == ectn_MOOOSLINUX && UnixCommand::hasTheExecutable(ctn_RXVT_TERMINAL))
+ if (UnixCommand::getLinuxDistro() == ectn_MSYS2)
+ {
+ QString cmd = ctn_MSYS2_SH + UnixCommand::getMSYS2Root() + QLatin1String("/msys2_shell.bat");
+ m_process->startDetached(cmd);
+ }
+ else if (UnixCommand::getLinuxDistro() == ectn_MOOOSLINUX && UnixCommand::hasTheExecutable(ctn_RXVT_TERMINAL))
{
QString cmd = WMHelper::getSUCommand() + " \"" + ctn_RXVT_TERMINAL +
" -name Urxvt -title Urxvt \"";
diff --git a/src/unixcommand.h b/src/unixcommand.h
index 612acbe..6450fae 100644
--- a/src/unixcommand.h
+++ b/src/unixcommand.h
@@ -112,10 +112,16 @@ public:
static bool hasTheExecutable( const QString& exeName );
static bool isAppRunning(const QString &appName, bool justOneInstance = false);
+#if defined(_WIN32)
+ static bool isRootRunning(){
+ return false;
+ }
+#else
static bool isRootRunning(){
int uid = geteuid();
return (uid == 0); //Returns TRUE if root is running Octopi
}
+#endif
static QString getMSYS2Root(){
if (m_msys2Root.isEmpty())
diff --git a/src/wmhelper.cpp b/src/wmhelper.cpp
index 187087e..4ce7e1a 100644
--- a/src/wmhelper.cpp
+++ b/src/wmhelper.cpp
@@ -292,7 +292,10 @@ QString WMHelper::getGKSUCommand(){
QString WMHelper::getSUCommand(){
QString result(ctn_NO_SU_COMMAND);
- if (isXFCERunning() && (UnixCommand::hasTheExecutable(ctn_GKSU_2))){
+ if (UnixCommand::getLinuxDistro() == ectn_MSYS2){
+ return QLatin1String("sh.exe -c ");
+ }
+ else if (isXFCERunning() && (UnixCommand::hasTheExecutable(ctn_GKSU_2))){
result = getGKSUCommand();
}
else if (isKDERunning() && UnixCommand::hasTheExecutable(ctn_KDESU)){
diff --git a/src/wmhelper.h b/src/wmhelper.h
index e96e0b4..ae9405c 100644
--- a/src/wmhelper.h
+++ b/src/wmhelper.h
@@ -25,6 +25,8 @@
const QString ctn_NO_SU_COMMAND("none");
const QString ctn_ROOT_SH("/bin/sh -c ");
+const QString ctn_MSYS2_SH("cmd.exe /c ");
+
const QString ctn_KDESU("kdesu");
const QString ctn_KDE_DESKTOP("kwin");
const QString ctn_KDE_EDITOR("kwrite");
--
2.1.1

View File

@@ -0,0 +1,144 @@
From 39b67c44cf441cbe19ea67ada31dcdf6039da8b2 Mon Sep 17 00:00:00 2001
From: Ray Donnelly <mingw.android@gmail.com>
Date: Sat, 27 Sep 2014 15:44:22 +0100
Subject: [PATCH 08/10] MSYS2: Process id changes (WIP)
---
notifier/octopi-notifier/octopi-notifier.pro | 2 +
src/utils.cpp | 77 ++++++++++++++++++++++++++++
2 files changed, 79 insertions(+)
diff --git a/notifier/octopi-notifier/octopi-notifier.pro b/notifier/octopi-notifier/octopi-notifier.pro
index fc942b1..262822a 100644
--- a/notifier/octopi-notifier/octopi-notifier.pro
+++ b/notifier/octopi-notifier/octopi-notifier.pro
@@ -49,6 +49,8 @@ HEADERS += \
../../src/utils.h \
../../src/transactiondialog.h
+win32: LIBS += -lwtsapi32
+
FORMS += ../../ui/transactiondialog.ui
RESOURCES += \
diff --git a/src/utils.cpp b/src/utils.cpp
index 04ad195..53e890c 100644
--- a/src/utils.cpp
+++ b/src/utils.cpp
@@ -35,6 +35,12 @@
#include <QDomDocument>
#include <QProcess>
#include <QTimer>
+#include <QDebug>
+
+#if defined(Q_OS_WIN)
+#include <windows.h>
+#include <wtsapi32.h>
+#endif
/*
* The needed constructor
@@ -77,8 +83,63 @@ void utils::ProcessWrapper::onProcessStarted()
emit startedTerminal();
}
+#if defined(Q_OS_WIN)
+QString Ps_To_Q_PIDs(QString ps_args)
+{
+ QString ps_name;
+ QString out;
+ QStringList in_pids;
+ if (ps_args.startsWith(QLatin1String("ps -o pid -C")))
+ {
+ ps_name = ps_args.remove(QLatin1String("ps -o pid -C")).trimmed();
+ }
+ else if (ps_args.startsWith(QLatin1String("ps -O cmd --ppid")))
+ {
+ in_pids.append(ps_args.remove("ps -O cmd --ppid").trimmed());
+ }
+ else if (ps_args.startsWith(QLatin1String("ps -p")))
+ {
+ QString temp = ps_args.remove("ps -p").trimmed();
+ QTextStream pid_args(&temp);
+ while (!pid_args.atEnd())
+ {
+ QString a_pid;
+ pid_args >> a_pid;
+ in_pids.append(a_pid);
+ }
+ }
+ WTS_PROCESS_INFO* pProcessInfo = 0;
+ DWORD Count;
+ if(WTSEnumerateProcesses(WTS_CURRENT_SERVER_HANDLE, 0, 1, &pProcessInfo, &Count))
+ {
+ for(DWORD i = 0; i < Count; i++)
+ {
+ qDebug() << pProcessInfo[i].pProcessName << "\tPID="
+ << pProcessInfo[i].ProcessId << "\tSess="
+ << pProcessInfo[i].SessionId;
+ QString process_name = QString::fromWCharArray(pProcessInfo[i].pProcessName);
+ if (!ps_name.isEmpty())
+ {
+ out += QLatin1String("PID\n");
+ if (ps_name == process_name)
+ {
+ out += QString::number(pProcessInfo[i].ProcessId) + QLatin1String("\n");
+ return out;
+ }
+ }
+ }
+// BOOL WINAPI EnumProcesses(
+// _Out_ DWORD *pProcessIds,
+// _In_ DWORD cb,
+// _Out_ DWORD *pBytesReturned
+// );
+ }
+ return out;
+}
+#else /* !defined(Q_OS_WIN) */
QString Ps_To_Q_PIDs(QString ps_args)
{
+ QStringList list;
QString out;
QProcess proc;
proc.start(ps_args);
@@ -87,6 +148,7 @@ QString Ps_To_Q_PIDs(QString ps_args)
proc.close();
return out;
}
+#endif /* defined(Q_OS_WIN) */
QStringList Ps_To_Q_PIDs_SL(QString ps_args)
{
@@ -95,6 +157,20 @@ QStringList Ps_To_Q_PIDs_SL(QString ps_args)
return list;
}
+#if defined(Q_OS_WIN)
+Q_PID int_to_Q_PID(int in_pid)
+{
+ Q_UNUSED(in_pid);
+ return 0;
+}
+
+int Q_PID_to_int(Q_PID in_pid)
+{
+ Q_UNUSED(in_pid);
+ return 1;
+}
+
+#else
/*
* Returns the _PROCESS_INFORMATION* on Windows, does nothing on
* others.
@@ -108,6 +184,7 @@ int Q_PID_to_int(Q_PID in_pid)
{
return in_pid;
}
+#endif
/*
* We need this to search for the SH process pid (which spaws AUR tool)
--
2.1.1

View File

@@ -1,7 +1,7 @@
From c8efce3b7bc5f35e32dbfb41265102fd80e8f2fc Mon Sep 17 00:00:00 2001
From 0669400a5a6d03c1952058a243eda07e421d0af3 Mon Sep 17 00:00:00 2001
From: Ray Donnelly <mingw.android@gmail.com>
Date: Sun, 21 Sep 2014 13:49:06 +0100
Subject: [PATCH 5/5] Hack around crash on files tab due to null pointer
Date: Sat, 27 Sep 2014 15:44:55 +0100
Subject: [PATCH 09/10] MSYS2: Hack around crash in refreshTabFiles
---
src/mainwindow_refresh.cpp | 5 ++++-
@@ -24,5 +24,5 @@ index a94bfe7..ad1b92f 100644
lastItem = item;
--
2.1.0
2.1.1

View File

@@ -5,7 +5,7 @@ _realname=octopi
pkgname="${MINGW_PACKAGE_PREFIX}-${_realname}-git"
#_qmake=${MINGW_PREFIX}/bin/qmake
_qmake=${MINGW_PREFIX}/qt5-static/bin/qmake
pkgver=r664.ab036cc
pkgver=r669.3a5a95b
pkgrel=1
pkgdesc="a powerful Pacman frontend using Qt libs"
arch=('any')
@@ -19,17 +19,25 @@ _gitroot="git://github.com/aarnt/octopi.git"
_gitname="octopi"
options=('!debug' 'strip')
source=("${_gitname}"::"${_gitroot}"
"0001-Hack-isRootRunning-to-always-be-false-for-_WIN32.patch"
"0002-Define-QT_WA-as-unicode.patch"
"0003-Win32-Use-WTSEnumerateProcesses-instead-of-ps.patch"
"0004-Win32-Add-some-path-checks-to-sh.exe-as-getSUCommand.patch"
"0005-Hack-around-crash-on-files-tab-due-to-null-pointer.patch")
# "old.0004-Hack-out-ProcessWrapper-onSingleShot-to-do-nothing-o.patch"
"0001-Use-Q_PID-instead-of-int-reducing-QProcess-repititio.patch"
"0002-Use-a-shared-QProcessEnvironment.patch"
"0003-Define-QT_WA.patch"
"0004-MSYS2-Add-ectn_MSYS2-as-a-LinuxDistro.patch"
"0005-MSYS2-Add-getMSYS2Root.patch"
"0006-MSYS2-hasPacmanDatabase-getMSYS2Root-changes.patch"
"0007-MSYS2-openRootTerminal-getSUCommand-isRootRunning.patch"
"0008-MSYS2-Process-id-changes-WIP.patch"
"0009-MSYS2-Hack-around-crash-in-refreshTabFiles.patch")
md5sums=('SKIP'
'3bbbab131226b676e98038d5b6a4659d'
'8635ce41ec1433eba9092f4048416c7f'
'c4ad0455ecf23a58605989d197a612ec'
'60e34b0dbff63a9d8e00edb2f7c14338')
'fcdd32a9572ffced35f57f7f46db1820'
'd262cdaa522b0e59691cd0a525530c8b'
'11e8baa5f61075d38917fc01f42ecb8c'
'98d19f39fee5e12a8991e22ecfc3c4b1'
'aa445f3a99c7b18ce94c258439e517c5'
'7a1d2a340764ecec0b0cbc1fe68cf6b2'
'92ad3ec27964331c7b89283a30e65736'
'173b6b8d21151f3f31b850ef38bc6658'
'9b6e01ebbabc7158f91cdbeed7112faf')
pkgver() {
cd "$srcdir/$_realname"
@@ -39,12 +47,16 @@ pkgver() {
prepare() {
cd "$srcdir/$_gitname"
git am "${srcdir}"/0001-Hack-isRootRunning-to-always-be-false-for-_WIN32.patch
git am "${srcdir}"/0002-Define-QT_WA-as-unicode.patch
git am "${srcdir}"/0003-Win32-Use-WTSEnumerateProcesses-instead-of-ps.patch
# git am "${srcdir}"/old.0004-Hack-out-ProcessWrapper-onSingleShot-to-do-nothing-o.patch
git am "${srcdir}"/0004-Win32-Add-some-path-checks-to-sh.exe-as-getSUCommand.patch
git am "${srcdir}"/0005-Hack-around-crash-on-files-tab-due-to-null-pointer.patch
git am "${srcdir}"/0001-Use-Q_PID-instead-of-int-reducing-QProcess-repititio.patch
git am "${srcdir}"/0002-Use-a-shared-QProcessEnvironment.patch
git am "${srcdir}"/0003-Define-QT_WA.patch
git am "${srcdir}"/0004-MSYS2-Add-ectn_MSYS2-as-a-LinuxDistro.patch
git am "${srcdir}"/0005-MSYS2-Add-getMSYS2Root.patch
git am "${srcdir}"/0006-MSYS2-hasPacmanDatabase-getMSYS2Root-changes.patch
git am "${srcdir}"/0007-MSYS2-openRootTerminal-getSUCommand-isRootRunning.patch
git am "${srcdir}"/0008-MSYS2-Process-id-changes-WIP.patch
git am "${srcdir}"/0009-MSYS2-Hack-around-crash-in-refreshTabFiles.patch
# git am "${srcdir}"/0010-Debugging.patch
}
build() {