diff --git a/src/command/build.rs b/src/command/build.rs index 1f94471a..feaed551 100644 --- a/src/command/build.rs +++ b/src/command/build.rs @@ -28,6 +28,7 @@ pub struct Build { pub crate_data: manifest::CrateData, pub scope: Option, pub disable_dts: bool, + pub skip_gitignore: bool, pub target: Target, pub profile: BuildProfile, pub mode: InstallMode, @@ -132,6 +133,10 @@ pub struct BuildOptions { /// this flag will disable generating this TypeScript file. pub disable_dts: bool, + #[structopt(long = "skip-gitignore")] + /// Skips generating .gitignore file. + pub skip_gitignore: bool, + #[structopt(long = "target", short = "t", default_value = "bundler")] /// Sets the target environment. [possible values: bundler, nodejs, web, no-modules] pub target: Target, @@ -173,6 +178,7 @@ impl Default for BuildOptions { scope: None, mode: InstallMode::default(), disable_dts: false, + skip_gitignore: false, target: Target::default(), debug: false, dev: false, @@ -217,6 +223,7 @@ impl Build { crate_data, scope: build_opts.scope, disable_dts: build_opts.disable_dts, + skip_gitignore: build_opts.skip_gitignore, target: build_opts.target, profile, mode: build_opts.mode, @@ -334,7 +341,7 @@ impl Build { fn step_create_dir(&mut self) -> Result<(), Error> { info!("Creating a pkg directory..."); - create_pkg_dir(&self.out_dir)?; + create_pkg_dir(&self.out_dir, self.skip_gitignore)?; info!("Created a pkg directory at {:#?}.", &self.crate_path); Ok(()) } diff --git a/src/command/utils.rs b/src/command/utils.rs index 0158abf7..82aa7ff7 100644 --- a/src/command/utils.rs +++ b/src/command/utils.rs @@ -36,10 +36,12 @@ fn find_manifest_from_cwd() -> Result { } /// Construct our `pkg` directory in the crate. -pub fn create_pkg_dir(out_dir: &Path) -> Result<(), failure::Error> { +pub fn create_pkg_dir(out_dir: &Path, skip_gitignore: bool) -> Result<(), failure::Error> { let _ = fs::remove_file(out_dir.join("package.json")); // Clean up package.json from previous runs fs::create_dir_all(&out_dir)?; - fs::write(out_dir.join(".gitignore"), "*")?; + if !skip_gitignore { + fs::write(out_dir.join(".gitignore"), "*")?; + }; Ok(()) } diff --git a/tests/all/manifest.rs b/tests/all/manifest.rs index c5f0fbf2..036023aa 100644 --- a/tests/all/manifest.rs +++ b/tests/all/manifest.rs @@ -77,7 +77,7 @@ fn it_creates_a_package_json_default_path() { let fixture = fixture::js_hello_world(); let out_dir = fixture.path.join("pkg"); let crate_data = manifest::CrateData::new(&fixture.path, None).unwrap(); - wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); + wasm_pack::command::utils::create_pkg_dir(&out_dir, false).unwrap(); assert!(crate_data .write_package_json(&out_dir, &None, false, Target::Bundler) .is_ok()); @@ -113,7 +113,7 @@ fn it_creates_a_package_json_provided_path() { let fixture = fixture::js_hello_world(); let out_dir = fixture.path.join("pkg"); let crate_data = manifest::CrateData::new(&fixture.path, None).unwrap(); - wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); + wasm_pack::command::utils::create_pkg_dir(&out_dir, false).unwrap(); assert!(crate_data .write_package_json(&out_dir, &None, false, Target::Bundler) .is_ok()); @@ -142,7 +142,7 @@ fn it_creates_a_package_json_provided_path_with_scope() { let fixture = fixture::js_hello_world(); let out_dir = fixture.path.join("pkg"); let crate_data = manifest::CrateData::new(&fixture.path, None).unwrap(); - wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); + wasm_pack::command::utils::create_pkg_dir(&out_dir, false).unwrap(); assert!(crate_data .write_package_json(&out_dir, &Some("test".to_string()), false, Target::Bundler,) .is_ok()); @@ -171,7 +171,7 @@ fn it_creates_a_pkg_json_with_correct_files_on_node() { let fixture = fixture::js_hello_world(); let out_dir = fixture.path.join("pkg"); let crate_data = manifest::CrateData::new(&fixture.path, None).unwrap(); - wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); + wasm_pack::command::utils::create_pkg_dir(&out_dir, false).unwrap(); assert!(crate_data .write_package_json(&out_dir, &None, false, Target::Nodejs) .is_ok()); @@ -205,7 +205,7 @@ fn it_creates_a_pkg_json_with_correct_files_on_nomodules() { let fixture = fixture::js_hello_world(); let out_dir = fixture.path.join("pkg"); let crate_data = manifest::CrateData::new(&fixture.path, None).unwrap(); - wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); + wasm_pack::command::utils::create_pkg_dir(&out_dir, false).unwrap(); assert!(crate_data .write_package_json(&out_dir, &None, false, Target::NoModules) .is_ok()); @@ -239,7 +239,7 @@ fn it_creates_a_package_json_with_correct_files_when_out_name_is_provided() { let fixture = fixture::js_hello_world(); let out_dir = fixture.path.join("pkg"); let crate_data = manifest::CrateData::new(&fixture.path, Some("index".to_owned())).unwrap(); - wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); + wasm_pack::command::utils::create_pkg_dir(&out_dir, false).unwrap(); assert!(crate_data .write_package_json(&out_dir, &None, false, Target::Bundler) .is_ok()); @@ -271,7 +271,7 @@ fn it_creates_a_pkg_json_in_out_dir() { let fixture = fixture::js_hello_world(); let out_dir = fixture.path.join("./custom/out"); let crate_data = manifest::CrateData::new(&fixture.path, None).unwrap(); - wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); + wasm_pack::command::utils::create_pkg_dir(&out_dir, false).unwrap(); assert!(crate_data .write_package_json(&out_dir, &None, false, Target::Bundler) .is_ok()); @@ -286,7 +286,7 @@ fn it_creates_a_package_json_with_correct_keys_when_types_are_skipped() { let fixture = fixture::js_hello_world(); let out_dir = fixture.path.join("pkg"); let crate_data = manifest::CrateData::new(&fixture.path, None).unwrap(); - wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); + wasm_pack::command::utils::create_pkg_dir(&out_dir, false).unwrap(); assert!(crate_data .write_package_json(&out_dir, &None, true, Target::Bundler) .is_ok()); @@ -319,7 +319,7 @@ fn it_creates_a_package_json_with_npm_dependencies_provided_by_wasm_bindgen() { let fixture = fixture::js_hello_world(); let out_dir = fixture.path.join("pkg"); let crate_data = manifest::CrateData::new(&fixture.path, None).unwrap(); - wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); + wasm_pack::command::utils::create_pkg_dir(&out_dir, false).unwrap(); // Write a `package.json` in the out_dir, as wasm-bindgen does: utils::manifest::create_wbg_package_json( &out_dir, @@ -399,7 +399,7 @@ fn it_sets_homepage_field_if_available_in_cargo_toml() { let out_dir = fixture.path.join("pkg"); let crate_data = manifest::CrateData::new(&fixture.path, None).unwrap(); - wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); + wasm_pack::command::utils::create_pkg_dir(&out_dir, false).unwrap(); crate_data .write_package_json(&out_dir, &None, true, Target::Bundler) .unwrap(); @@ -415,7 +415,7 @@ fn it_sets_homepage_field_if_available_in_cargo_toml() { let out_dir = fixture.path.join("pkg"); let crate_data = manifest::CrateData::new(&fixture.path, None).unwrap(); - wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); + wasm_pack::command::utils::create_pkg_dir(&out_dir, false).unwrap(); crate_data .write_package_json(&out_dir, &None, true, Target::Bundler) .unwrap(); @@ -454,7 +454,7 @@ fn it_sets_keywords_field_if_available_in_cargo_toml() { let out_dir = fixture.path.join("pkg"); let crate_data = manifest::CrateData::new(&fixture.path, None).unwrap(); - wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); + wasm_pack::command::utils::create_pkg_dir(&out_dir, false).unwrap(); crate_data .write_package_json(&out_dir, &None, true, Target::Bundler) .unwrap(); @@ -472,7 +472,7 @@ fn it_sets_keywords_field_if_available_in_cargo_toml() { let out_dir = fixture.path.join("pkg"); let crate_data = manifest::CrateData::new(&fixture.path, None).unwrap(); - wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); + wasm_pack::command::utils::create_pkg_dir(&out_dir, false).unwrap(); crate_data .write_package_json(&out_dir, &None, true, Target::Bundler) .unwrap(); @@ -572,7 +572,7 @@ fn it_lists_license_files_in_files_field_of_package_json() { let crate_data = manifest::CrateData::new(&fixture.path, None).unwrap(); - wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); + wasm_pack::command::utils::create_pkg_dir(&out_dir, false).unwrap(); license::copy_from_crate(&crate_data, &fixture.path, &out_dir).unwrap(); crate_data .write_package_json(&out_dir, &None, false, Target::Bundler)