026e3d977e2dc83983e30d6ddad44edee24584ba
[random_node_code.git] / nodejs_dist_list / parse_dist.php
1 <?php
2
3 $baseurl  = "http://nodejs.org/dist";
4
5 // we scrape nodejs.org/dist site looking for versions that exist so we can construct a meta data database
6 // so our lxc will be able to find versions in a more appropriate way
7
8 // first, get the main site
9
10 $fver = array();
11 $fvern = 0;
12 global $fver, $baseurl, $fvern;
13
14
15 echo "Getting base list from $baseurl\n";
16 $distbase = file_get_contents($baseurl);
17
18 // get all links that are directories
19 preg_match_all('/<a [^>]*href="(.+)"/', $distbase, $firstlist);
20
21 $versions = array();
22
23 foreach($firstlist[1] as $chk) {
24         //echo "Got: $chk\n";
25         if(preg_match('/v[0-9]+.[0-9]+.[0-9]+\//', $chk)) {
26                 if(preg_match('/v([0-9]+.[0-9]+.[0-9]+)\//', $chk, $vlist)) {
27                         $versions[$vlist[1]] = $chk;
28                 }               
29         }
30 }
31
32 foreach($versions as $key => $val) {
33         // now we get each version and parse whats in its directory
34         echo "Checking $key => $baseurl/$val\n";
35         
36         //if(preg_match("/0\.8\.[1].*/", $key)) {
37                 $urlnow = "$baseurl/$val";
38                 $vers_dir = file_get_contents($urlnow);
39         
40                 preg_match_all('/<a [^>]*href="(.+)"/', $vers_dir, $fileslist);
41                 
42                 checkFilesList(rtrim($val, "/"), $key, $fileslist);
43         //}
44 }
45
46
47 // done!
48 //echo "and fver is now\n";
49 //var_dump($fver);
50
51 echo "dumping to versions file\n";
52 $versfilename = "./versions_file.".date("Ymd");
53 $versfile = fopen("$versfilename", "w");
54 if($versfile !== false) {
55         fwrite($versfile, "baseurl:$baseurl\n");
56         foreach($fver as $line) {
57                 fwrite($versfile, "$line\n");
58         }
59         fclose($versfile);
60
61         // compress teh file
62         system("gzip -c $versfilename > $versfilename.gz");
63         
64         // create a current versions file
65         $cv = fopen("current_version", "w");
66         if($cv !== false) {
67                 fwrite($cv, "version:$versfilename\n");
68                 fclose($cv);
69         }
70 } else {
71         echo "Failed to open vers file!\n";     
72 }
73
74
75 function checkFilesList($url, $vers, $fileslist) {
76         global $fver, $baseurl, $fvern;
77                         
78         echo "Checking $url, $vers\n";
79         
80         $shalist = array();
81         
82         foreach($fileslist[1] as $fname) {
83                 $is_echo = false;
84                 $flurl = "";
85                 $arch = "";
86                 $plat = "";
87                 $thissha = "";
88                 
89                 if($fname == "SHASUMS.txt") {
90                         //$shas = file_get_
91                         $shas_r = file_get_contents("$baseurl/$url/SHASUMS.txt");
92                         $shalist = explode("\n", $shas_r);
93                         foreach($shalist as $ssha) {
94                                 $fsha = preg_split("/[ \t]+/", $ssha);
95                                 if(isset($fsha[1])) $shalist[$fsha[1]] = $fsha[0];
96                         }
97                         //echo "Shasums file: $fname\n";
98                         //var_dump($shalist);
99                 } else if($fname == "MD5SUMS.txt") {
100                         // nothing yet
101                 } else  if(preg_match("/.*linux.*64\.tar\.gz/", $fname)) {
102                         //echo "64 bit version for linux: $fname\n";
103                         $thissha = "-";
104                         if(isset($shalist[$fname])) $thissha = $shalist[$fname];
105                         $is_echo = true;
106                         $plat = "linux";
107                         $arch = "x86_64";
108                 } else if(preg_match("/.*linux.*86\.tar\.gz/", $fname)) {
109                         //echo "32 bit version for linux: $fname\n";
110                         $thissha = "-";
111                         if(isset($shalist[$fname])) $thissha = $shalist[$fname];
112                         //echo "$vers:$url/$fname:linux:i686:$thissha\n";
113                         $is_echo = true;
114                         $plat = "linux";
115                         $arch = "i686";
116                 } else  if(preg_match("/.*darwin.*86\.tar\.gz/", $fname)) {
117                         //echo "32 bit version for darwin: $fname\n";
118                         $thissha = "-";
119                         if(isset($shalist[$fname])) $thissha = $shalist[$fname];
120                         //echo "$vers:$url/$fname:darwin:i686:$thissha\n";
121                         $is_echo = true;
122                         $plat = "darwin";
123                         $arch = "i686";
124                 } else if(preg_match("/.*darwin.*64\.tar\.gz/", $fname)) {
125                         //echo "64 bit version for darwin: $fname\n";
126                         $thissha = "-";
127                         if(isset($shalist[$fname])) $thissha = $shalist[$fname];
128                         //echo "$vers:$url/$fname:darwin:x86_64:$thissha\n";
129                         $is_echo = true;
130                         $plat = "darwin";
131                         $arch = "x86_64";
132                 } else if(preg_match("/.*sunos.*64\.tar\.gz/", $fname)) {
133                         // echo "64 bit version for sunos: $fname\n";
134                         $thissha = "-";
135                         if(isset($shalist[$fname])) $thissha = $shalist[$fname];
136                         //echo "$vers:$url/$fname:sunos:x86_64:$thissha\n";
137                         $is_echo = true;
138                         $plat = "sunos";
139                         $arch = "x86_64";
140                 } else if(preg_match("/.*sunos.*86\.tar\.gz/", $fname)) {
141                         //echo "32 bit version for sunos: $fname\n";
142                         $thissha = "-";
143                         if(isset($shalist[$fname])) $thissha = $shalist[$fname];
144                         //echo "$vers:$url/$fname:sunos:i686:$thissha\n";
145                         $is_echo = true;
146                         $plat = "sunos";
147                         $arch = "i686";
148                 } else if(preg_match("/.*linux-arm.*\.tar\.gz/", $fname)) {
149                         // echo "arm for linux: $fname\n";
150                         $thissha = "-";
151                         if(isset($shalist[$fname])) $thissha = $shalist[$fname];
152                         //echo "$vers:$url/$fname:linux:armhf:$thissha\n";
153                         $is_echo = true;
154                         $plat = "linux";
155                         $arch = "armhf";
156                 } else if(preg_match("/node-v[0-9]+\.[0-9]+\.[0-9]+\.tar\.gz/", $fname)) {
157                         $thissha = "-";
158                         if(isset($shalist[$fname])) $thissha = $shalist[$fname];
159                         //echo "$vers:$url/$fname:linux:armhf:$thissha\n";
160                         $is_echo = true;
161                         $plat = "src";
162                         $arch = "-";
163                 }
164                 
165                 if($is_echo) {
166                         $fver[$fvern++] = "$vers:$plat:$arch:$url/$fname:$thissha";
167                 }
168         }
169 }
170 ?>