coliru

A minimal, flexible, dotfile installer
git clone https://git.ashermorgan.net/coliru/
Log | Files | Refs | README

commit a2aea4ef70a52a0ab5363d752656f63bd2002fc6
parent 1c7964fda8eef1697372109a29eedd1e4ba050ee
Author: Asher Morgan <59518073+ashermorgan@users.noreply.github.com>
Date:   Thu, 27 Jun 2024 14:00:07 -0700

Add bashrc file to example manifest

Demonstrates and tests having multiple link commands in one step.

Diffstat:
MREADME.md | 12++++++++----
Aexamples/bashrc | 1+
Mexamples/manifest-windows-test.yml | 4+++-
Mexamples/manifest.yml | 4+++-
Msrc/manifest.rs | 4++++
Mtests/basic.rs | 38+++++++++++++++++++++++++++++++++++++-
6 files changed, 56 insertions(+), 7 deletions(-)

diff --git a/README.md b/README.md @@ -41,12 +41,14 @@ more details): steps: - copy: - src: gitconfig - dst: ~/.gitconfig.coliru + dst: ~/.gitconfig tags: [ windows, linux, macos ] - link: + - src: bashrc + dst: ~/.bashrc - src: vimrc - dst: ~/.vimrc.coliru # Will create symbolic link on Linux & MacOS + dst: ~/.vimrc # Will create symbolic links on Linux & MacOS run: - src: script.sh prefix: sh # unecessary on Unix if script.sh is executable @@ -55,7 +57,7 @@ steps: - link: - src: vimrc - dst: ~/_vimrc.coliru # Will create hard link on Windows + dst: ~/_vimrc # Will create hard link on Windows run: - src: script.bat postfix: arg1 $COLIRU_RULES @@ -69,4 +71,6 @@ rules. If no tags rules are provided, all manifest steps will be executed. Each tag rule contains a comma separated list of tags that will satisfy the rule. A leading caret (`^`) will negate the entire rule. In other words, commas correspond to OR, carets to NOT, and the spaces between rules to AND. So the tag -rules `A B,C ^D,E` are equivalent to `A && (B || C) && !(D || E)`. +rules `A B,C ^D,E` are equivalent to `A && (B || C) && !(D || E)`. Common tags +include supported operating systems and whether the step requires elevated +privileges. diff --git a/examples/bashrc b/examples/bashrc @@ -0,0 +1 @@ +alias ll='ls -l' diff --git a/examples/manifest-windows-test.yml b/examples/manifest-windows-test.yml @@ -8,8 +8,10 @@ steps: tags: [ windows, linux, macos ] - link: + - src: bashrc + dst: .bashrc.coliru - src: vimrc - dst: .vimrc.coliru # Will create symbolic link on Linux & MacOS + dst: .vimrc.coliru # Will create symbolic links on Linux & MacOS run: - src: script.sh prefix: sh # unecessary on Unix if script.sh is executable diff --git a/examples/manifest.yml b/examples/manifest.yml @@ -19,8 +19,10 @@ steps: tags: [ windows, linux, macos ] - link: + - src: bashrc + dst: ~/.bashrc.coliru - src: vimrc - dst: ~/.vimrc.coliru # Will create symbolic link on Linux & MacOS + dst: ~/.vimrc.coliru # Will create symbolic links on Linux & MacOS run: - src: script.sh prefix: sh # unecessary on Unix if script.sh is executable diff --git a/src/manifest.rs b/src/manifest.rs @@ -113,6 +113,10 @@ mod tests { copy: vec![], link: vec![ CopyLinkOptions { + src: String::from("bashrc"), + dst: String::from("~/.bashrc.coliru"), + }, + CopyLinkOptions { src: String::from("vimrc"), dst: String::from("~/.vimrc.coliru"), }, diff --git a/tests/basic.rs b/tests/basic.rs @@ -19,6 +19,7 @@ fn manifest_1(dir: &Path) { copy_file("manifest-windows-test.yml"); // Create simplified config files + write_file(&dir.join("bashrc"), "bash #1"); write_file(&dir.join("gitconfig"), "git #1"); write_file(&dir.join("vimrc"), "vim #1"); @@ -56,6 +57,7 @@ fn test_standard() { let expected = "\ [1/3] Copy gitconfig to ~/.gitconfig.coliru +[2/3] Link bashrc to ~/.bashrc.coliru [2/3] Link vimrc to ~/.vimrc.coliru [2/3] Run sh script.sh arg1 linux script.sh called with arg1 linux @@ -64,12 +66,15 @@ script.sh called with arg1 linux assert_eq!(&stderr_to_string(&mut cmd), ""); // Assert files are correctly copied/linked/run + write_file(&dir.dir.join("bashrc"), "bash #2"); write_file(&dir.dir.join("gitconfig"), "git #2"); write_file(&dir.dir.join("vimrc"), "vim #2"); + let bash_contents = read_file(&dir.dir.join(".bashrc.coliru")); let git_contents = read_file(&dir.dir.join(".gitconfig.coliru")); let vim1_contents = read_file(&dir.dir.join(".vimrc.coliru")); let vim2_exists = dir.dir.join("_vimrc.coliru").exists(); let log_contents = read_file(&dir.dir.join("log.txt")); + assert_eq!(bash_contents, "bash #2"); assert_eq!(git_contents, "git #1"); assert_eq!(vim1_contents, "vim #2"); assert_eq!(vim2_exists, false); @@ -95,10 +100,12 @@ script.bat called with arg1 windows\r // Assert files are correctly copied/linked/run write_file(&dir.dir.join("gitconfig"), "git #2"); write_file(&dir.dir.join("vimrc"), "vim #2"); + let bash_exists = dir.dir.join(".bashrc.coliru").exists(); let git_contents = read_file(&dir.dir.join(".gitconfig.coliru")); let vim1_exists = dir.dir.join(".vimrc.coliru").exists(); let vim2_contents = read_file(&dir.dir.join("_vimrc.coliru")); let log_contents = read_file(&dir.dir.join("log.txt")); + assert_eq!(bash_exists, false); assert_eq!(git_contents, "git #1"); assert_eq!(vim1_exists, false); assert_eq!(vim2_contents, "vim #2"); @@ -113,6 +120,7 @@ fn test_run_alternate_tag_rules_1() { manifest_1(&dir.dir); let expected = "\ +[2/3] Link bashrc to ~/.bashrc.coliru [2/3] Link vimrc to ~/.vimrc.coliru [2/3] Run sh script.sh arg1 linux ^windows script.sh called with arg1 linux ^windows @@ -121,11 +129,14 @@ script.sh called with arg1 linux ^windows assert_eq!(&stderr_to_string(&mut cmd), ""); // Assert files are correctly copied/linked/run + write_file(&dir.dir.join("bashrc"), "bash #2"); write_file(&dir.dir.join("vimrc"), "vim #2"); + let bash_contents = read_file(&dir.dir.join(".bashrc.coliru")); let git_exists = dir.dir.join(".gitconfig.coliru").exists(); let vim1_contents = read_file(&dir.dir.join(".vimrc.coliru")); let vim2_exists = dir.dir.join("_vimrc.coliru").exists(); let log_contents = read_file(&dir.dir.join("log.txt")); + assert_eq!(bash_contents, "bash #2"); assert_eq!(git_exists, false); assert_eq!(vim1_contents, "vim #2"); assert_eq!(vim2_exists, false); @@ -141,6 +152,7 @@ fn test_run_alternate_tag_rules_2() { let expected = "\ [1/3] Copy gitconfig to ~/.gitconfig.coliru +[2/3] Link bashrc to ~/.bashrc.coliru [2/3] Link vimrc to ~/.vimrc.coliru [2/3] Run sh script.sh arg1 macos script.sh called with arg1 macos @@ -149,12 +161,15 @@ script.sh called with arg1 macos assert_eq!(&stderr_to_string(&mut cmd), ""); // Assert files are correctly copied/linked/run + write_file(&dir.dir.join("bashrc"), "bash #2"); write_file(&dir.dir.join("gitconfig"), "git #2"); write_file(&dir.dir.join("vimrc"), "vim #2"); + let bash_contents = read_file(&dir.dir.join(".bashrc.coliru")); let git_contents = read_file(&dir.dir.join(".gitconfig.coliru")); let vim1_contents = read_file(&dir.dir.join(".vimrc.coliru")); let vim2_exists = dir.dir.join("_vimrc.coliru").exists(); let log_contents = read_file(&dir.dir.join("log.txt")); + assert_eq!(bash_contents, "bash #2"); assert_eq!(git_contents, "git #1"); assert_eq!(vim1_contents, "vim #2"); assert_eq!(vim2_exists, false); @@ -169,6 +184,7 @@ fn test_dry_run() { let expected = "\ [1/3] Copy gitconfig to ~/.gitconfig.coliru (DRY RUN) +[2/3] Link bashrc to ~/.bashrc.coliru (DRY RUN) [2/3] Link vimrc to ~/.vimrc.coliru (DRY RUN) [2/3] Run sh script.sh arg1 linux (DRY RUN) "; @@ -176,10 +192,12 @@ fn test_dry_run() { assert_eq!(&stderr_to_string(&mut cmd), ""); // Assert files are correctly copied/linked/run + let bash_exists = dir.dir.join(".bashrc.coliru").exists(); let git_exists = dir.dir.join(".gitconfig.coliru").exists(); let vim1_exists = dir.dir.join(".vimrc.coliru").exists(); let vim2_exists = dir.dir.join("_vimrc.coliru").exists(); let log_exists = dir.dir.join("log.txt").exists(); + assert_eq!(bash_exists, false); assert_eq!(git_exists, false); assert_eq!(vim1_exists, false); assert_eq!(vim2_exists, false); @@ -195,6 +213,7 @@ fn test_copy() { let expected = "\ [1/3] Copy gitconfig to ~/.gitconfig.coliru +[2/3] Copy bashrc to ~/.bashrc.coliru [2/3] Copy vimrc to ~/.vimrc.coliru [2/3] Run sh script.sh arg1 linux script.sh called with arg1 linux @@ -203,12 +222,15 @@ script.sh called with arg1 linux assert_eq!(&stderr_to_string(&mut cmd), ""); // Assert files are correctly copied/linked/run + write_file(&dir.dir.join("bashrc"), "bash #2"); write_file(&dir.dir.join("gitconfig"), "git #2"); write_file(&dir.dir.join("vimrc"), "vim #2"); + let bash_contents = read_file(&dir.dir.join(".bashrc.coliru")); let git_contents = read_file(&dir.dir.join(".gitconfig.coliru")); let vim1_contents = read_file(&dir.dir.join(".vimrc.coliru")); let vim2_exists = dir.dir.join("_vimrc.coliru").exists(); let log_contents = read_file(&dir.dir.join("log.txt")); + assert_eq!(bash_contents, "bash #1"); assert_eq!(git_contents, "git #1"); assert_eq!(vim1_contents, "vim #1"); assert_eq!(vim2_exists, false); @@ -234,10 +256,12 @@ script.bat called with arg1 windows\r // Assert files are correctly copied/linked/run write_file(&dir.dir.join("gitconfig"), "git #2"); write_file(&dir.dir.join("vimrc"), "vim #2"); + let bash_exists = dir.dir.join(".bashrc.coliru").exists(); let git_contents = read_file(&dir.dir.join(".gitconfig.coliru")); let vim1_exists = dir.dir.join(".vimrc.coliru").exists(); let vim2_contents = read_file(&dir.dir.join("_vimrc.coliru")); let log_contents = read_file(&dir.dir.join("log.txt")); + assert_eq!(bash_exists, false); assert_eq!(git_contents, "git #1"); assert_eq!(vim1_exists, false); assert_eq!(vim2_contents, "vim #1"); @@ -254,6 +278,7 @@ fn test_run_failure() { let expected_stdout = "\ [1/3] Copy gitconfig to ~/.gitconfig.coliru +[2/3] Link bashrc to ~/.bashrc.coliru [2/3] Link vimrc to ~/.vimrc.coliru [2/3] Run sh script.sh arg1 linux "; @@ -262,11 +287,14 @@ fn test_run_failure() { assert_eq!(&stderr_to_string(&mut cmd), expected_stderr); // Assert files are correctly copied/linked/run + write_file(&dir.dir.join("bashrc"), "bash #2"); write_file(&dir.dir.join("gitconfig"), "git #2"); write_file(&dir.dir.join("vimrc"), "vim #2"); + let bash_contents = read_file(&dir.dir.join(".bashrc.coliru")); let git_contents = read_file(&dir.dir.join(".gitconfig.coliru")); let vim1_contents = read_file(&dir.dir.join(".vimrc.coliru")); let vim2_exists = dir.dir.join("_vimrc.coliru").exists(); + assert_eq!(bash_contents, "bash #2"); assert_eq!(git_contents, "git #1"); assert_eq!(vim1_contents, "vim #2"); assert_eq!(vim2_exists, false); @@ -292,9 +320,11 @@ fn test_run_failure() { // Assert files are correctly copied/linked/run write_file(&dir.dir.join("gitconfig"), "git #2"); write_file(&dir.dir.join("vimrc"), "vim #2"); + let bash_exists = dir.dir.join(".bashrc.coliru").exists(); let git_contents = read_file(&dir.dir.join(".gitconfig.coliru")); let vim1_exists = dir.dir.join(".vimrc.coliru").exists(); let vim2_contents = read_file(&dir.dir.join("_vimrc.coliru")); + assert_eq!(bash_exists, false); assert_eq!(git_contents, "git #1"); assert_eq!(vim1_exists, false); assert_eq!(vim2_contents, "vim #2"); @@ -310,6 +340,7 @@ fn test_missing_file() { let expected_stdout = "\ [1/3] Copy gitconfig to ~/.gitconfig.coliru +[2/3] Link bashrc to ~/.bashrc.coliru [2/3] Link vimrc to ~/.vimrc.coliru [2/3] Run sh script.sh arg1 linux script.sh called with arg1 linux @@ -320,9 +351,12 @@ script.sh called with arg1 linux assert_eq!(&stderr_to_string(&mut cmd), expected_stderr); // Assert files are correctly copied/linked/run + write_file(&dir.dir.join("bashrc"), "bash #2"); write_file(&dir.dir.join("gitconfig"), "git #2"); + let bash_contents = read_file(&dir.dir.join(".bashrc.coliru")); let git_contents = read_file(&dir.dir.join(".gitconfig.coliru")); let log_contents = read_file(&dir.dir.join("log.txt")); + assert_eq!(bash_contents, "bash #2"); assert_eq!(git_contents, "git #1"); assert_eq!(log_contents, "script.sh called with arg1 linux\n"); } @@ -348,8 +382,10 @@ script.bat called with arg1 windows\r // Assert files are correctly copied/linked/run write_file(&dir.dir.join("gitconfig"), "git #2"); + let bash_exists = dir.dir.join(".bashrc.coliru").exists(); let git_contents = read_file(&dir.dir.join(".gitconfig.coliru")); let log_contents = read_file(&dir.dir.join("log.txt")); + assert_eq!(bash_exists, false); assert_eq!(git_contents, "git #1"); assert_eq!(log_contents, "script.bat called with arg1 windows \r\n"); } @@ -380,7 +416,7 @@ fn test_missing_manifest() { #[cfg(target_family = "windows")] fn test_missing_manifest() { let (_dir, mut cmd) = setup_e2e("test_missing_manifest"); - cmd.args(["missing-windows-test.yml"]); + cmd.args(["missing.yml"]); let expected = "Error: The system cannot find the file specified. \ (os error 2)\n";