Skip to content

Commit 3ce07b9

Browse files
committed
Regenerate schema.rs after running diesel database reset
Especially in the early stages of a project it can be useful to modify the database structure by changing old(er) migrations and recreate everything with `diesel database reset`. Updating the schema file saves one additional step and ensures it is always up to date.
1 parent 1e4e550 commit 3ce07b9

2 files changed

Lines changed: 27 additions & 5 deletions

File tree

diesel_cli/src/main.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ fn main() {
6060
match matches.subcommand() {
6161
("migration", Some(matches)) => run_migration_command(matches).unwrap_or_else(handle_error),
6262
("setup", Some(matches)) => run_setup_command(matches),
63-
("database", Some(matches)) => run_database_command(matches),
63+
("database", Some(matches)) => run_database_command(matches).unwrap_or_else(handle_error),
6464
("bash-completion", Some(matches)) => generate_bash_completion_command(matches),
6565
("print-schema", Some(matches)) => run_infer_schema(matches).unwrap_or_else(handle_error),
6666
_ => unreachable!("The cli parser should prevent reaching here"),
@@ -227,19 +227,21 @@ fn create_config_file(matches: &ArgMatches) -> DatabaseResult<()> {
227227
Ok(())
228228
}
229229

230-
fn run_database_command(matches: &ArgMatches) {
230+
fn run_database_command(matches: &ArgMatches) -> Result<(), Box<Error>> {
231231
match matches.subcommand() {
232232
("setup", Some(args)) => {
233233
let migrations_dir = migrations_dir(args);
234-
database::setup_database(args, &migrations_dir).unwrap_or_else(handle_error)
234+
database::setup_database(args, &migrations_dir)?;
235235
}
236236
("reset", Some(args)) => {
237237
let migrations_dir = migrations_dir(args);
238-
database::reset_database(args, &migrations_dir).unwrap_or_else(handle_error)
238+
database::reset_database(args, &migrations_dir)?;
239+
regenerate_schema_if_file_specified(matches)?;
239240
}
240-
("drop", Some(args)) => database::drop_database_command(args).unwrap_or_else(handle_error),
241+
("drop", Some(args)) => database::drop_database_command(args)?,
241242
_ => unreachable!("The cli parser should prevent reaching here"),
242243
};
244+
Ok(())
243245
}
244246

245247
fn generate_bash_completion_command(_: &ArgMatches) {

diesel_cli/tests/database_reset.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,3 +170,23 @@ fn reset_sanitize_database_name() {
170170
result.stdout()
171171
);
172172
}
173+
174+
#[test]
175+
fn reset_updates_schema_if_config_present() {
176+
let p = project("reset_updates_schema_if_config_present")
177+
.folder("migrations")
178+
.file(
179+
"diesel.toml",
180+
r#"
181+
[print_schema]
182+
file = "src/my_schema.rs"
183+
"#,
184+
)
185+
.build();
186+
187+
let result = p.command("database").arg("reset").run();
188+
189+
assert!(result.is_success(), "Result was unsuccessful {:?}", result);
190+
191+
assert!(p.has_file("src/my_schema.rs"));
192+
}

0 commit comments

Comments
 (0)