From fd0cb67fbc9b93873193fadf6fe7cadbdce58116 Mon Sep 17 00:00:00 2001 From: Daniel Wagner-Hall Date: Mon, 10 May 2021 15:42:58 +0100 Subject: [PATCH] Ensure newlines after every load (#730) Co-authored-by: UebelAndre --- crate_universe/src/renderer.rs | 55 +++++++++++++++++-- .../src/templates/defs.bzl.template | 5 +- crate_universe/src/testing.rs | 55 +++++++++++++++++++ 3 files changed, 108 insertions(+), 7 deletions(-) diff --git a/crate_universe/src/renderer.rs b/crate_universe/src/renderer.rs index e6ecf1efff..3e747a99c7 100644 --- a/crate_universe/src/renderer.rs +++ b/crate_universe/src/renderer.rs @@ -366,10 +366,7 @@ impl Renderer { crate_data.crate_context.pkg_name, crate_data.crate_context.pkg_version )); let mut build_file = File::create(&build_file_path).with_context(|| { - format!( - "Could not create BUILD file: {}", - build_file_path.display() - ) + format!("Could not create BUILD file: {}", build_file_path.display()) })?; write!(build_file, "{}\n", &build_file_content)?; } @@ -604,6 +601,56 @@ mod tests { assert_eq!(output, expected_repository_rule); } + #[test] + fn render_http_and_git() { + let renderer = { + let mut renderer = mock_renderer(true); + renderer + .context + .transitive_renderable_packages + .push(RenderablePackage { + crate_context: testing::maplit_crate_context(false), + per_triple_metadata: BTreeMap::new(), + is_proc_macro: false, + }); + renderer + }; + + let mut output = Vec::new(); + + renderer + .render_workspaces(&mut output) + .expect("Error rendering"); + + let output = String::from_utf8(output).expect("Non-UTF8 output"); + + let expected_repository_rule = indoc! { r#" + load("@bazel_tools//tools/build_defs/repo:git.bzl", "new_git_repository") + load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + + def pinned_rust_install(): + new_git_repository( + name = "rule_prefix__lazy_static__1_4_0", + strip_prefix = "", + build_file = Label("//:BUILD.lazy_static-1.4.0.bazel"), + remote = "https://github.com/rust-lang-nursery/lazy-static.rs.git", + commit = "421669662b35fcb455f2902daed2e20bbbba79b6", + ) + + http_archive( + name = "rule_prefix__maplit__1_0_2", + build_file = Label("//:BUILD.maplit-1.0.2.bazel"), + sha256 = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d", + strip_prefix = "maplit-1.0.2", + type = "tar.gz", + url = "https://crates.io/api/v1/crates/maplit/1.0.2/download", + ) + + "# }; + + assert_eq!(output, expected_repository_rule); + } + #[test] fn render_no_crates() { let renderer = Renderer::new( diff --git a/crate_universe/src/templates/defs.bzl.template b/crate_universe/src/templates/defs.bzl.template index 356d697083..c28572e9f8 100644 --- a/crate_universe/src/templates/defs.bzl.template +++ b/crate_universe/src/templates/defs.bzl.template @@ -1,17 +1,16 @@ {%- for crate_data in crates -%} {%- if crate_data.crate_context.source_details.git_data -%} load("@bazel_tools//tools/build_defs/repo:git.bzl", "new_git_repository") -{%- break %} +{% break %} {%- endif %} {%- endfor %} {%- for crate_data in crates -%} {%- if not crate_data.crate_context.source_details.git_data -%} load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") -{%- break %} +{% break %} {%- endif %} {%- endfor %} {%- if crates %} - {% endif -%} def pinned_rust_install(): {%- if not crates %} diff --git a/crate_universe/src/testing.rs b/crate_universe/src/testing.rs index e17e9d2f70..261d6a6895 100644 --- a/crate_universe/src/testing.rs +++ b/crate_universe/src/testing.rs @@ -57,3 +57,58 @@ pub(crate) fn lazy_static_crate_context(git: bool) -> CrateContext { is_proc_macro: false, } } + +pub(crate) fn maplit_crate_context(git: bool) -> CrateContext { + let git_data = if git { + Some(GitRepo { + remote: String::from("https://github.com/bluss/maplit.git"), + commit: String::from("04936f703da907bc4ffdaced121e4cfd5ecbaec6"), + path_to_crate_root: None, + }) + } else { + None + }; + + CrateContext { + pkg_name: String::from("maplit"), + pkg_version: Version::parse("1.0.2").unwrap(), + edition: String::from("2015"), + raze_settings: Default::default(), + canonical_additional_build_file: None, + default_deps: CrateDependencyContext { + dependencies: vec![], + proc_macro_dependencies: vec![], + data_dependencies: vec![], + build_dependencies: vec![], + build_proc_macro_dependencies: vec![], + build_data_dependencies: vec![], + dev_dependencies: vec![], + aliased_dependencies: vec![], + }, + source_details: SourceDetails { git_data }, + sha256: Some(String::from( + "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d", + )), + registry_url: String::from("https://registry.url/"), + expected_build_path: String::from("UNUSED"), + lib_target_name: Some(String::from("UNUSED")), + license: LicenseData::default(), + features: vec![], + workspace_path_to_crate: String::from("UNUSED"), + workspace_member_dependents: vec![], + workspace_member_dev_dependents: vec![], + workspace_member_build_dependents: vec![], + is_workspace_member_dependency: false, + is_binary_dependency: false, + targets: vec![BuildableTarget { + kind: String::from("lib"), + name: String::from("maplit"), + path: String::from("src/lib.rs"), + edition: String::from("2015"), + }], + build_script_target: None, + targeted_deps: vec![], + links: None, + is_proc_macro: false, + } +}