Skip to content

Commit 23bea36

Browse files
committed
add gix status --format to communicate the current format is very simple.
1 parent 84c74ff commit 23bea36

File tree

3 files changed

+36
-3
lines changed

3 files changed

+36
-3
lines changed

gitoxide-core/src/repository/status.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,16 @@ pub enum Ignored {
2323
Matching,
2424
}
2525

26+
#[derive(Copy, Clone)]
27+
pub enum Format {
28+
Simplified,
29+
PorcelainV2,
30+
}
31+
2632
pub struct Options {
2733
pub ignored: Option<Ignored>,
28-
pub format: OutputFormat,
34+
pub format: Format,
35+
pub output_format: OutputFormat,
2936
pub submodules: Option<Submodules>,
3037
pub thread_limit: Option<usize>,
3138
pub statistics: bool,
@@ -42,16 +49,20 @@ pub fn show(
4249
Options {
4350
ignored,
4451
format,
52+
output_format,
4553
submodules,
4654
thread_limit,
4755
allow_write,
4856
statistics,
4957
index_worktree_renames,
5058
}: Options,
5159
) -> anyhow::Result<()> {
52-
if format != OutputFormat::Human {
60+
if output_format != OutputFormat::Human {
5361
bail!("Only human format is supported right now");
5462
}
63+
if !matches!(format, Format::Simplified) {
64+
bail!("Only the simplified format is currently implemented");
65+
}
5566

5667
let start = std::time::Instant::now();
5768
let prefix = repo.prefix()?.unwrap_or(Path::new(""));
@@ -98,6 +109,7 @@ pub fn show(
98109
None => gix::status::Submodule::AsConfigured { check_dirty: false },
99110
})
100111
.into_index_worktree_iter(pathspecs)?;
112+
101113
for item in iter.by_ref() {
102114
let item = item?;
103115
match item {

src/plumbing/main.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ pub fn main() -> Result<()> {
207207
),
208208
Subcommands::Status(crate::plumbing::options::status::Platform {
209209
ignored,
210+
format: status_format,
210211
statistics,
211212
submodules,
212213
no_write,
@@ -228,6 +229,14 @@ pub fn main() -> Result<()> {
228229
err,
229230
progress,
230231
core::repository::status::Options {
232+
format: match status_format.unwrap_or_default() {
233+
crate::plumbing::options::status::Format::Simplified => {
234+
core::repository::status::Format::Simplified
235+
}
236+
crate::plumbing::options::status::Format::PorcelainV2 => {
237+
core::repository::status::Format::PorcelainV2
238+
}
239+
},
231240
ignored: ignored.map(|ignored| match ignored.unwrap_or_default() {
232241
crate::plumbing::options::status::Ignored::Matching => {
233242
core::repository::status::Ignored::Matching
@@ -236,7 +245,7 @@ pub fn main() -> Result<()> {
236245
core::repository::status::Ignored::Collapsed
237246
}
238247
}),
239-
format,
248+
output_format: format,
240249
statistics,
241250
thread_limit: thread_limit.or(cfg!(target_os = "macos").then_some(3)), // TODO: make this a configurable when in `gix`, this seems to be optimal on MacOS, linux scales though! MacOS also scales if reading a lot of files for refresh index
242251
allow_write: !no_write,

src/plumbing/options/mod.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,9 +231,21 @@ pub mod status {
231231
// allowing to ignore directories, naturally traversing the entire content.
232232
}
233233

234+
#[derive(Default, Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, clap::ValueEnum)]
235+
pub enum Format {
236+
/// A basic format that is easy to read, and useful for a first glimpse as flat list.
237+
#[default]
238+
Simplified,
239+
/// Output very similar to `git status --porcelain=2`.
240+
PorcelainV2,
241+
}
242+
234243
#[derive(Debug, clap::Parser)]
235244
#[command(about = "compute repository status similar to `git status`")]
236245
pub struct Platform {
246+
/// The way status data is displayed.
247+
#[clap(long, short = 'f')]
248+
pub format: Option<Format>,
237249
/// If enabled, show ignored files and directories.
238250
#[clap(long)]
239251
pub ignored: Option<Option<Ignored>>,

0 commit comments

Comments
 (0)