summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Dibb <beandog@gentoo.org>2010-01-05 05:23:16 +0000
committerSteve Dibb <beandog@gentoo.org>2010-01-05 05:23:16 +0000
commitd09f6dc8ca94819644ec3e25f803ff7624ad7071 (patch)
treef3ee62a90809c26488d5a9d2b2109d5a07bc4ea3
parentCheck if we are running as a cron job (diff)
downloadznurt-org-backend-d09f6dc8ca94819644ec3e25f803ff7624ad7071.tar.gz
znurt-org-backend-d09f6dc8ca94819644ec3e25f803ff7624ad7071.tar.bz2
znurt-org-backend-d09f6dc8ca94819644ec3e25f803ff7624ad7071.zip
Much more flexibliity on importing package masks, should be self-healing now
git-svn-id: file:///var/svn/portage@64 3218660a-b0cf-4799-a991-8ddcc5b9e0f3
-rw-r--r--import.ebuild_mask.php250
-rw-r--r--import.final.php6
-rw-r--r--import.package_mask.php18
3 files changed, 158 insertions, 116 deletions
diff --git a/import.ebuild_mask.php b/import.ebuild_mask.php
index 7aeeb33..78a27e5 100644
--- a/import.ebuild_mask.php
+++ b/import.ebuild_mask.php
@@ -4,6 +4,10 @@
// $debug = true;
// $qa = true;
+ // There's no real need for a status column here,
+ // since they won't show up unless the ebuild is completed importing
+ // anyway. Going to leave it in for now, though.
+
require_once 'header.php';
require_once 'import.functions.php';
require_once 'class.portage.tree.php';
@@ -15,155 +19,179 @@
$sql = "DELETE FROM ebuild_mask WHERE status = 1;";
$db->query($sql);
- // Insert entries where the entire package is masked
- $sql = "INSERT INTO ebuild_mask SELECT pm.id, e.id, 1 FROM ebuild e INNER JOIN package p ON e.package = p.id INNER JOIN package_mask pm ON pm.package = e.package WHERE e.status = 1 AND pm.pvr = '' AND lt = FALSE AND gt = FALSE AND eq = FALSE AND ar = FALSE AND av = FALSE;";
- $db->query($sql);
-
- // Insert entries where it's an exact package and version
- $sql = "INSERT INTO ebuild_mask SELECT pm.id, e.id, 1 FROM ebuild e INNER JOIN package p ON e.package = p.id INNER JOIN package_mask pm ON pm.package = e.package WHERE e.status = 1 AND pm.pvr = e.pvr AND lt = FALSE AND gt = FALSE AND eq = TRUE AND ar = FALSE AND av = FALSE;";
- $db->query($sql);
+ // Nothing to do if there are no new ebuilds
+ $import = false;
+ $sql = "SELECT COUNT(1) FROM ebuild WHERE status = 1;";
+ $count = $db->getOne($sql);
+ if($count)
+ $import = true;
- // Insert entries where atom is like:
- // =media-video/mplayer-1.0*
- // Specifically IGNORE gt and lt
- $sql = "INSERT INTO ebuild_mask SELECT pm.id, e.id, 1 FROM ebuild e INNER JOIN package p ON e.package = p.id INNER JOIN package_mask pm ON pm.package = e.package WHERE e.status = 1 AND e.pvr LIKE (pm.pvr || '%') AND eq = TRUE AND ar = FALSE AND av = TRUE;";
- $db->query($sql);
-
- // Insert entries where atom is like:
- // ~media-video/mplayer-1.0
- $sql = "INSERT INTO ebuild_mask SELECT pm.id, e.id, 1 FROM ebuild e INNER JOIN package p ON e.package = p.id INNER JOIN package_mask pm ON pm.package = e.package WHERE e.status = 1 AND pm.pvr = e.version AND lt = FALSE AND gt = FALSE AND eq = FALSE AND ar = TRUE AND av = FALSE;";
- $db->query($sql);
+ // If there are *new* entries in package_mask, then we are going
+ // to check against those. Otherwise, check against the old ones.
+ $sql = "SELECT COUNT(1) FROM package_mask WHERE status = 1;";
+ $count = $db->getOne($sql);
+ if($count)
+ $pm_status = 1;
+ else
+ $pm_status = 0;
- // All others
- $sql = "SELECT pm.id AS pm_id, pm.package, pm.atom, pm.version AS pm_version, pm.gt, pm.lt, pm.eq, pl.level AS pm_level, e.version AS ebuild_version, el.level AS ebuild_level, e.id AS ebuild FROM package_mask pm INNER JOIN view_pmask_level pl ON pl.id = pm.id INNER JOIN ebuild e ON e.package = pm.package INNER JOIN view_ebuild_level el ON el.id = e.id WHERE e.status = 1 AND (pm.gt = TRUE OR pm.lt = TRUE) ORDER BY pm.gt, pm.eq, pm.package;";
-// shell::msg($sql);
+ // If, for some reason, there are no ebuilds masked, check
+ // all the ebuilds, not just the new ones.
+ $sql = "SELECT COUNT(1) FROM ebuild_mask;";
+ $count = $db->getOne($sql);
+ if(!$count)
+ $e_status = "0,1";
+ else
+ $e_status = "1";
- $arr = $db->getAll($sql);
+ if($import) {
- if(count($arr)) {
- foreach($arr as $row) {
+ // Insert entries where the entire package is masked
+ $sql = "INSERT INTO ebuild_mask SELECT pm.id, e.id, 1 FROM ebuild e INNER JOIN package p ON e.package = p.id INNER JOIN package_mask pm ON pm.package = e.package WHERE e.status IN($e_status) AND pm.status = $pm_status AND pm.pvr = '' AND lt = FALSE AND gt = FALSE AND eq = FALSE AND ar = FALSE AND av = FALSE;";
+ $db->query($sql);
- extract($row);
+ // Insert entries where it's an exact package and version
+ $sql = "INSERT INTO ebuild_mask SELECT pm.id, e.id, 1 FROM ebuild e INNER JOIN package p ON e.package = p.id INNER JOIN package_mask pm ON pm.package = e.package WHERE e.status IN($e_status) AND pm.status = $pm_status AND pm.pvr = e.pvr AND lt = FALSE AND gt = FALSE AND eq = TRUE AND ar = FALSE AND av = FALSE;";
+ $db->query($sql);
- if(!$arr_pmask[$pm_id]) {
- $arr_pmask[$pm_id] = array(
- 'atom' => $atom,
- 'package' => $package,
- 'version' => $pm_version,
- 'level' => $pm_level,
- 'gt' => $gt,
- 'lt' => $lt,
- 'eq' => $eq,
- );
-
- $arr_versions[$pm_id]['mask'] = $pm_version;
-
- }
-
- // print_r($arr_pmask);
-
- $arr_ebuilds[$pm_id][$ebuild] = array(
- 'version' => $ebuild_version,
- 'level' => $ebuild_level,
- );
-
- $arr_versions[$pm_id][$ebuild] = $ebuild_version;
+ // Insert entries where atom is like:
+ // =media-video/mplayer-1.0*
+ // Specifically IGNORE gt and lt
+ $sql = "INSERT INTO ebuild_mask SELECT pm.id, e.id, 1 FROM ebuild e INNER JOIN package p ON e.package = p.id INNER JOIN package_mask pm ON pm.package = e.package WHERE e.status IN($e_status) AND pm.status = $pm_status AND e.pvr LIKE (pm.pvr || '%') AND eq = TRUE AND ar = FALSE AND av = TRUE;";
+ $db->query($sql);
- }
+ // Insert entries where atom is like:
+ // ~media-video/mplayer-1.0
+ $sql = "INSERT INTO ebuild_mask SELECT pm.id, e.id, 1 FROM ebuild e INNER JOIN package p ON e.package = p.id INNER JOIN package_mask pm ON pm.package = e.package WHERE e.status IN($e_status) AND pm.status = $pm_status AND pm.pvr = e.version AND lt = FALSE AND gt = FALSE AND eq = FALSE AND ar = TRUE AND av = FALSE;";
+ $db->query($sql);
- // print_r($arr_versions);
-
- foreach($arr_versions as $pm_id => $arr) {
+ // All others
+ $sql = "SELECT pm.id AS pm_id, pm.package, pm.atom, pm.version AS pm_version, pm.gt, pm.lt, pm.eq, pl.level AS pm_level, e.version AS ebuild_version, el.level AS ebuild_level, e.id AS ebuild FROM package_mask pm INNER JOIN view_pmask_level pl ON pl.id = pm.id INNER JOIN ebuild e ON e.package = pm.package INNER JOIN view_ebuild_level el ON el.id = e.id WHERE e.status IN($e_status) AND pm.status = $pm_status AND (pm.gt = TRUE OR pm.lt = TRUE) ORDER BY pm.gt, pm.eq, pm.package;";
+ // shell::msg($sql);
- // Strip out any alpha chars, since we don't need them here
- foreach($arr as $key => $value)
- $arr[$key] = preg_replace("/[A-Za-z]/", "", $value);
-
- $ext = extendVersions($arr);
+ $arr = $db->getAll($sql);
+
+ if(count($arr)) {
+ foreach($arr as $row) {
- $arr_extended[$pm_id] = $ext;
+ extract($row);
- // print_r($arr);
- // print_r($ext);
+ if(!$arr_pmask[$pm_id]) {
+ $arr_pmask[$pm_id] = array(
+ 'atom' => $atom,
+ 'package' => $package,
+ 'version' => $pm_version,
+ 'level' => $pm_level,
+ 'gt' => $gt,
+ 'lt' => $lt,
+ 'eq' => $eq,
+ );
+
+ $arr_versions[$pm_id]['mask'] = $pm_version;
+
+ }
+
+ // print_r($arr_pmask);
+
+ $arr_ebuilds[$pm_id][$ebuild] = array(
+ 'version' => $ebuild_version,
+ 'level' => $ebuild_level,
+ );
+
+ $arr_versions[$pm_id][$ebuild] = $ebuild_version;
- // die;
+ }
- }
+ // print_r($arr_versions);
- // print_r($arr_extended);
-
- foreach($arr_pmask as $pm_id => $arr) {
-
- extract($arr);
-
- $mask_version = $arr_extended[$pm_id]['mask'];
+ foreach($arr_versions as $pm_id => $arr) {
- foreach($arr_extended[$pm_id] as $key => $str) {
+ // Strip out any alpha chars, since we don't need them here
+ foreach($arr as $key => $value)
+ $arr[$key] = preg_replace("/[A-Za-z]/", "", $value);
+
+ $ext = extendVersions($arr);
+
+ $arr_extended[$pm_id] = $ext;
+
+ // print_r($arr);
+ // print_r($ext);
+
+ // die;
+
+ }
- // Check against versions
- if($key != 'mask' && ( ($gt == 't' && $str > $mask_version) || ($lt == 't' && $str < $mask_version) ) ) {
+ // print_r($arr_extended);
+
+ foreach($arr_pmask as $pm_id => $arr) {
- $arr_ebuild_masks[$pm_id][] = $key;
-
- $arr_insert = array(
- 'package_mask' => $pm_id,
- 'ebuild' => $key,
- 'status' => 1
- );
-
- $db->autoExecute('ebuild_mask', $arr_insert, MDB2_AUTOQUERY_INSERT);
+ extract($arr);
- // If its the same version, look closer
- } elseif($key != 'mask' && $str == $mask_version) {
+ $mask_version = $arr_extended[$pm_id]['mask'];
- $pm_level = $arr_pmask[$pm_id]['level'];
- $ebuild_level = $arr_ebuilds[$pm_id][$key]['level'];
-
- $pm_ext = $arr_extended[$pm_id][$key];
+ foreach($arr_extended[$pm_id] as $key => $str) {
+
+ // Check against versions
+ if($key != 'mask' && ( ($gt == 't' && $str > $mask_version) || ($lt == 't' && $str < $mask_version) ) ) {
- // Check against levels (alpha, beta, etc.)
- if( ($gt == 't' && $ebuild_level > $pm_level) || ($lt == 't' && $ebuild_level < $pm_level) ) {
+ $arr_ebuild_masks[$pm_id][] = $key;
$arr_insert = array(
'package_mask' => $pm_id,
'ebuild' => $key,
- 'status' => 1,
+ 'status' => 1
);
$db->autoExecute('ebuild_mask', $arr_insert, MDB2_AUTOQUERY_INSERT);
- // If the levels are the same too, then you need to look
- // at which one is actually higher / lower
- // Actually, I'm not sure if it ever really gets to this point anyway.... currently
- // I don't have anything that gets this far.
- // I think the queries above for checking level actually grab this already. Not sure.
- } elseif($ebuild_level == $pm_level && $eq == 'f' && $pm_ext != $str) {
-
- shell::msg("race condition! check import.ebuild_mask.php");
+ // If its the same version, look closer
+ } elseif($key != 'mask' && $str == $mask_version) {
- // var_dump($ebuild_level);
- // var_dump($pm_level);
+ $pm_level = $arr_pmask[$pm_id]['level'];
+ $ebuild_level = $arr_ebuilds[$pm_id][$key]['level'];
- switch($ebuild_level) {
+ $pm_ext = $arr_extended[$pm_id][$key];
- case "5":
+ // Check against levels (alpha, beta, etc.)
+ if( ($gt == 't' && $ebuild_level > $pm_level) || ($lt == 't' && $ebuild_level < $pm_level) ) {
- // var_dump($arr_pmask[$pm_id]['atom']);
- //
- // var_dump($arr_extended[$pm_id][$key]);
- // var_dump($str);
- // echo "\n";
+ $arr_insert = array(
+ 'package_mask' => $pm_id,
+ 'ebuild' => $key,
+ 'status' => 1,
+ );
- break;
+ $db->autoExecute('ebuild_mask', $arr_insert, MDB2_AUTOQUERY_INSERT);
+ // If the levels are the same too, then you need to look
+ // at which one is actually higher / lower
+ // Actually, I'm not sure if it ever really gets to this point anyway.... currently
+ // I don't have anything that gets this far.
+ // I think the queries above for checking level actually grab this already. Not sure.
+ } elseif($ebuild_level == $pm_level && $eq == 'f' && $pm_ext != $str) {
+
+ shell::msg("race condition! check import.ebuild_mask.php");
+
+ // var_dump($ebuild_level);
+ // var_dump($pm_level);
+
+ switch($ebuild_level) {
+
+ case "5":
+
+ // var_dump($arr_pmask[$pm_id]['atom']);
+ //
+ // var_dump($arr_extended[$pm_id][$key]);
+ // var_dump($str);
+ // echo "\n";
+
+ break;
+
+ }
}
-
}
-
}
-
}
-
}
}
diff --git a/import.final.php b/import.final.php
index 1312083..b3eca98 100644
--- a/import.final.php
+++ b/import.final.php
@@ -71,7 +71,9 @@
$db->query($sql);
// Finalize the import
- $sql = "INSERT INTO znurt (action) VALUES ('finish_import');";
- $db->query($sql);
+ if($cron) {
+ $sql = "INSERT INTO znurt (action) VALUES ('finish_import');";
+ $db->query($sql);
+ }
?> \ No newline at end of file
diff --git a/import.package_mask.php b/import.package_mask.php
index 0d8ce59..cdd4d73 100644
--- a/import.package_mask.php
+++ b/import.package_mask.php
@@ -4,6 +4,18 @@
// $debug = true;
// $qa = true;
+ /**
+ * Import method is slightly different than others, here.
+ *
+ * Instead of waiting for the final import script to run to update
+ * masked status, figure it out here. It's not going to be detrimental
+ * to update masks while the rest of the process imports ebuilds.
+ *
+ * So, the status check here will stop and start in these files.
+ *
+ * The ebuild_mask import script will just check all of them.
+ */
+
require_once 'header.php';
require_once 'class.portage.tree.php';
require_once 'class.portage.category.php';
@@ -19,10 +31,10 @@
$import = false;
- if($debug)
- $import = true;
+ $sql = "SELECT COUNT(1) FROM package_mask WHERE status = 0;";
+ $count = $db->getOne($sql);
- if(is_null($dbmtime->mtime) || ($pmask->mtime > $dbmtime->mtime) ) {
+ if(is_null($dbmtime->mtime) || ($pmask->mtime > $dbmtime->mtime) || $debug || !$count) {
$dbmtime->mtime = $pmask->mtime;
$import = true;
}