summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@digia.com>2013-07-23 12:30:45 +0200
committerChristian Kandeler <christian.kandeler@digia.com>2013-07-23 14:39:09 +0200
commit57e4655e07087a50dfbdd3b9d6886c941bb2ff6f (patch)
tree4b5a0a1f7d41ddc6198214f23e20459476ec5adc
parent1670c3af43c7af113b9f6eadc1d30d1e271cfc6c (diff)
downloadqbs-57e4655e07087a50dfbdd3b9d6886c941bb2ff6f.tar.gz
add build option --check-timestamps
Give users the possibility to force qbs to read the physical timestamps instead of using the stored timestamps. Task-number: QBS-303 Change-Id: I6010515b5e8f97ec0b91069cbc7d8a1b0931dce5 Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
-rw-r--r--src/app/qbs/parser/command.cpp3
-rw-r--r--src/app/qbs/parser/commandlineoption.cpp13
-rw-r--r--src/app/qbs/parser/commandlineoption.h8
-rw-r--r--src/app/qbs/parser/commandlineoptionpool.cpp9
-rw-r--r--src/app/qbs/parser/commandlineoptionpool.h1
-rw-r--r--src/app/qbs/parser/commandlineparser.cpp6
-rw-r--r--src/app/qbs/parser/commandlineparser.h1
-rw-r--r--src/lib/buildgraph/executor.cpp8
-rw-r--r--src/lib/tools/buildoptions.cpp19
-rw-r--r--src/lib/tools/buildoptions.h3
-rw-r--r--tests/auto/cmdlineparser/tst_cmdlineparser.cpp2
11 files changed, 72 insertions, 1 deletions
diff --git a/src/app/qbs/parser/command.cpp b/src/app/qbs/parser/command.cpp
index e9624c5c6..a29d8957f 100644
--- a/src/app/qbs/parser/command.cpp
+++ b/src/app/qbs/parser/command.cpp
@@ -209,7 +209,8 @@ static QList<CommandLineOption::Type> buildOptions()
QList<CommandLineOption::Type> options = resolveOptions();
return options << CommandLineOption::KeepGoingOptionType
<< CommandLineOption::ProductsOptionType
- << CommandLineOption::ChangedFilesOptionType;
+ << CommandLineOption::ChangedFilesOptionType
+ << CommandLineOption::ForceTimestampCheckOptionType;
}
QList<CommandLineOption::Type> BuildCommand::supportedOptions() const
diff --git a/src/app/qbs/parser/commandlineoption.cpp b/src/app/qbs/parser/commandlineoption.cpp
index 358ed312a..c9d21c405 100644
--- a/src/app/qbs/parser/commandlineoption.cpp
+++ b/src/app/qbs/parser/commandlineoption.cpp
@@ -335,6 +335,19 @@ QString ForceOption::longRepresentation() const
return QLatin1String("--force");
}
+QString ForceTimeStampCheckOption::description(CommandType command) const
+{
+ Q_UNUSED(command);
+ return Tr::tr("%1\n\tForce timestamp checks.\n"
+ "\tInstead of using the file timestamps that are stored in the build graph, "
+ "retrieve the timestamps from the file system.\n").arg(longRepresentation());
+}
+
+QString ForceTimeStampCheckOption::longRepresentation() const
+{
+ return QLatin1String("--check-timestamps");
+}
+
InstallRootOption::InstallRootOption() : m_useSysroot(false)
{
diff --git a/src/app/qbs/parser/commandlineoption.h b/src/app/qbs/parser/commandlineoption.h
index a6e0612fe..8457ef4cb 100644
--- a/src/app/qbs/parser/commandlineoption.h
+++ b/src/app/qbs/parser/commandlineoption.h
@@ -50,6 +50,7 @@ public:
AllArtifactsOptionType,
InstallRootOptionType, RemoveFirstOptionType, NoBuildOptionType,
ForceOptionType,
+ ForceTimestampCheckOptionType,
LogTimeOptionType
};
@@ -180,6 +181,13 @@ class ForceOption : public OnOffOption
QString longRepresentation() const;
};
+class ForceTimeStampCheckOption : public OnOffOption
+{
+ QString description(CommandType command) const;
+ QString shortRepresentation() const { return QString(); }
+ QString longRepresentation() const;
+};
+
class StringListOption : public CommandLineOption
{
diff --git a/src/app/qbs/parser/commandlineoptionpool.cpp b/src/app/qbs/parser/commandlineoptionpool.cpp
index df13af9f2..a7a0d7ab7 100644
--- a/src/app/qbs/parser/commandlineoptionpool.cpp
+++ b/src/app/qbs/parser/commandlineoptionpool.cpp
@@ -85,6 +85,9 @@ CommandLineOption *CommandLineOptionPool::getOption(CommandLineOption::Type type
case CommandLineOption::ForceOptionType:
option = new ForceOption;
break;
+ case CommandLineOption::ForceTimestampCheckOptionType:
+ option = new ForceTimeStampCheckOption;
+ break;
case CommandLineOption::LogTimeOptionType:
option = new LogTimeOption;
break;
@@ -168,6 +171,12 @@ ForceOption *CommandLineOptionPool::forceOption() const
return static_cast<ForceOption *>(getOption(CommandLineOption::ForceOptionType));
}
+ForceTimeStampCheckOption *CommandLineOptionPool::forceTimestampCheckOption() const
+{
+ return static_cast<ForceTimeStampCheckOption *>(
+ getOption(CommandLineOption::ForceTimestampCheckOptionType));
+}
+
LogTimeOption *CommandLineOptionPool::logTimeOption() const
{
return static_cast<LogTimeOption *>(getOption(CommandLineOption::LogTimeOptionType));
diff --git a/src/app/qbs/parser/commandlineoptionpool.h b/src/app/qbs/parser/commandlineoptionpool.h
index 27de8d60a..46c36a9d9 100644
--- a/src/app/qbs/parser/commandlineoptionpool.h
+++ b/src/app/qbs/parser/commandlineoptionpool.h
@@ -56,6 +56,7 @@ public:
RemoveFirstOption *removeFirstoption() const;
NoBuildOption *noBuildOption() const;
ForceOption *forceOption() const;
+ ForceTimeStampCheckOption *forceTimestampCheckOption() const;
LogTimeOption *logTimeOption() const;
private:
diff --git a/src/app/qbs/parser/commandlineparser.cpp b/src/app/qbs/parser/commandlineparser.cpp
index 551f8f4dc..c81d267ef 100644
--- a/src/app/qbs/parser/commandlineparser.cpp
+++ b/src/app/qbs/parser/commandlineparser.cpp
@@ -169,6 +169,11 @@ bool CommandLineParser::force() const
return d->optionPool.forceOption()->enabled();
}
+bool CommandLineParser::forceTimestampCheck() const
+{
+ return d->optionPool.forceTimestampCheckOption()->enabled();
+}
+
bool CommandLineParser::dryRun() const
{
return d->dryRun();
@@ -477,6 +482,7 @@ void CommandLineParser::CommandLineParserPrivate::setupBuildOptions()
}
buildOptions.setChangedFiles(changedFiles);
buildOptions.setKeepGoing(optionPool.keepGoingOption()->enabled());
+ buildOptions.setForceTimestampCheck(optionPool.forceTimestampCheckOption()->enabled());
const JobsOption * jobsOption = optionPool.jobsOption();
buildOptions.setMaxJobCount(jobsOption->jobCount() > 0
? jobsOption->jobCount() : Preferences(settings).jobs());
diff --git a/src/app/qbs/parser/commandlineparser.h b/src/app/qbs/parser/commandlineparser.h
index 76ea1ee94..16994437c 100644
--- a/src/app/qbs/parser/commandlineparser.h
+++ b/src/app/qbs/parser/commandlineparser.h
@@ -58,6 +58,7 @@ public:
CleanOptions cleanOptions() const;
InstallOptions installOptions() const;
bool force() const;
+ bool forceTimestampCheck() const;
bool dryRun() const;
bool logTime() const;
bool buildBeforeInstalling() const;
diff --git a/src/lib/buildgraph/executor.cpp b/src/lib/buildgraph/executor.cpp
index 596672ebc..cb255c01c 100644
--- a/src/lib/buildgraph/executor.cpp
+++ b/src/lib/buildgraph/executor.cpp
@@ -321,6 +321,14 @@ bool Executor::isUpToDate(Artifact *artifact) const
<< artifact->timestamp.toString();
}
+ if (m_buildOptions.forceTimestampCheck()) {
+ artifact->timestamp = FileInfo(artifact->filePath()).lastModified();
+ if (debug) {
+ m_logger.qbsDebug() << "[UTD] timestamp retrieved from filesystem: "
+ << artifact->timestamp.toString();
+ }
+ }
+
if (!artifact->timestamp.isValid()) {
if (debug)
m_logger.qbsDebug() << "[UTD] invalid timestamp. Out of date.";
diff --git a/src/lib/tools/buildoptions.cpp b/src/lib/tools/buildoptions.cpp
index e836206fb..54b8be547 100644
--- a/src/lib/tools/buildoptions.cpp
+++ b/src/lib/tools/buildoptions.cpp
@@ -46,6 +46,7 @@ public:
int maxJobCount;
bool dryRun;
bool keepGoing;
+ bool forceTimestampCheck;
bool logElapsedTime;
};
@@ -192,6 +193,24 @@ void BuildOptions::setKeepGoing(bool keepGoing)
}
/*!
+ * \brief Returns true if qbs is to use physical timestamps instead of the timestamps stored in the
+ * build graph.
+ * The default is \c false.
+ */
+bool BuildOptions::forceTimestampCheck() const
+{
+ return d->forceTimestampCheck;
+}
+
+/*!
+ * \brief Controls whether qbs should use physical timestamps for up-to-date checks.
+ */
+void BuildOptions::setForceTimestampCheck(bool enabled)
+{
+ d->forceTimestampCheck = enabled;
+}
+
+/*!
* \brief Returns true iff the time the operation takes will be logged.
* The default is \c false.
*/
diff --git a/src/lib/tools/buildoptions.h b/src/lib/tools/buildoptions.h
index 7bf37c66e..4ac1ab3bd 100644
--- a/src/lib/tools/buildoptions.h
+++ b/src/lib/tools/buildoptions.h
@@ -61,6 +61,9 @@ public:
bool keepGoing() const;
void setKeepGoing(bool keepGoing);
+ bool forceTimestampCheck() const;
+ void setForceTimestampCheck(bool enabled);
+
bool logElapsedTime() const;
void setLogElapsedTime(bool log);
diff --git a/tests/auto/cmdlineparser/tst_cmdlineparser.cpp b/tests/auto/cmdlineparser/tst_cmdlineparser.cpp
index 41a09d22a..469e4e51c 100644
--- a/tests/auto/cmdlineparser/tst_cmdlineparser.cpp
+++ b/tests/auto/cmdlineparser/tst_cmdlineparser.cpp
@@ -64,6 +64,7 @@ private slots:
args << "--products" << "blubb";
args << "--changed-files" << "foo,bar" << fileArgs;
args << "--force";
+ args << "--check-timestamps";
CommandLineParser parser;
QVERIFY(parser.parseCommandLine(args, settings.data()));
@@ -73,6 +74,7 @@ private slots:
QCOMPARE(parser.buildOptions().changedFiles().count(), 2);
QVERIFY(parser.buildOptions().keepGoing());
QVERIFY(parser.force());
+ QVERIFY(parser.forceTimestampCheck());
QVERIFY(!parser.logTime());
QCOMPARE(parser.buildConfigurations().count(), 1);