Hex Artifact Content
Not logged in

Artifact c014cf2f0be212d478af14df4e6883905e5b8eea:


0000: 23 5b 6d 61 63 72 6f 5f 75 73 65 5d 0a 65 78 74  #[macro_use].ext
0010: 65 72 6e 20 63 72 61 74 65 20 63 6c 61 70 3b 0a  ern crate clap;.
0020: 23 5b 6d 61 63 72 6f 5f 75 73 65 5d 0a 65 78 74  #[macro_use].ext
0030: 65 72 6e 20 63 72 61 74 65 20 65 72 72 6f 72 5f  ern crate error_
0040: 63 68 61 69 6e 3b 0a 65 78 74 65 72 6e 20 63 72  chain;.extern cr
0050: 61 74 65 20 69 6e 73 74 61 6c 6c 65 72 3b 0a 0a  ate installer;..
0060: 75 73 65 20 65 72 72 6f 72 73 3a 3a 2a 3b 0a 75  use errors::*;.u
0070: 73 65 20 63 6c 61 70 3a 3a 7b 41 70 70 2c 20 41  se clap::{App, A
0080: 72 67 4d 61 74 63 68 65 73 7d 3b 0a 0a 6d 6f 64  rgMatches};..mod
0090: 20 65 72 72 6f 72 73 20 7b 0a 20 20 20 20 65 72   errors {.    er
00a0: 72 6f 72 5f 63 68 61 69 6e 21 7b 0a 20 20 20 20  ror_chain!{.    
00b0: 20 20 20 20 6c 69 6e 6b 73 20 7b 0a 20 20 20 20      links {.    
00c0: 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65          Installe
00d0: 72 28 3a 3a 69 6e 73 74 61 6c 6c 65 72 3a 3a 45  r(::installer::E
00e0: 72 72 6f 72 2c 20 3a 3a 69 6e 73 74 61 6c 6c 65  rror, ::installe
00f0: 72 3a 3a 45 72 72 6f 72 4b 69 6e 64 29 3b 0a 20  r::ErrorKind);. 
0100: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 7d         }.    }.}
0110: 0a 0a 71 75 69 63 6b 5f 6d 61 69 6e 21 28 72 75  ..quick_main!(ru
0120: 6e 29 3b 0a 0a 66 6e 20 72 75 6e 28 29 20 2d 3e  n);..fn run() ->
0130: 20 52 65 73 75 6c 74 3c 28 29 3e 20 7b 0a 20 20   Result<()> {.  
0140: 20 20 6c 65 74 20 79 61 6d 6c 20 3d 20 6c 6f 61    let yaml = loa
0150: 64 5f 79 61 6d 6c 21 28 22 6d 61 69 6e 2e 79 6d  d_yaml!("main.ym
0160: 6c 22 29 3b 0a 20 20 20 20 6c 65 74 20 6d 61 74  l");.    let mat
0170: 63 68 65 73 20 3d 20 41 70 70 3a 3a 66 72 6f 6d  ches = App::from
0180: 5f 79 61 6d 6c 28 79 61 6d 6c 29 2e 67 65 74 5f  _yaml(yaml).get_
0190: 6d 61 74 63 68 65 73 28 29 3b 0a 0a 20 20 20 20  matches();..    
01a0: 6d 61 74 63 68 20 6d 61 74 63 68 65 73 2e 73 75  match matches.su
01b0: 62 63 6f 6d 6d 61 6e 64 28 29 20 7b 0a 20 20 20  bcommand() {.   
01c0: 20 20 20 20 20 28 22 63 6f 6d 62 69 6e 65 22 2c       ("combine",
01d0: 20 53 6f 6d 65 28 6d 61 74 63 68 65 73 29 29 20   Some(matches)) 
01e0: 3d 3e 20 63 6f 6d 62 69 6e 65 28 6d 61 74 63 68  => combine(match
01f0: 65 73 29 2c 0a 20 20 20 20 20 20 20 20 28 22 67  es),.        ("g
0200: 65 6e 65 72 61 74 65 22 2c 20 53 6f 6d 65 28 6d  enerate", Some(m
0210: 61 74 63 68 65 73 29 29 20 3d 3e 20 67 65 6e 65  atches)) => gene
0220: 72 61 74 65 28 6d 61 74 63 68 65 73 29 2c 0a 20  rate(matches),. 
0230: 20 20 20 20 20 20 20 28 22 73 63 72 69 70 74 22         ("script"
0240: 2c 20 53 6f 6d 65 28 6d 61 74 63 68 65 73 29 29  , Some(matches))
0250: 20 3d 3e 20 73 63 72 69 70 74 28 6d 61 74 63 68   => script(match
0260: 65 73 29 2c 0a 20 20 20 20 20 20 20 20 28 22 74  es),.        ("t
0270: 61 72 62 61 6c 6c 22 2c 20 53 6f 6d 65 28 6d 61  arball", Some(ma
0280: 74 63 68 65 73 29 29 20 3d 3e 20 74 61 72 62 61  tches)) => tarba
0290: 6c 6c 28 6d 61 74 63 68 65 73 29 2c 0a 20 20 20  ll(matches),.   
02a0: 20 20 20 20 20 5f 20 3d 3e 20 75 6e 72 65 61 63       _ => unreac
02b0: 68 61 62 6c 65 21 28 29 2c 0a 20 20 20 20 7d 0a  hable!(),.    }.
02c0: 7d 0a 0a 2f 2f 2f 20 50 61 72 73 65 20 63 6c 61  }../// Parse cla
02d0: 70 20 61 72 67 75 65 6d 65 6e 74 73 20 69 6e 74  p arguements int
02e0: 6f 20 74 68 65 20 74 79 70 65 20 63 6f 6e 73 74  o the type const
02f0: 72 75 63 74 6f 72 2e 0a 6d 61 63 72 6f 5f 72 75  ructor..macro_ru
0300: 6c 65 73 21 20 70 61 72 73 65 28 0a 20 20 20 20  les! parse(.    
0310: 28 24 6d 61 74 63 68 65 73 3a 65 78 70 72 20 3d  ($matches:expr =
0320: 3e 20 24 74 79 70 65 3a 74 79 20 7b 20 24 28 20  > $type:ty { $( 
0330: 24 6f 70 74 69 6f 6e 3a 74 74 20 3d 3e 20 24 73  $option:tt => $s
0340: 65 74 74 65 72 3a 69 64 65 6e 74 2c 20 29 2a 20  etter:ident, )* 
0350: 7d 29 20 3d 3e 20 7b 0a 20 20 20 20 20 20 20 20  }) => {.        
0360: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 65  {.            le
0370: 74 20 6d 75 74 20 63 6f 6d 6d 61 6e 64 3a 20 24  t mut command: $
0380: 74 79 70 65 20 3d 20 44 65 66 61 75 6c 74 3a 3a  type = Default::
0390: 64 65 66 61 75 6c 74 28 29 3b 0a 20 20 20 20 20  default();.     
03a0: 20 20 20 20 20 20 20 24 28 20 24 6d 61 74 63 68         $( $match
03b0: 65 73 2e 76 61 6c 75 65 5f 6f 66 28 24 6f 70 74  es.value_of($opt
03c0: 69 6f 6e 29 2e 6d 61 70 28 7c 73 7c 20 63 6f 6d  ion).map(|s| com
03d0: 6d 61 6e 64 2e 24 73 65 74 74 65 72 28 73 29 29  mand.$setter(s))
03e0: 3b 20 29 2a 0a 20 20 20 20 20 20 20 20 20 20 20  ; )*.           
03f0: 20 63 6f 6d 6d 61 6e 64 0a 20 20 20 20 20 20 20   command.       
0400: 20 7d 0a 20 20 20 20 7d 0a 29 3b 0a 0a 66 6e 20   }.    }.);..fn 
0410: 63 6f 6d 62 69 6e 65 28 6d 61 74 63 68 65 73 3a  combine(matches:
0420: 20 26 41 72 67 4d 61 74 63 68 65 73 29 20 2d 3e   &ArgMatches) ->
0430: 20 52 65 73 75 6c 74 3c 28 29 3e 20 7b 0a 20 20   Result<()> {.  
0440: 20 20 6c 65 74 20 63 6f 6d 62 69 6e 65 72 20 3d    let combiner =
0450: 20 70 61 72 73 65 21 28 6d 61 74 63 68 65 73 20   parse!(matches 
0460: 3d 3e 20 69 6e 73 74 61 6c 6c 65 72 3a 3a 43 6f  => installer::Co
0470: 6d 62 69 6e 65 72 20 7b 0a 20 20 20 20 20 20 20  mbiner {.       
0480: 20 22 70 72 6f 64 75 63 74 2d 6e 61 6d 65 22 20   "product-name" 
0490: 3d 3e 20 70 72 6f 64 75 63 74 5f 6e 61 6d 65 2c  => product_name,
04a0: 0a 20 20 20 20 20 20 20 20 22 70 61 63 6b 61 67  .        "packag
04b0: 65 2d 6e 61 6d 65 22 20 3d 3e 20 70 61 63 6b 61  e-name" => packa
04c0: 67 65 5f 6e 61 6d 65 2c 0a 20 20 20 20 20 20 20  ge_name,.       
04d0: 20 22 72 65 6c 2d 6d 61 6e 69 66 65 73 74 2d 64   "rel-manifest-d
04e0: 69 72 22 20 3d 3e 20 72 65 6c 5f 6d 61 6e 69 66  ir" => rel_manif
04f0: 65 73 74 5f 64 69 72 2c 0a 20 20 20 20 20 20 20  est_dir,.       
0500: 20 22 73 75 63 63 65 73 73 2d 6d 65 73 73 61 67   "success-messag
0510: 65 22 20 3d 3e 20 73 75 63 63 65 73 73 5f 6d 65  e" => success_me
0520: 73 73 61 67 65 2c 0a 20 20 20 20 20 20 20 20 22  ssage,.        "
0530: 6c 65 67 61 63 79 2d 6d 61 6e 69 66 65 73 74 2d  legacy-manifest-
0540: 64 69 72 73 22 20 3d 3e 20 6c 65 67 61 63 79 5f  dirs" => legacy_
0550: 6d 61 6e 69 66 65 73 74 5f 64 69 72 73 2c 0a 20  manifest_dirs,. 
0560: 20 20 20 20 20 20 20 22 69 6e 70 75 74 2d 74 61         "input-ta
0570: 72 62 61 6c 6c 73 22 20 3d 3e 20 69 6e 70 75 74  rballs" => input
0580: 5f 74 61 72 62 61 6c 6c 73 2c 0a 20 20 20 20 20  _tarballs,.     
0590: 20 20 20 22 6e 6f 6e 2d 69 6e 73 74 61 6c 6c 65     "non-installe
05a0: 64 2d 6f 76 65 72 6c 61 79 22 20 3d 3e 20 6e 6f  d-overlay" => no
05b0: 6e 5f 69 6e 73 74 61 6c 6c 65 64 5f 6f 76 65 72  n_installed_over
05c0: 6c 61 79 2c 0a 20 20 20 20 20 20 20 20 22 77 6f  lay,.        "wo
05d0: 72 6b 2d 64 69 72 22 20 3d 3e 20 77 6f 72 6b 5f  rk-dir" => work_
05e0: 64 69 72 2c 0a 20 20 20 20 20 20 20 20 22 6f 75  dir,.        "ou
05f0: 74 70 75 74 2d 64 69 72 22 20 3d 3e 20 6f 75 74  tput-dir" => out
0600: 70 75 74 5f 64 69 72 2c 0a 20 20 20 20 7d 29 3b  put_dir,.    });
0610: 0a 0a 20 20 20 20 63 6f 6d 62 69 6e 65 72 2e 72  ..    combiner.r
0620: 75 6e 28 29 2e 63 68 61 69 6e 5f 65 72 72 28 7c  un().chain_err(|
0630: 7c 20 22 66 61 69 6c 65 64 20 74 6f 20 63 6f 6d  | "failed to com
0640: 62 69 6e 65 20 69 6e 73 74 61 6c 6c 65 72 73 22  bine installers"
0650: 29 0a 7d 0a 0a 66 6e 20 67 65 6e 65 72 61 74 65  ).}..fn generate
0660: 28 6d 61 74 63 68 65 73 3a 20 26 41 72 67 4d 61  (matches: &ArgMa
0670: 74 63 68 65 73 29 20 2d 3e 20 52 65 73 75 6c 74  tches) -> Result
0680: 3c 28 29 3e 20 7b 0a 20 20 20 20 6c 65 74 20 67  <()> {.    let g
0690: 65 6e 65 72 61 74 6f 72 20 3d 20 70 61 72 73 65  enerator = parse
06a0: 21 28 6d 61 74 63 68 65 73 20 3d 3e 20 69 6e 73  !(matches => ins
06b0: 74 61 6c 6c 65 72 3a 3a 47 65 6e 65 72 61 74 6f  taller::Generato
06c0: 72 20 7b 0a 20 20 20 20 20 20 20 20 22 70 72 6f  r {.        "pro
06d0: 64 75 63 74 2d 6e 61 6d 65 22 20 3d 3e 20 70 72  duct-name" => pr
06e0: 6f 64 75 63 74 5f 6e 61 6d 65 2c 0a 20 20 20 20  oduct_name,.    
06f0: 20 20 20 20 22 63 6f 6d 70 6f 6e 65 6e 74 2d 6e      "component-n
0700: 61 6d 65 22 20 3d 3e 20 63 6f 6d 70 6f 6e 65 6e  ame" => componen
0710: 74 5f 6e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20  t_name,.        
0720: 22 70 61 63 6b 61 67 65 2d 6e 61 6d 65 22 20 3d  "package-name" =
0730: 3e 20 70 61 63 6b 61 67 65 5f 6e 61 6d 65 2c 0a  > package_name,.
0740: 20 20 20 20 20 20 20 20 22 72 65 6c 2d 6d 61 6e          "rel-man
0750: 69 66 65 73 74 2d 64 69 72 22 20 3d 3e 20 72 65  ifest-dir" => re
0760: 6c 5f 6d 61 6e 69 66 65 73 74 5f 64 69 72 2c 0a  l_manifest_dir,.
0770: 20 20 20 20 20 20 20 20 22 73 75 63 63 65 73 73          "success
0780: 2d 6d 65 73 73 61 67 65 22 20 3d 3e 20 73 75 63  -message" => suc
0790: 63 65 73 73 5f 6d 65 73 73 61 67 65 2c 0a 20 20  cess_message,.  
07a0: 20 20 20 20 20 20 22 6c 65 67 61 63 79 2d 6d 61        "legacy-ma
07b0: 6e 69 66 65 73 74 2d 64 69 72 73 22 20 3d 3e 20  nifest-dirs" => 
07c0: 6c 65 67 61 63 79 5f 6d 61 6e 69 66 65 73 74 5f  legacy_manifest_
07d0: 64 69 72 73 2c 0a 20 20 20 20 20 20 20 20 22 6e  dirs,.        "n
07e0: 6f 6e 2d 69 6e 73 74 61 6c 6c 65 64 2d 6f 76 65  on-installed-ove
07f0: 72 6c 61 79 22 20 3d 3e 20 6e 6f 6e 5f 69 6e 73  rlay" => non_ins
0800: 74 61 6c 6c 65 64 5f 6f 76 65 72 6c 61 79 2c 0a  talled_overlay,.
0810: 20 20 20 20 20 20 20 20 22 62 75 6c 6b 2d 64 69          "bulk-di
0820: 72 73 22 20 3d 3e 20 62 75 6c 6b 5f 64 69 72 73  rs" => bulk_dirs
0830: 2c 0a 20 20 20 20 20 20 20 20 22 69 6d 61 67 65  ,.        "image
0840: 2d 64 69 72 22 20 3d 3e 20 69 6d 61 67 65 5f 64  -dir" => image_d
0850: 69 72 2c 0a 20 20 20 20 20 20 20 20 22 77 6f 72  ir,.        "wor
0860: 6b 2d 64 69 72 22 20 3d 3e 20 77 6f 72 6b 5f 64  k-dir" => work_d
0870: 69 72 2c 0a 20 20 20 20 20 20 20 20 22 6f 75 74  ir,.        "out
0880: 70 75 74 2d 64 69 72 22 20 3d 3e 20 6f 75 74 70  put-dir" => outp
0890: 75 74 5f 64 69 72 2c 0a 20 20 20 20 7d 29 3b 0a  ut_dir,.    });.
08a0: 0a 20 20 20 20 67 65 6e 65 72 61 74 6f 72 2e 72  .    generator.r
08b0: 75 6e 28 29 2e 63 68 61 69 6e 5f 65 72 72 28 7c  un().chain_err(|
08c0: 7c 20 22 66 61 69 6c 65 64 20 74 6f 20 67 65 6e  | "failed to gen
08d0: 65 72 61 74 65 20 69 6e 73 74 61 6c 6c 65 72 22  erate installer"
08e0: 29 0a 7d 0a 0a 66 6e 20 73 63 72 69 70 74 28 6d  ).}..fn script(m
08f0: 61 74 63 68 65 73 3a 20 26 41 72 67 4d 61 74 63  atches: &ArgMatc
0900: 68 65 73 29 20 2d 3e 20 52 65 73 75 6c 74 3c 28  hes) -> Result<(
0910: 29 3e 20 7b 0a 20 20 20 20 6c 65 74 20 73 63 72  )> {.    let scr
0920: 69 70 74 65 72 20 3d 20 70 61 72 73 65 21 28 6d  ipter = parse!(m
0930: 61 74 63 68 65 73 20 3d 3e 20 69 6e 73 74 61 6c  atches => instal
0940: 6c 65 72 3a 3a 53 63 72 69 70 74 65 72 20 7b 0a  ler::Scripter {.
0950: 20 20 20 20 20 20 20 20 22 70 72 6f 64 75 63 74          "product
0960: 2d 6e 61 6d 65 22 20 3d 3e 20 70 72 6f 64 75 63  -name" => produc
0970: 74 5f 6e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20  t_name,.        
0980: 22 72 65 6c 2d 6d 61 6e 69 66 65 73 74 2d 64 69  "rel-manifest-di
0990: 72 22 20 3d 3e 20 72 65 6c 5f 6d 61 6e 69 66 65  r" => rel_manife
09a0: 73 74 5f 64 69 72 2c 0a 20 20 20 20 20 20 20 20  st_dir,.        
09b0: 22 73 75 63 63 65 73 73 2d 6d 65 73 73 61 67 65  "success-message
09c0: 22 20 3d 3e 20 73 75 63 63 65 73 73 5f 6d 65 73  " => success_mes
09d0: 73 61 67 65 2c 0a 20 20 20 20 20 20 20 20 22 6c  sage,.        "l
09e0: 65 67 61 63 79 2d 6d 61 6e 69 66 65 73 74 2d 64  egacy-manifest-d
09f0: 69 72 73 22 20 3d 3e 20 6c 65 67 61 63 79 5f 6d  irs" => legacy_m
0a00: 61 6e 69 66 65 73 74 5f 64 69 72 73 2c 0a 20 20  anifest_dirs,.  
0a10: 20 20 20 20 20 20 22 6f 75 74 70 75 74 2d 73 63        "output-sc
0a20: 72 69 70 74 22 20 3d 3e 20 6f 75 74 70 75 74 5f  ript" => output_
0a30: 73 63 72 69 70 74 2c 0a 20 20 20 20 7d 29 3b 0a  script,.    });.
0a40: 0a 20 20 20 20 73 63 72 69 70 74 65 72 2e 72 75  .    scripter.ru
0a50: 6e 28 29 2e 63 68 61 69 6e 5f 65 72 72 28 7c 7c  n().chain_err(||
0a60: 20 22 66 61 69 6c 65 64 20 74 6f 20 67 65 6e 65   "failed to gene
0a70: 72 61 74 65 20 69 6e 73 74 61 6c 6c 61 74 69 6f  rate installatio
0a80: 6e 20 73 63 72 69 70 74 22 29 0a 7d 0a 0a 66 6e  n script").}..fn
0a90: 20 74 61 72 62 61 6c 6c 28 6d 61 74 63 68 65 73   tarball(matches
0aa0: 3a 20 26 41 72 67 4d 61 74 63 68 65 73 29 20 2d  : &ArgMatches) -
0ab0: 3e 20 52 65 73 75 6c 74 3c 28 29 3e 20 7b 0a 20  > Result<()> {. 
0ac0: 20 20 20 6c 65 74 20 74 61 72 62 61 6c 6c 65 72     let tarballer
0ad0: 20 3d 20 70 61 72 73 65 21 28 6d 61 74 63 68 65   = parse!(matche
0ae0: 73 20 3d 3e 20 69 6e 73 74 61 6c 6c 65 72 3a 3a  s => installer::
0af0: 54 61 72 62 61 6c 6c 65 72 20 7b 0a 20 20 20 20  Tarballer {.    
0b00: 20 20 20 20 22 69 6e 70 75 74 22 20 3d 3e 20 69      "input" => i
0b10: 6e 70 75 74 2c 0a 20 20 20 20 20 20 20 20 22 6f  nput,.        "o
0b20: 75 74 70 75 74 22 20 3d 3e 20 6f 75 74 70 75 74  utput" => output
0b30: 2c 0a 20 20 20 20 20 20 20 20 22 77 6f 72 6b 2d  ,.        "work-
0b40: 64 69 72 22 20 3d 3e 20 77 6f 72 6b 5f 64 69 72  dir" => work_dir
0b50: 2c 0a 20 20 20 20 7d 29 3b 0a 0a 20 20 20 20 74  ,.    });..    t
0b60: 61 72 62 61 6c 6c 65 72 2e 72 75 6e 28 29 2e 63  arballer.run().c
0b70: 68 61 69 6e 5f 65 72 72 28 7c 7c 20 22 66 61 69  hain_err(|| "fai
0b80: 6c 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20  led to generate 
0b90: 74 61 72 62 61 6c 6c 73 22 29 0a 7d 0a           tarballs").}.