@@ -14,7 +14,8 @@ pub struct Metadata {
1414 pub extension_name : String ,
1515 pub default_version : String ,
1616 pub comment : Option < String > ,
17- pub requires : Option < Vec < String > > ,
17+ pub relocatable : bool ,
18+ pub requires : Vec < String > ,
1819}
1920
2021impl Metadata {
@@ -23,6 +24,7 @@ impl Metadata {
2324 extension_name : control_file_ref. extension_name ( ) ?. clone ( ) ,
2425 default_version : control_file_ref. default_version ( ) ?. clone ( ) ,
2526 comment : control_file_ref. comment ( ) ?. clone ( ) ,
27+ relocatable : control_file_ref. relocatable ( ) ?,
2628 requires : control_file_ref. requires ( ) ?. clone ( ) ,
2729 } )
2830 }
@@ -261,16 +263,26 @@ impl ControlFileRef {
261263
262264 // A list of names of extensions that this extension depends on, for example requires = 'foo,
263265 // bar'. Those extensions must be installed before this one can be installed.
264- fn requires ( & self ) -> anyhow:: Result < Option < Vec < String > > > {
266+ fn requires ( & self ) -> anyhow:: Result < Vec < String > > {
265267 for line in self . contents . lines ( ) {
266268 if line. starts_with ( "requires" ) {
267269 let value = self . read_control_line_value ( line) ?;
268270 let required_packages: Vec < String > =
269271 value. split ( ',' ) . map ( |x| x. trim ( ) . to_string ( ) ) . collect ( ) ;
270- return Ok ( Some ( required_packages) ) ;
272+ return Ok ( required_packages) ;
271273 }
272274 }
273- Ok ( None )
275+ Ok ( vec ! [ ] )
276+ }
277+
278+ fn relocatable ( & self ) -> anyhow:: Result < bool > {
279+ for line in self . contents . lines ( ) {
280+ if line. starts_with ( "relocatable" ) {
281+ let value: bool = self . read_control_line_value ( line) ?. parse ( ) ?;
282+ return Ok ( value) ;
283+ }
284+ }
285+ Ok ( false )
274286 }
275287
276288 fn default_version ( & self ) -> anyhow:: Result < String > {
0 commit comments