/**
* Checks to see if it's necessary to rebuild the cacheV table for the
* current repository. This is done by making sure $count > 0. If not,
- * then rebuild() is run.
+ * then rebuild() is run. This also checks against the cacheV table
+ * to make sure that it's up-to-date against the root repository.
*
* @access public
*/
- function exec_rebuild()
+ function exec_build()
{
- $result = $this->registry->db->query_first("SELECT COUNT(*) AS count FROM {$this->hash}");
- if ($result['count'] > 0)
+ $result = $this->registry->db->query_first("SELECT MAX(revision) AS max FROM {$this->hash}");
+
+ // time to go from the start
+ if ($result['max'] == 0)
{
- return;
+ $this->build(null);
+ }
+ else
+ {
+ // send an Xquery to SVN
+ $query = $this->registry->svn->svn('info --xml ' . $this->registry->repos->fetch_path($this->registry->paths->repos));
+ $query = implode("\n", $query);
+
+ $tree = $this->registry->xml->parse($query);
+
+ if ($tree['info']['entry']['revision'] != $result['max'])
+ {
+ $this->build($result['max']);
+ }
}
-
- $this->rebuild();
}
// ###################################################################
/**
- * Rebuilds the entire cacheV table from scratch. This is used on new
- * repositories by checking $count. Be careful as this is a very
- * expensive operation to run.
+ * Builds the cacheV table. This can be used to build only part of the
+ * cache or the entire thing, if the revision is set to NULL.
*
* @access public
+ *
+ * @param integer Lower (current) revision
*/
- function rebuild()
+ function build($revision)
{
$start = microtime();
- $output = $this->registry->svn->svn('log --xml -v ' . $this->registry->repos->fetch_path($this->registry->paths->repos));
+ $output = $this->registry->svn->svn('log --xml -v ' . ($revision !== null ? '-r' . $revision . ':HEAD ' : '') . $this->registry->repos->fetch_path($this->registry->paths->repos));
$output = implode("\n", $output);
- $this->registry->load('xml', 'xml', true);
$tree = $this->registry->xml->parse($output);
foreach ($tree['log']['logentry'] AS $log)
" . implode(",\n", $inserts)
);
- $this->registry->debug("TIME TO REBUILD: " . $this->registry->funct->fetch_microtime_diff($start));
+ $this->registry->debug("TIME TO (RE)BUILD: " . $this->registry->funct->fetch_microtime_diff($start));
}
}