@@ -481,39 +481,48 @@ def url_and_hash_of_rust_package(target, rustc_short_version):
481
481
}
482
482
483
483
def write_manifest (manifest , file_path ):
484
+ def quote (value ):
485
+ return '"' + str (value ).replace ('"' , r'\"' ) + '"'
486
+
487
+ def bare_key (key ):
488
+ if re .match (r"^[a-zA-Z0-9_\-]+$" , key ):
489
+ return key
490
+ else :
491
+ return quote (key )
492
+
484
493
with open (file_path , "w" ) as f :
485
494
f .write ('manifest-version = "2"\n ' )
486
- f .write ('date = " ' + today + '" \n ' )
495
+ f .write ('date = ' + quote ( today ) + '\n ' )
487
496
f .write ('\n ' )
488
497
489
498
for name , pkg in sorted (manifest ["pkg" ].items ()):
490
- f .write ('[pkg.' + name + ']\n ' )
491
- f .write ('version = " ' + pkg ["version" ] + '" \n ' )
499
+ f .write ('[pkg.' + bare_key ( name ) + ']\n ' )
500
+ f .write ('version = ' + quote ( pkg ["version" ]) + '\n ' )
492
501
f .write ('\n ' )
493
502
494
503
for target , target_pkg in sorted (pkg ["target" ].items ()):
495
504
available = "true"
496
505
if not target_pkg ["available" ]: available = "false"
497
506
498
- f .write ('[pkg.' + name + '.target.' + target + ']\n ' )
507
+ f .write ('[pkg.' + bare_key ( name ) + '.target.' + bare_key ( target ) + ']\n ' )
499
508
f .write ('available = ' + available + '\n ' )
500
- f .write ('url = " ' + target_pkg ["url" ] + '" \n ' )
501
- f .write ('hash = " ' + target_pkg ["hash" ] + '" \n ' )
509
+ f .write ('url = ' + quote ( target_pkg ["url" ]) + '\n ' )
510
+ f .write ('hash = ' + quote ( target_pkg ["hash" ]) + '\n ' )
502
511
f .write ('\n ' )
503
512
504
513
components = target_pkg .get ("components" )
505
514
if components :
506
515
for component in components :
507
- f .write ('[[pkg.' + name + '.target.' + target + '.components]]\n ' )
508
- f .write ('pkg = " ' + component ["pkg" ] + '" \n ' )
509
- f .write ('target = " ' + component ["target" ] + '" \n ' )
516
+ f .write ('[[pkg.' + bare_key ( name ) + '.target.' + bare_key ( target ) + '.components]]\n ' )
517
+ f .write ('pkg = ' + quote ( component ["pkg" ]) + '\n ' )
518
+ f .write ('target = ' + quote ( component ["target" ]) + '\n ' )
510
519
511
520
extensions = target_pkg .get ("extensions" )
512
521
if extensions :
513
522
for extension in extensions :
514
- f .write ('[[pkg.' + name + '.target.' + target + '.extensions]]\n ' )
515
- f .write ('pkg = " ' + extension ["pkg" ] + '" \n ' )
516
- f .write ('target = " ' + extension ["target" ] + '" \n ' )
523
+ f .write ('[[pkg.' + bare_key ( name ) + '.target.' + bare_key ( target ) + '.extensions]]\n ' )
524
+ f .write ('pkg = ' + quote ( extension ["pkg" ]) + '\n ' )
525
+ f .write ('target = ' + quote ( extension ["target" ]) + '\n ' )
517
526
518
527
f .write ('\n ' )
519
528
0 commit comments