summaryrefslogtreecommitdiff
path: root/lib/cache.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/cache.php')
-rw-r--r--lib/cache.php49
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/cache.php b/lib/cache.php
index ea0ff769d..dc667654a 100644
--- a/lib/cache.php
+++ b/lib/cache.php
@@ -87,6 +87,55 @@ class Cache
}
/**
+ * Create a cache key for data dependent on code
+ *
+ * For cache elements that are dependent on changes in code, this creates
+ * a more-or-less fingerprint of the current running code and adds it to
+ * the cache key. In the case of an upgrade of core, or addition or
+ * removal of plugins, a new unique fingerprint is generated and used.
+ *
+ * There can still be problems with a) differences in versions of the
+ * plugins and b) people running code between official versions. This is
+ * usually a problem only for experienced users like developers, who know
+ * how to clear their cache.
+ *
+ * For sites that run code between versions (like the status.net cloud),
+ * there's an additional build number configuration setting.
+ *
+ * @param string $extra the real part of the key
+ *
+ * @return string full key
+ */
+
+ static function codeKey($extra)
+ {
+ static $prefix = null;
+
+ if (empty($prefix)) {
+
+ $plugins = StatusNet::getActivePlugins();
+ $names = array();
+
+ foreach ($plugins as $plugin) {
+ $names[] = $plugin[0];
+ }
+
+ $names = array_unique($names);
+ asort($names);
+
+ // Unique enough.
+
+ $uniq = crc32(implode(',', $names));
+
+ $build = common_config('site', 'build');
+
+ $prefix = STATUSNET_VERSION.':'.$build.':'.$uniq;
+ }
+
+ return Cache::key($prefix.':'.$extra);
+ }
+
+ /**
* Make a string suitable for use as a key
*
* Useful for turning primary keys of tables into cache keys.