mirror of
https://github.com/Llewellynvdm/exa.git
synced 2025-01-15 01:23:43 +00:00
This actually makes the Git part big enough
…for its own module.
This commit is contained in:
parent
9642f69ce7
commit
5f497da85d
80
src/output/render/git.rs
Normal file
80
src/output/render/git.rs
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
use output::cell::{TextCell, DisplayWidth};
|
||||||
|
use output::colours::Colours;
|
||||||
|
use fs::fields as f;
|
||||||
|
|
||||||
|
|
||||||
|
impl f::Git {
|
||||||
|
pub fn render(&self, colours: &Colours) -> TextCell {
|
||||||
|
let git_char = |status| match status {
|
||||||
|
&f::GitStatus::NotModified => colours.punctuation.paint("-"),
|
||||||
|
&f::GitStatus::New => colours.git.new.paint("N"),
|
||||||
|
&f::GitStatus::Modified => colours.git.modified.paint("M"),
|
||||||
|
&f::GitStatus::Deleted => colours.git.deleted.paint("D"),
|
||||||
|
&f::GitStatus::Renamed => colours.git.renamed.paint("R"),
|
||||||
|
&f::GitStatus::TypeChange => colours.git.typechange.paint("T"),
|
||||||
|
};
|
||||||
|
|
||||||
|
TextCell {
|
||||||
|
width: DisplayWidth::from(2),
|
||||||
|
contents: vec![
|
||||||
|
git_char(&self.staged),
|
||||||
|
git_char(&self.unstaged)
|
||||||
|
].into(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
pub mod test {
|
||||||
|
use output::details::Details;
|
||||||
|
use output::cell::{TextCell, DisplayWidth};
|
||||||
|
use fs::fields as f;
|
||||||
|
|
||||||
|
use ansi_term::Colour::*;
|
||||||
|
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn git_blank() {
|
||||||
|
let mut details = Details::default();
|
||||||
|
details.colours.punctuation = Fixed(44).normal();
|
||||||
|
|
||||||
|
let stati = f::Git {
|
||||||
|
staged: f::GitStatus::NotModified,
|
||||||
|
unstaged: f::GitStatus::NotModified,
|
||||||
|
};
|
||||||
|
|
||||||
|
let expected = TextCell {
|
||||||
|
width: DisplayWidth::from(2),
|
||||||
|
contents: vec![
|
||||||
|
Fixed(44).paint("-"),
|
||||||
|
Fixed(44).paint("-"),
|
||||||
|
].into(),
|
||||||
|
};
|
||||||
|
|
||||||
|
assert_eq!(expected, stati.render(&details.colours).into())
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn git_new_changed() {
|
||||||
|
let mut details = Details::default();
|
||||||
|
details.colours.git.new = Red.normal();
|
||||||
|
details.colours.git.modified = Purple.normal();
|
||||||
|
|
||||||
|
let stati = f::Git {
|
||||||
|
staged: f::GitStatus::New,
|
||||||
|
unstaged: f::GitStatus::Modified,
|
||||||
|
};
|
||||||
|
|
||||||
|
let expected = TextCell {
|
||||||
|
width: DisplayWidth::from(2),
|
||||||
|
contents: vec![
|
||||||
|
Red.paint("N"),
|
||||||
|
Purple.paint("M"),
|
||||||
|
].into(),
|
||||||
|
};
|
||||||
|
|
||||||
|
assert_eq!(expected, stati.render(&details.colours).into())
|
||||||
|
}
|
||||||
|
}
|
@ -1,9 +1,10 @@
|
|||||||
|
mod git;
|
||||||
mod groups;
|
mod groups;
|
||||||
mod permissions;
|
mod permissions;
|
||||||
mod size;
|
mod size;
|
||||||
mod users;
|
mod users;
|
||||||
|
|
||||||
use output::cell::{TextCell, DisplayWidth};
|
use output::cell::TextCell;
|
||||||
use output::colours::Colours;
|
use output::colours::Colours;
|
||||||
use fs::fields as f;
|
use fs::fields as f;
|
||||||
|
|
||||||
@ -75,80 +76,3 @@ impl f::Time {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
impl f::Git {
|
|
||||||
pub fn render(&self, colours: &Colours) -> TextCell {
|
|
||||||
let git_char = |status| match status {
|
|
||||||
&f::GitStatus::NotModified => colours.punctuation.paint("-"),
|
|
||||||
&f::GitStatus::New => colours.git.new.paint("N"),
|
|
||||||
&f::GitStatus::Modified => colours.git.modified.paint("M"),
|
|
||||||
&f::GitStatus::Deleted => colours.git.deleted.paint("D"),
|
|
||||||
&f::GitStatus::Renamed => colours.git.renamed.paint("R"),
|
|
||||||
&f::GitStatus::TypeChange => colours.git.typechange.paint("T"),
|
|
||||||
};
|
|
||||||
|
|
||||||
TextCell {
|
|
||||||
width: DisplayWidth::from(2),
|
|
||||||
contents: vec![
|
|
||||||
git_char(&self.staged),
|
|
||||||
git_char(&self.unstaged)
|
|
||||||
].into(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
pub mod test {
|
|
||||||
use output::details::Details;
|
|
||||||
use output::cell::{TextCell, DisplayWidth};
|
|
||||||
use fs::fields as f;
|
|
||||||
|
|
||||||
use ansi_term::Colour::*;
|
|
||||||
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn git_blank() {
|
|
||||||
let mut details = Details::default();
|
|
||||||
details.colours.punctuation = Fixed(44).normal();
|
|
||||||
|
|
||||||
let stati = f::Git {
|
|
||||||
staged: f::GitStatus::NotModified,
|
|
||||||
unstaged: f::GitStatus::NotModified,
|
|
||||||
};
|
|
||||||
|
|
||||||
let expected = TextCell {
|
|
||||||
width: DisplayWidth::from(2),
|
|
||||||
contents: vec![
|
|
||||||
Fixed(44).paint("-"),
|
|
||||||
Fixed(44).paint("-"),
|
|
||||||
].into(),
|
|
||||||
};
|
|
||||||
|
|
||||||
assert_eq!(expected, stati.render(&details.colours).into())
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn git_new_changed() {
|
|
||||||
let mut details = Details::default();
|
|
||||||
details.colours.git.new = Red.normal();
|
|
||||||
details.colours.git.modified = Purple.normal();
|
|
||||||
|
|
||||||
let stati = f::Git {
|
|
||||||
staged: f::GitStatus::New,
|
|
||||||
unstaged: f::GitStatus::Modified,
|
|
||||||
};
|
|
||||||
|
|
||||||
let expected = TextCell {
|
|
||||||
width: DisplayWidth::from(2),
|
|
||||||
contents: vec![
|
|
||||||
Red.paint("N"),
|
|
||||||
Purple.paint("M"),
|
|
||||||
].into(),
|
|
||||||
};
|
|
||||||
|
|
||||||
assert_eq!(expected, stati.render(&details.colours).into())
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user