Simplify the config file format
This commit is contained in:
		@@ -1,25 +1,18 @@
 | 
			
		||||
packages:
 | 
			
		||||
  - name: Apt
 | 
			
		||||
    fetch:
 | 
			
		||||
      exe: sudo
 | 
			
		||||
      params:
 | 
			
		||||
      - apt
 | 
			
		||||
      - update
 | 
			
		||||
      current_dir: null
 | 
			
		||||
      env: {}
 | 
			
		||||
    compile: null
 | 
			
		||||
       - exe: sudo
 | 
			
		||||
         params:
 | 
			
		||||
          - apt
 | 
			
		||||
          - update
 | 
			
		||||
    install:
 | 
			
		||||
      exe: sudo
 | 
			
		||||
      params:
 | 
			
		||||
      - apt
 | 
			
		||||
      - upgrade
 | 
			
		||||
      - --yes
 | 
			
		||||
      current_dir: null
 | 
			
		||||
      env: {}
 | 
			
		||||
    post_install:
 | 
			
		||||
      - exe: sudo
 | 
			
		||||
        params:
 | 
			
		||||
        - apt
 | 
			
		||||
        - autoremove
 | 
			
		||||
        current_dir: null
 | 
			
		||||
        env: {}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,14 +1,12 @@
 | 
			
		||||
packages:
 | 
			
		||||
  - name: Flatpack
 | 
			
		||||
    fetch:
 | 
			
		||||
      exe: flatpak
 | 
			
		||||
      params:
 | 
			
		||||
      - update
 | 
			
		||||
      - --no-deploy
 | 
			
		||||
      - --assumeyes
 | 
			
		||||
      - --noninteractive
 | 
			
		||||
      current_dir: null
 | 
			
		||||
      env: {}
 | 
			
		||||
      - exe: flatpak
 | 
			
		||||
        params:
 | 
			
		||||
        - update
 | 
			
		||||
        - --no-deploy
 | 
			
		||||
        - --assumeyes
 | 
			
		||||
        - --noninteractive
 | 
			
		||||
    install:
 | 
			
		||||
      exe: flatpak
 | 
			
		||||
      params:
 | 
			
		||||
@@ -16,8 +14,6 @@ packages:
 | 
			
		||||
      - --no-pull
 | 
			
		||||
      - --assumeyes
 | 
			
		||||
      - --noninteractive
 | 
			
		||||
      current_dir: null
 | 
			
		||||
      env: {}
 | 
			
		||||
    post-install:
 | 
			
		||||
      - exe: flatpak
 | 
			
		||||
        params:
 | 
			
		||||
@@ -25,5 +21,3 @@ packages:
 | 
			
		||||
        - --unused
 | 
			
		||||
        - --assumeyes
 | 
			
		||||
        - --noninteractive
 | 
			
		||||
        current_dir: null
 | 
			
		||||
        env: {}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,5 +4,3 @@ packages:
 | 
			
		||||
      exe: pipx
 | 
			
		||||
      params:
 | 
			
		||||
      - upgrade-all
 | 
			
		||||
      current_dir: null
 | 
			
		||||
      env: {}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,13 +4,9 @@ packages:
 | 
			
		||||
      exe: rustup
 | 
			
		||||
      params:
 | 
			
		||||
      - update
 | 
			
		||||
      current_dir: null
 | 
			
		||||
      env: {}
 | 
			
		||||
  - name: Cargo
 | 
			
		||||
    install:
 | 
			
		||||
      exe: cargo
 | 
			
		||||
      params:
 | 
			
		||||
      - install-update
 | 
			
		||||
      - -a
 | 
			
		||||
      current_dir: null
 | 
			
		||||
      env: {}
 | 
			
		||||
 
 | 
			
		||||
@@ -28,8 +28,8 @@ pub struct System {
 | 
			
		||||
#[derive(Debug, Serialize, Deserialize)]
 | 
			
		||||
pub struct Package {
 | 
			
		||||
    pub name: String,
 | 
			
		||||
    fetch: Option<Cmd>,
 | 
			
		||||
    compile: Option<Cmd>,
 | 
			
		||||
    fetch: Option<Vec<Cmd>>,
 | 
			
		||||
    compile: Option<Vec<Cmd>>,
 | 
			
		||||
    install: Cmd,
 | 
			
		||||
    post_install: Option<Vec<Cmd>>,
 | 
			
		||||
    // deps or rDeps : Tree
 | 
			
		||||
@@ -39,9 +39,9 @@ pub struct Package {
 | 
			
		||||
#[derive(Debug, Clone, Serialize, Deserialize)]
 | 
			
		||||
struct Cmd {
 | 
			
		||||
    exe: String,
 | 
			
		||||
    params: Vec<String>,
 | 
			
		||||
    params: Option<Vec<String>>,
 | 
			
		||||
    current_dir: Option<PathBuf>,
 | 
			
		||||
    env: HashMap<String, String>,
 | 
			
		||||
    env: Option<HashMap<String, String>>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Debug, Clone, Serialize, Deserialize)]
 | 
			
		||||
@@ -131,9 +131,9 @@ impl Updater {
 | 
			
		||||
                compile: None,
 | 
			
		||||
                install: Cmd {
 | 
			
		||||
                    exe: "rustup".to_owned(),
 | 
			
		||||
                    params: vec!["self".to_owned(), "update".to_owned()],
 | 
			
		||||
                    params: Some(vec!["self".to_owned(), "update".to_owned()]),
 | 
			
		||||
                    current_dir: None,
 | 
			
		||||
                    env: HashMap::new(),
 | 
			
		||||
                    env: None,
 | 
			
		||||
                },
 | 
			
		||||
                post_install: None,
 | 
			
		||||
            });
 | 
			
		||||
@@ -144,9 +144,9 @@ impl Updater {
 | 
			
		||||
                compile: None,
 | 
			
		||||
                install: Cmd {
 | 
			
		||||
                    exe: "cargo".to_owned(),
 | 
			
		||||
                    params: vec!["install-update".to_owned(), "-a".to_owned()],
 | 
			
		||||
                    params: Some(vec!["install-update".to_owned(), "-a".to_owned()]),
 | 
			
		||||
                    current_dir: None,
 | 
			
		||||
                    env: HashMap::new(),
 | 
			
		||||
                    env: None,
 | 
			
		||||
                },
 | 
			
		||||
                post_install: None,
 | 
			
		||||
            });
 | 
			
		||||
