cli/
legacy.rs

1//! # legacy
2//!
3//! Support legacy features.
4//!
5
6#[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                    // delete old directory (will only work if empty)
55                    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}