@@ -40,6 +40,11 @@ class erusGithub extends erusPlugin {
40
40
*/
41
41
public function process ($ data ) {
42
42
43
+ // Go old or go home.
44
+ if (!isset ($ data ['info ' ]['datestamp ' ])) {
45
+ $ data ['info ' ]['datestamp ' ] = 0 ;
46
+ }
47
+
43
48
// Store data for later
44
49
$ this ->set_update_data ($ data );
45
50
$ this ->authenticate_with_github ();
@@ -64,6 +69,7 @@ class erusGithub extends erusPlugin {
64
69
$ available = $ this ->map_data ($ releases );
65
70
// Sanitize the status of the data from the original call
66
71
$ this ->sanitize_info_data ($ data );
72
+
67
73
// Allow update module to do its magic.
68
74
update_calculate_project_update_status ($ this ->get_project_name (), $ data , $ available );
69
75
@@ -95,8 +101,11 @@ class erusGithub extends erusPlugin {
95
101
protected function map_data ($ releases ) {
96
102
$ update_data = $ this ->get_update_data ();
97
103
$ data = $ this ->get_default_update_status_available_data_array ();
104
+
98
105
$ latest_release = $ this ->get_latest_release ($ releases );
99
- $ latest_prod_tag = !empty ($ latest_release ['tag_name ' ]) ? $ latest_release ['tag_name ' ] : '' ;
106
+ $ dev_release = $ this ->get_latest_dev_release ($ releases );
107
+
108
+ $ latest_prod_tag = !empty ($ latest_release ['tag_name ' ]) ? $ latest_release ['tag_name ' ] : $ dev_release ["tag_name " ];
100
109
101
110
$ data ['title ' ] = $ update_data ['info ' ]['name ' ];
102
111
$ data ['short_name ' ] = $ update_data ['name ' ];
@@ -107,10 +116,9 @@ class erusGithub extends erusPlugin {
107
116
$ data ['recommended_major ' ] = $ this ->parse_latest_major ($ latest_prod_tag );
108
117
$ data ['supported_majors ' ] = implode (", " , range (1 ,99 ));
109
118
$ data ['default_major ' ] = $ this ->parse_latest_major ($ latest_prod_tag );
119
+ // $data['latest_version'] = $dev_release['tag_name'];
120
+ // $data['dev_version'] = $this->parse_latest_major($latest_prod_tag);
110
121
111
- // ASSETS
112
- // https://github.com/SU-SWS/stanford_person/releases/download/7.x-3.0-alpha8/stanford_person-7.x-3.0-alpha8.tar.gz
113
- // https://github.com/SU-SWS/stanford_person/archive/7.x-3.0-alpha8.tar.gz
114
122
115
123
foreach ($ releases as $ index => $ release ) {
116
124
$ tag_name = $ release ['tag_name ' ];
@@ -129,38 +137,106 @@ class erusGithub extends erusPlugin {
129
137
'version ' => $ tag_name ,
130
138
'tag ' => $ tag_name ,
131
139
'version_major ' => $ this ->parse_latest_major ($ tag_name ),
132
- 'version_patch ' => 0 ,
133
- 'version_extra ' => ( $ release [ ' prerelease ' ]) ? ' dev ' : @$ tag_parts [2 ],
140
+ 'version_patch ' => $ this -> parse_latest_minor ( $ tag_name ) ,
141
+ 'version_extra ' => @$ tag_parts [2 ],
134
142
'status ' => 'published ' ,
135
143
'release_link ' => $ release ['html_url ' ],
136
- // 'download_link' => $release['tarball_url'],
137
144
'download_link ' => $ download_link ,
138
- // 'date' => strtotime($release['published_at']), // when the release was published.
139
- 'date ' => strtotime ($ release ['created_at ' ]), // when the tag was created
145
+ 'date ' => strtotime ($ release ['published_at ' ]), // when the release was published.
146
+ // 'date' => strtotime($release['created_at']), // when the tag was created
140
147
'mdhash ' => md5 ($ release ['url ' ]), // just making this stuff up.
141
148
'filesize ' => isset ($ release ['assets ' ][0 ]) ? $ release ['assets ' ][0 ]['size ' ] : 0 ,
142
149
'files ' => "\n \n \n " ,
143
- 'terms ' => array ( ' Release type ' => array ( ' Bug fixes ' ) ),
150
+ 'terms ' => $ this -> parse_release_terms ( $ release [ ' body ' ] ),
144
151
);
145
152
146
153
}
147
154
155
+ // sort by name so that the list shows up as:
156
+ // 7.x-1.1-alpha1
157
+ // 7.x-1.0
158
+ // 7.x-1.0-beta11
159
+ // 7.x-1.0-beta10
160
+ // 7.x-1.0-beta9
161
+
162
+ $ keys = array_keys ($ data ['releases ' ]);
163
+
164
+ uasort ($ keys , function ($ a , $ b ) {
165
+ if ($ a == $ b ) {
166
+ return 0 ;
167
+ }
168
+ $ a = str_replace ('7.x- ' , '' , $ a );
169
+ $ b = str_replace ('7.x- ' , '' , $ b );
170
+
171
+ return version_compare ($ a , $ b , '> ' ) ? -1 : 1 ;
172
+ }
173
+ );
174
+ $ keys = array_flip ($ keys );
175
+ $ data ['releases ' ] = array_merge ($ keys , $ data ['releases ' ]);
148
176
return $ data ;
149
177
}
150
178
179
+ /**
180
+ * Look for "Release type:" in the body of a release for tag information.
181
+ * Tags should be a comma separated list
182
+ * eg: Release type: Bug fixes, New features, Security update
183
+ * @param string $string [description]
184
+ * @return [type] [description]
185
+ */
186
+ protected function parse_release_terms ($ string = '' ) {
187
+ $ terms = array ('Release type ' => array ());
188
+
189
+ preg_match_all ('/Release type:.*\n/ ' , $ string , $ matches );
190
+ $ found = array_pop ($ matches );
191
+
192
+ if (!empty ($ found )) {
193
+ $ found = str_replace ("Release type: " , "" , $ found [0 ]);
194
+ $ found = str_replace (", " , ", " , $ found );
195
+ $ found = str_replace (" , " , ", " , $ found );
196
+ $ found = trim ($ found );
197
+ $ terms ['Release type ' ] = explode (", " , $ found );
198
+ }
199
+ else {
200
+ $ terms ['Release type ' ] = array ('Bug fixes ' );
201
+ }
202
+
203
+
204
+ return $ terms ;
205
+ }
206
+
207
+
151
208
/**
152
209
* Goes through the releases looking for a release that isnt marked as
153
210
* a "pre-lease" in the github ui.
154
211
* @param [array] $releases [all of the releases from GH]
155
- * @return [array] [the latest mared as non prerelease]
212
+ * @return [array] [the latest marked as non prerelease]
156
213
*/
157
214
protected function get_latest_release ($ releases ) {
215
+ $ potentials = array ();
216
+
158
217
foreach ($ releases as $ i => $ release ) {
159
218
if ($ release ['draft ' ] == TRUE || $ release ['prerelease ' ] == TRUE ) {
160
219
continue ;
161
220
}
162
- return $ release ;
221
+ $ potentials [ $ release [ ' tag_name ' ]] = $ release ;
163
222
}
223
+
224
+ if (empty ($ potentials )) {
225
+ return FALSE ;
226
+ }
227
+
228
+ // Silly ksort will put 7.x-1.0-alpha1 in front of 7.x-1.0
229
+ krsort ($ potentials );
230
+ $ key = array_shift ($ potentials );
231
+
232
+ $ parts = explode ("- " , $ key ["tag_name " ]);
233
+ if (isset ($ potentials [$ parts [0 ] . "- " . $ parts [1 ]])) {
234
+ return $ potentials [$ parts [0 ] . "- " . $ parts [1 ]];
235
+ }
236
+ else {
237
+ return $ key ;
238
+ }
239
+
164
240
}
165
241
166
242
/**
0 commit comments