summaryrefslogtreecommitdiff
blob: 9a2ac29e513bd14857b0a0e54c1462acae4bdbd1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
<?

// 	$verbose = true;
// 	$debug = true;
// 	$qa = true;	

	require_once 'header.php';
	require_once 'import.functions.php';
	require_once 'class.portage.tree.php';
	require_once 'class.portage.category.php';
	require_once 'class.portage.package.php';
	require_once 'class.portage.ebuild.php';
	
	$sql = "SELECT COUNT(1) FROM package_mask WHERE status = 1;";
	$count = $db->getOne($sql);
	
	if($count) {
	
		// 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 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 pm.pvr = e.pvr AND lt = FALSE AND gt = FALSE AND eq = TRUE AND ar = FALSE AND av = FALSE;";
		$db->query($sql);
		
		// 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.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 pm.pvr = e.version AND lt = FALSE AND gt = FALSE AND eq = FALSE AND ar = TRUE AND av = FALSE;";
		$db->query($sql);
		
		// 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 pm.gt = TRUE OR pm.lt = TRUE ORDER BY pm.gt, pm.eq, pm.package;";
	// 	shell::msg($sql);
		
		$arr = $db->getAll($sql);
		
		foreach($arr as $row) {
		
			extract($row);
		
			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;
		
		}
		
	// 	print_r($arr_versions);
	
		foreach($arr_versions as $pm_id => $arr) {
		
			// 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;
			
		}
		
	// 	print_r($arr_extended);
	
		foreach($arr_pmask as $pm_id => $arr) {
			
			extract($arr);
			
			$mask_version = $arr_extended[$pm_id]['mask'];
			
			foreach($arr_extended[$pm_id] as $key => $str) {
			
				// Check against versions
				if($key != 'mask' && ( ($gt == 't' && $str > $mask_version) || ($lt == 't' && $str < $mask_version) ) ) {
				
					$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);
				
				// If its the same version, look closer
				} elseif($key != 'mask' && $str == $mask_version) {
				
					$pm_level = $arr_pmask[$pm_id]['level'];
					$ebuild_level = $arr_ebuilds[$pm_id][$key]['level'];
					
					$pm_ext = $arr_extended[$pm_id][$key];
					
					// Check against levels (alpha, beta, etc.)
					if( ($gt == 't' && $ebuild_level > $pm_level) || ($lt == 't' && $ebuild_level < $pm_level) ) {
						
						$arr_insert = array(
							'package_mask' => $pm_id,
							'ebuild' => $key,
							'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");
					
	// 					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;
						
						}
					
					}
				
				}
			
			}
		
		}
	}
	
	
?>