1use anyhow::Result;
2use clap::CommandFactory;
3use clap::{error::ErrorKind::ArgumentConflict, Parser};
4use env_logger::Env;
5use log::Level;
6
7use crate::audit;
8use crate::basic_measure::measure;
9use crate::config::bump_epoch;
10use crate::git::git_interop::check_git_version;
11use crate::git::git_interop::{prune, pull, push};
12use crate::measurement_storage::{add, remove_measurements_from_commits};
13use crate::reporting::report;
14use git_perf_cli_types::{Cli, Commands};
15
16pub fn handle_calls() -> Result<()> {
17 let cli = Cli::parse();
18 let logger_level = match cli.verbose {
19 0 => Level::Warn,
20 1 => Level::Info,
21 2 => Level::Debug,
22 _ => Level::Trace,
23 };
24 env_logger::Builder::from_env(Env::default().default_filter_or(logger_level.as_str())).init();
25
26 check_git_version()?;
27
28 match cli.command {
29 Commands::Measure {
30 repetitions,
31 command,
32 measurement,
33 } => measure(
34 &measurement.name,
35 repetitions,
36 &command,
37 &measurement.key_value,
38 ),
39 Commands::Add { value, measurement } => {
40 add(&measurement.name, value, &measurement.key_value)
41 }
42 Commands::Push {} => push(None),
43 Commands::Pull {} => pull(None),
44 Commands::Report {
45 output,
46 separate_by,
47 report_history,
48 measurement,
49 key_value,
50 aggregate_by,
51 } => report(
52 output,
53 separate_by,
54 report_history.max_count,
55 &measurement,
56 &key_value,
57 aggregate_by,
58 ),
59 Commands::Audit {
60 measurement,
61 report_history,
62 selectors,
63 min_measurements,
64 aggregate_by,
65 sigma,
66 } => {
67 if report_history.max_count < min_measurements.into() {
68 Cli::command().error(ArgumentConflict, format!("The minimal number of measurements ({}) cannot be more than the maximum number of measurements ({})", min_measurements, report_history.max_count)).exit()
69 }
70 audit::audit_multiple(
71 &measurement,
72 report_history.max_count,
73 min_measurements,
74 &selectors,
75 aggregate_by,
76 sigma,
77 )
78 }
79 Commands::BumpEpoch { measurement } => bump_epoch(&measurement),
80 Commands::Prune {} => prune(),
81 Commands::Remove { older_than } => remove_measurements_from_commits(older_than),
82 }
83}