1#[cfg(test)]
7#[path = "legacy_test.rs"]
8mod legacy_test;
9
10use std::env;
11use std::fs::copy;
12use std::path::PathBuf;
13
14fn get_legacy_cargo_make_home() -> Option<PathBuf> {
15 match dirs_next::home_dir() {
16 Some(directory) => Some(directory.join(".cargo-make")),
17 None => None,
18 }
19}
20
21pub(crate) fn get_cargo_make_home() -> Option<PathBuf> {
22 match env::var("CARGO_MAKE_HOME") {
23 Ok(directory) => Some(PathBuf::from(directory)),
24 _ => get_legacy_cargo_make_home(),
25 }
26}
27
28fn migrate_from_directory(
29 target_directory: PathBuf,
30 file: &str,
31 legacy_directory: &PathBuf,
32) -> bool {
33 let legacy_file = legacy_directory.join(file);
34
35 if legacy_file.exists() {
36 let exists = if target_directory.exists() {
37 true
38 } else {
39 match fsio::directory::create(&target_directory) {
40 Ok(_) => true,
41 _ => false,
42 }
43 };
44
45 if exists {
46 let target_file = target_directory.join(file);
47 info!("Legacy cargo-make file: {:#?} exists, target directory: {:#?} exists, copy to: {:#?}", &legacy_file, &target_directory, &target_file);
48
49 match copy(&legacy_file, &target_file) {
50 Ok(_) => {
51 info!("Delete legacy cargo-make file: {:#?}", &legacy_file);
52 fsio::file::delete(&legacy_file).unwrap_or(());
53
54 fsio::directory::delete(legacy_directory).unwrap_or(());
56
57 true
58 }
59 Err(error) => {
60 info!(
61 "Error while copying legacy file: {:#?} to: {:#?}, error: {:#?}",
62 &legacy_file, &target_file, &error
63 );
64 false
65 }
66 }
67 } else {
68 false
69 }
70 } else {
71 true
72 }
73}
74
75pub(crate) fn migrate(target_directory: PathBuf, file: &str) -> bool {
76 debug!(
77 "Legacy cargo-make target_directory: {:#?} file: {:#?} ",
78 &target_directory, &file
79 );
80
81 match get_legacy_cargo_make_home() {
82 Some(directory) => migrate_from_directory(target_directory, &file, &directory),
83 None => true,
84 }
85}
86
87pub(crate) fn show_deprecated_attriute_warning(old_attribute: &str, new_attribute: &str) {
88 warn!(
89 "[DEPRECATED] The attribute '{}' has been replaced with '{}'. Please update your makefile.",
90 old_attribute, new_attribute
91 );
92}