summaryrefslogtreecommitdiff
path: root/apt-private/private-utils.cc
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2017-01-19 11:50:41 +0100
committerDavid Kalnischkies <david@kalnischkies.de>2017-01-19 11:50:41 +0100
commit25a14d4ccfceb2698edce01092bc6a1dbe9fb217 (patch)
tree82eddea84f59333847c594e9fe0a97cd0e4f6176 /apt-private/private-utils.cc
parent2984d7aec37e09b473c7b99f43d20622c25dc99d (diff)
make the moo reproducible
Normal cows moo every time they feel like it and it might be a "moo", "moo!" or "moo?". This is completely unacceptable behaviour in our super cow through as as a superior being it has to show its superiority over the common cows and the meager easter eggs by being fully reproducible! The second version of Chris' patch is modified to include an array of tests for this feature – which doubles as explanation for some of the moo lines by giving more exact dates – and falling back to current time if the environment is invalid + passing time around instead of having an invalid environment be an unrecoverable error (aka: Guru Meditation) as that is more inline with how apt usually behaves: The wisdom of super cow should be available to everyone, even to the most misfortune users not capable of having a valid environment variable. That makes the code slightly more ugly, so instead of requiring a young follower to produce a third version a high priest of the cult applied the finishing touches as he is used to the pain by now – and another round with the slowpoke high priest would have been a serious threat to the Debian release schedule which the cow would not approve. Closes: #848721 Signed-off-by: Super Cow Thanks: Chris Lamb for initial patch and guru meditation
Diffstat (limited to 'apt-private/private-utils.cc')
-rw-r--r--apt-private/private-utils.cc22
1 files changed, 22 insertions, 0 deletions
diff --git a/apt-private/private-utils.cc b/apt-private/private-utils.cc
index 775bf7e79..5863925b9 100644
--- a/apt-private/private-utils.cc
+++ b/apt-private/private-utils.cc
@@ -1,11 +1,13 @@
#include <config.h>
#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
#include <apt-pkg/fileutl.h>
#include <apt-private/private-utils.h>
#include <cstdlib>
+#include <sstream>
#include <unistd.h>
// DisplayFileInPager - Display File with pager /*{{{*/
@@ -74,3 +76,23 @@ bool EditFileInSensibleEditor(std::string const &filename)
return ExecWait(Process, "editor", false);
}
/*}}}*/
+time_t GetSecondsSinceEpoch() /*{{{*/
+{
+ auto const source_date_epoch = getenv("SOURCE_DATE_EPOCH");
+ if (source_date_epoch == nullptr)
+ return time(nullptr);
+
+ time_t epoch;
+ std::stringstream ss(source_date_epoch);
+ ss >> epoch;
+
+ if (ss.fail() || !ss.eof())
+ {
+ _error->Warning("Environment variable SOURCE_DATE_EPOCH was ignored as it has an invalid value: \"%s\"",
+ source_date_epoch);
+ return time(nullptr);
+ }
+
+ return epoch;
+}
+ /*}}}*/