X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fgenversion.cpp;h=f0f746bb05885c09d5bc7b00e9917ce9e29f98ab;hp=946e50002cab28f98d35527f7bac403e63a9c2d0;hb=09515f0300f18490ee1788392a7518a6e1ab5acc;hpb=f824db0e31b54969e0b7fa0b5405b1e9173d482c diff --git a/src/common/genversion.cpp b/src/common/genversion.cpp index 946e5000..f0f746bb 100644 --- a/src/common/genversion.cpp +++ b/src/common/genversion.cpp @@ -44,19 +44,31 @@ int main(int argc, char **argv) { // try to execute git-describe to get a version string QProcess git; git.setWorkingDirectory(gitroot); + #ifdef Q_OS_WIN + git.start("cmd.exe", QStringList() << "/C" << "git" << "describe" << "--long"); + #else git.start("git", QStringList() << "describe" << "--long"); + #endif if(git.waitForFinished(10000)) { QString descr = git.readAllStandardOutput().trimmed(); if(!descr.isEmpty() && !descr.contains("fatal")) { // seems we have a valid git describe string descrver = descr; // check if the workdir is dirty + #ifdef Q_OS_WIN + git.start("cmd.exe", QStringList() << "/C" << "git" << "diff-index" << "--name-only" << "HEAD"); + #else git.start("git", QStringList() << "diff-index" << "--name-only" << "HEAD"); + #endif if(git.waitForFinished(10000)) { if(!git.readAllStandardOutput().isEmpty()) dirty = "*"; } // get a full committish + #ifdef Q_OS_WIN + git.start("cmd.exe", QStringList() << "/C" << "git" << "rev-parse" << "HEAD"); + #else git.start("git", QStringList() << "rev-parse" << "HEAD"); + #endif if(git.waitForFinished(10000)) { committish = git.readAllStandardOutput().trimmed(); } @@ -100,14 +112,24 @@ int main(int argc, char **argv) { verfile.close(); } - // ok, create our version.gen now + // generate the contents for version.gen + QByteArray contents = QString("QString buildinfo = \"%1,%2,%3,%4,%5,%6,%7,%8\";\n") + .arg(basever, descrver, dirty, committish, commitdate, protover, clientneeds, coreneeds) + .toAscii(); + QFile gen(target); - if(!gen.open(QIODevice::WriteOnly | QIODevice::Text)) { + if(!gen.open(QIODevice::ReadWrite | QIODevice::Text)) { qFatal("%s", qPrintable(QString("Could not write %1!").arg(target))); return EXIT_FAILURE; } - gen.write(QString("QString buildinfo = \"%1,%2,%3,%4,%5,%6,%7,%8\";\n") - .arg(basever, descrver, dirty, committish, commitdate, protover, clientneeds, coreneeds).toAscii()); + QByteArray oldContents = gen.readAll(); + if(oldContents != contents) { // only touch the file if something changed + gen.seek(0); + gen.resize(0); + gen.write(contents); + gen.waitForBytesWritten(10000); + } gen.close(); + return EXIT_SUCCESS; }