getSerialized('svn_last_update'); if ($cache && is_readable('.svn') && $cache['wcdb_mtime'] < filemtime('.svn/wc.db')) { $cache = false; } if ($cache) { return $cache; } else { $cache = []; } if (is_readable('.svn')) { $svn = []; if (is_readable('.svn/entries')) { $fp = fopen('.svn/entries', 'r'); for ($i = 0; 10 > $i && $line = fgets($fp, 80); ++$i) { $svn[] = $line; } fclose($fp); } if (count($svn) > 2) { // Standard SVN client $cache['svnrev'] = $svn[3]; $cache['lastup'] = strtotime($svn[9]); } else { // Check for Tortoise 1.7+ SVN client, if sqlite3 is present if (extension_loaded('sqlite3')) { $location = '.svn/wc.db'; if (is_file($location)) { $handle = new SQLite3($location); // Assign svnrev $query = "select max(changed_revision) as svnrev from nodes"; $result = $handle->query($query); $svnrev = $lastupTime = $strDT = ''; if ($result) { $resx = $result->fetchArray(SQLITE3_ASSOC); $cache['svnrev'] = $resx['svnrev']; } // Assign lastup $query = "select max(changed_date)/1000000 as lastup from nodes"; $result = $handle->query($query); if ($result) { $resx = $result->fetchArray(SQLITE3_ASSOC); $lastupTime = (int)$resx['lastup']; $dt = new DateTime(); $dt->setTimestamp($lastupTime); $cache['lastup'] = $dt->format(DateTime::ISO8601); } // Release/Unlock the database afterwards $handle->close(); } } } $cache['wcdb_mtime'] = filemtime('.svn/wc.db'); } if (! $cache) { $cache['lastup'] = null; $cache['svnrev'] = null; $cache['wcdb_mtime'] = null; } $cachelib->cacheItem('svn_last_update', serialize($cache)); return $cache; }