@@ -229,17 +229,19 @@ impl Updater {
 | 
			
		||||
impl Package {
 | 
			
		||||
    pub fn fetch(&self, opt: &Opt) -> Result<()> {
 | 
			
		||||
        if let Some(fetch) = &self.fetch {
 | 
			
		||||
            let cmd = fetch.clone().prepare(opt);
 | 
			
		||||
            let exit_status = cmd
 | 
			
		||||
                .execute(opt)
 | 
			
		||||
                .map_err(|err| MyError::new(MyErrorKind::Fetch, err, cmd.clone()))?;
 | 
			
		||||
            for cmd in fetch {
 | 
			
		||||
                let cmd = cmd.clone().prepare(opt);
 | 
			
		||||
                let exit_status = cmd
 | 
			
		||||
                    .execute(opt)
 | 
			
		||||
                    .map_err(|err| MyError::new(MyErrorKind::Fetch, err, cmd.clone()))?;
 | 
			
		||||
 | 
			
		||||
            if !exit_status.success() {
 | 
			
		||||
                return Err(MyError::new(
 | 
			
		||||
                    MyErrorKind::Fetch,
 | 
			
		||||
                    io::Error::new(io::ErrorKind::Other, format!("{}", exit_status)),
 | 
			
		||||
                    cmd.clone(),
 | 
			
		||||
                ));
 | 
			
		||||
                if !exit_status.success() {
 | 
			
		||||
                    return Err(MyError::new(
 | 
			
		||||
                        MyErrorKind::Fetch,
 | 
			
		||||
                        io::Error::new(io::ErrorKind::Other, format!("{}", exit_status)),
 | 
			
		||||
                        cmd.clone(),
 | 
			
		||||
                    ));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        Ok(())
 | 
			
		||||
@@ -247,17 +249,19 @@ impl Package {
 | 
			
		||||
 | 
			
		||||
    pub fn compile(&self, opt: &Opt) -> Result<()> {
 | 
			
		||||
        if let Some(compile) = &self.compile {
 | 
			
		||||
            let cmd = compile.clone().prepare(opt);
 | 
			
		||||
            let exit_status = cmd
 | 
			
		||||
                .execute(opt)
 | 
			
		||||
                .map_err(|err| MyError::new(MyErrorKind::Compile, err, cmd.clone()))?;
 | 
			
		||||
            for cmd in compile {
 | 
			
		||||
                let cmd = cmd.clone().prepare(opt);
 | 
			
		||||
                let exit_status = cmd
 | 
			
		||||
                    .execute(opt)
 | 
			
		||||
                    .map_err(|err| MyError::new(MyErrorKind::Compile, err, cmd.clone()))?;
 | 
			
		||||
 | 
			
		||||
            if !exit_status.success() {
 | 
			
		||||
                return Err(MyError::new(
 | 
			
		||||
                    MyErrorKind::Compile,
 | 
			
		||||
                    io::Error::new(io::ErrorKind::Other, format!("{}", exit_status)),
 | 
			
		||||
                    cmd.clone(),
 | 
			
		||||
                ));
 | 
			
		||||
                if !exit_status.success() {
 | 
			
		||||
                    return Err(MyError::new(
 | 
			
		||||
                        MyErrorKind::Compile,
 | 
			
		||||
                        io::Error::new(io::ErrorKind::Other, format!("{}", exit_status)),
 | 
			
		||||
                        cmd.clone(),
 | 
			
		||||
                    ));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        Ok(())
 | 
			
		||||
@@ -304,23 +308,23 @@ impl Cmd {
 | 
			
		||||
    fn new() -> Cmd {
 | 
			
		||||
        Cmd {
 | 
			
		||||
            exe: "".into(),
 | 
			
		||||
            params: vec![],
 | 
			
		||||
            params: None,
 | 
			
		||||
            current_dir: None,
 | 
			
		||||
            env: HashMap::new(),
 | 
			
		||||
            env: None,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn prepare(self, opt: &Opt) -> ActualCmd {
 | 
			
		||||
        let params = self.params;
 | 
			
		||||
 | 
			
		||||
        let mut env = self.env;
 | 
			
		||||
        if !env.contains_key("PATH") {
 | 
			
		||||
            env.insert("PATH".to_owned(), std::env!("PATH").to_owned());
 | 
			
		||||
        }
 | 
			
		||||
        // TODO: I’m not convinced by helping the user and only escaping the PATH. Either all or none
 | 
			
		||||
        // This means I need to know how to know which values to pass for (at least) rustup & cargo
 | 
			
		||||
        let env = match self.env {
 | 
			
		||||
            Some(env) => env,
 | 
			
		||||
            None => HashMap::from([("PATH".to_owned(), std::env!("PATH").to_owned())]),
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        ActualCmd {
 | 
			
		||||
            exe: self.exe,
 | 
			
		||||
            params,
 | 
			
		||||
            params: self.params.unwrap_or_default(),
 | 
			
		||||
            current_dir: self.current_dir,
 | 
			
		||||
            env,
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user