mirror of
https://github.com/starship/starship.git
synced 2026-06-23 02:05:51 +07:00
feat: Add the hg_branch module (#569)
This commit is contained in:
committed by
Matan Kushner
parent
33df8ac063
commit
337f213753
@@ -61,6 +61,11 @@ RUN mkdir -p "$DOTNET_HOME" \
|
||||
ENV PATH $DOTNET_HOME:$PATH
|
||||
RUN dotnet help
|
||||
|
||||
# Install Mercurial
|
||||
RUN HGPYTHON3=1 pip install mercurial
|
||||
# Check that Mercurial was correctly installed
|
||||
RUN hg --version
|
||||
|
||||
# Create blank project
|
||||
RUN USER=nonroot cargo new --bin /src/starship
|
||||
WORKDIR /src/starship
|
||||
|
||||
Vendored
BIN
Binary file not shown.
@@ -0,0 +1,219 @@
|
||||
use ansi_term::{Color, Style};
|
||||
use std::fs;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::process::Command;
|
||||
use std::{env, io};
|
||||
use tempfile;
|
||||
|
||||
use crate::common::{self, TestCommand};
|
||||
|
||||
enum Expect<'a> {
|
||||
BranchName(&'a str),
|
||||
Empty,
|
||||
NoTruncation,
|
||||
Symbol(&'a str),
|
||||
Style(Style),
|
||||
TruncationSymbol(&'a str),
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[ignore]
|
||||
fn test_hg_get_branch_fails() -> io::Result<()> {
|
||||
let tempdir = tempfile::tempdir()?;
|
||||
|
||||
// Create a fake corrupted mercurial repo.
|
||||
let hgdir = tempdir.path().join(".hg");
|
||||
fs::create_dir(&hgdir)?;
|
||||
fs::write(&hgdir.join("requires"), "fake-corrupted-repo")?;
|
||||
|
||||
expect_hg_branch_with_config(
|
||||
tempdir.path(),
|
||||
"",
|
||||
&[Expect::BranchName(&"(no branch)"), Expect::NoTruncation],
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[ignore]
|
||||
fn test_hg_get_branch_autodisabled() -> io::Result<()> {
|
||||
let tempdir = tempfile::tempdir()?;
|
||||
expect_hg_branch_with_config(tempdir.path(), "", &[Expect::Empty])
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[ignore]
|
||||
fn test_hg_bookmark() -> io::Result<()> {
|
||||
let tempdir = tempfile::tempdir()?;
|
||||
let repo_dir = create_fixture_hgrepo(&tempdir)?;
|
||||
run_hg(&["bookmark", "bookmark-101"], &repo_dir)?;
|
||||
expect_hg_branch_with_config(
|
||||
&repo_dir,
|
||||
"",
|
||||
&[Expect::BranchName(&"bookmark-101"), Expect::NoTruncation],
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[ignore]
|
||||
fn test_default_truncation_symbol() -> io::Result<()> {
|
||||
let tempdir = tempfile::tempdir()?;
|
||||
let repo_dir = create_fixture_hgrepo(&tempdir)?;
|
||||
run_hg(&["branch", "-f", "branch-name-101"], &repo_dir)?;
|
||||
run_hg(
|
||||
&[
|
||||
"commit",
|
||||
"-m",
|
||||
"empty commit 101",
|
||||
"-u",
|
||||
"fake user <fake@user>",
|
||||
],
|
||||
&repo_dir,
|
||||
)?;
|
||||
expect_hg_branch_with_config(
|
||||
&repo_dir,
|
||||
"truncation_length = 14",
|
||||
&[Expect::BranchName(&"branch-name-10")],
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[ignore]
|
||||
fn test_configured_symbols() -> io::Result<()> {
|
||||
let tempdir = tempfile::tempdir()?;
|
||||
let repo_dir = create_fixture_hgrepo(&tempdir)?;
|
||||
run_hg(&["branch", "-f", "branch-name-121"], &repo_dir)?;
|
||||
run_hg(
|
||||
&[
|
||||
"commit",
|
||||
"-m",
|
||||
"empty commit 121",
|
||||
"-u",
|
||||
"fake user <fake@user>",
|
||||
],
|
||||
&repo_dir,
|
||||
)?;
|
||||
expect_hg_branch_with_config(
|
||||
&repo_dir,
|
||||
r#"
|
||||
symbol = "B "
|
||||
truncation_length = 14
|
||||
truncation_symbol = "%"
|
||||
"#,
|
||||
&[
|
||||
Expect::BranchName(&"branch-name-12"),
|
||||
Expect::Symbol(&"B"),
|
||||
Expect::TruncationSymbol(&"%"),
|
||||
],
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[ignore]
|
||||
fn test_configured_style() -> io::Result<()> {
|
||||
let tempdir = tempfile::tempdir()?;
|
||||
let repo_dir = create_fixture_hgrepo(&tempdir)?;
|
||||
run_hg(&["branch", "-f", "branch-name-131"], &repo_dir)?;
|
||||
run_hg(
|
||||
&[
|
||||
"commit",
|
||||
"-m",
|
||||
"empty commit 131",
|
||||
"-u",
|
||||
"fake user <fake@user>",
|
||||
],
|
||||
&repo_dir,
|
||||
)?;
|
||||
|
||||
expect_hg_branch_with_config(
|
||||
&repo_dir,
|
||||
r#"
|
||||
style = "underline blue"
|
||||
"#,
|
||||
&[
|
||||
Expect::BranchName(&"branch-name-131"),
|
||||
Expect::Style(Color::Blue.underline()),
|
||||
Expect::TruncationSymbol(&""),
|
||||
],
|
||||
)
|
||||
}
|
||||
|
||||
fn expect_hg_branch_with_config(
|
||||
repo_dir: &Path,
|
||||
config_options: &str,
|
||||
expectations: &[Expect],
|
||||
) -> io::Result<()> {
|
||||
let output = common::render_module("hg_branch")
|
||||
.use_config(toml::from_str(&format!(
|
||||
r#"
|
||||
[hg_branch]
|
||||
{}
|
||||
"#,
|
||||
config_options
|
||||
))?)
|
||||
.arg("--path")
|
||||
.arg(repo_dir.to_str().unwrap())
|
||||
.output()?;
|
||||
|
||||
let actual = String::from_utf8(output.stdout).unwrap();
|
||||
|
||||
let mut expect_branch_name = "(no branch)";
|
||||
let mut expect_style = Color::Purple.bold();
|
||||
let mut expect_symbol = "\u{e0a0}";
|
||||
let mut expect_truncation_symbol = "…";
|
||||
|
||||
for expect in expectations {
|
||||
match expect {
|
||||
Expect::Empty => {
|
||||
assert_eq!("", actual);
|
||||
return Ok(());
|
||||
}
|
||||
Expect::Symbol(symbol) => {
|
||||
expect_symbol = symbol;
|
||||
}
|
||||
Expect::TruncationSymbol(truncation_symbol) => {
|
||||
expect_truncation_symbol = truncation_symbol;
|
||||
}
|
||||
Expect::NoTruncation => {
|
||||
expect_truncation_symbol = "";
|
||||
}
|
||||
Expect::BranchName(branch_name) => {
|
||||
expect_branch_name = branch_name;
|
||||
}
|
||||
Expect::Style(style) => expect_style = *style,
|
||||
}
|
||||
}
|
||||
|
||||
let expected = format!(
|
||||
"on {} ",
|
||||
expect_style.paint(format!(
|
||||
"{} {}{}",
|
||||
expect_symbol, expect_branch_name, expect_truncation_symbol
|
||||
)),
|
||||
);
|
||||
assert_eq!(expected, actual);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn create_fixture_hgrepo(tempdir: &tempfile::TempDir) -> io::Result<PathBuf> {
|
||||
let repo_path = tempdir.path().join("hg-repo");
|
||||
let fixture_path = env::current_dir()?.join("tests/fixtures/hg-repo.bundle");
|
||||
|
||||
run_hg(
|
||||
&[
|
||||
"clone",
|
||||
fixture_path.to_str().unwrap(),
|
||||
repo_path.to_str().unwrap(),
|
||||
],
|
||||
&tempdir.path(),
|
||||
)?;
|
||||
|
||||
Ok(repo_path)
|
||||
}
|
||||
|
||||
fn run_hg(args: &[&str], repo_dir: &Path) -> io::Result<()> {
|
||||
Command::new("hg")
|
||||
.args(args)
|
||||
.current_dir(&repo_dir)
|
||||
.output()?;
|
||||
Ok(())
|
||||
}
|
||||
@@ -11,6 +11,7 @@ mod git_branch;
|
||||
mod git_state;
|
||||
mod git_status;
|
||||
mod golang;
|
||||
mod hg_branch;
|
||||
mod hostname;
|
||||
mod jobs;
|
||||
mod line_break;
|
||||
|
||||
Reference in New Issue
Block a user