Skip to content

Commit b25be2f

Browse files
committed
Don't spam migration output during test runs
Rust *should* be swallowing all stdout output during test runs, but for some reason it isn't. This appears to be due to rust-lang/rust#12309. However, we can't have out test suite spam to the point of unreadability until that's fixed, so let's just not output from migrations during tests. This was paired, so it has been committed without PR. Fixes #156.
1 parent 7fbe074 commit b25be2f

File tree

3 files changed

+25
-16
lines changed

3 files changed

+25
-16
lines changed

diesel/src/migrations/mod.rs

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ mod schema;
6161

6262
pub use self::migration_error::*;
6363

64+
use std::io::{stdout, Write};
65+
6466
use ::expression::expression_methods::*;
6567
use ::query_dsl::*;
6668
use self::migration::*;
@@ -92,11 +94,11 @@ pub fn run_pending_migrations<Conn>(conn: &Conn) -> Result<(), RunMigrationsErro
9294
String: FromSql<VarChar, Conn::Backend>,
9395
{
9496
let migrations_dir = try!(find_migrations_directory());
95-
run_pending_migrations_in_directory(conn, &migrations_dir)
97+
run_pending_migrations_in_directory(conn, &migrations_dir, &mut stdout())
9698
}
9799

98100
#[doc(hidden)]
99-
pub fn run_pending_migrations_in_directory<Conn>(conn: &Conn, migrations_dir: &Path)
101+
pub fn run_pending_migrations_in_directory<Conn>(conn: &Conn, migrations_dir: &Path, output: &mut Write)
100102
-> Result<(), RunMigrationsError> where
101103
Conn: Connection,
102104
String: FromSql<VarChar, Conn::Backend>,
@@ -107,7 +109,7 @@ pub fn run_pending_migrations_in_directory<Conn>(conn: &Conn, migrations_dir: &P
107109
let pending_migrations = all_migrations.into_iter().filter(|m| {
108110
!already_run.contains(m.version())
109111
});
110-
run_migrations(conn, pending_migrations.collect())
112+
run_migrations(conn, pending_migrations.collect(), output)
111113
}
112114

113115
/// Reverts the last migration that was run. Returns the version that was reverted. Returns an
@@ -121,22 +123,26 @@ pub fn revert_latest_migration<Conn>(conn: &Conn) -> Result<String, RunMigration
121123
{
122124
try!(create_schema_migrations_table_if_needed(conn));
123125
let latest_migration_version = try!(latest_run_migration_version(conn));
124-
revert_migration_with_version(conn, &latest_migration_version)
126+
revert_migration_with_version(conn, &latest_migration_version, &mut stdout())
125127
.map(|_| latest_migration_version)
126128
}
127129

128130
#[doc(hidden)]
129-
pub fn revert_migration_with_version<Conn: Connection>(conn: &Conn, ver: &str) -> Result<(), RunMigrationsError> {
131+
pub fn revert_migration_with_version<Conn: Connection>(conn: &Conn, ver: &str, output: &mut Write)
132+
-> Result<(), RunMigrationsError>
133+
{
130134
migration_with_version(ver)
131135
.map_err(|e| e.into())
132-
.and_then(|m| revert_migration(conn, m))
136+
.and_then(|m| revert_migration(conn, m, output))
133137
}
134138

135139
#[doc(hidden)]
136-
pub fn run_migration_with_version<Conn: Connection>(conn: &Conn, ver: &str) -> Result<(), RunMigrationsError> {
140+
pub fn run_migration_with_version<Conn: Connection>(conn: &Conn, ver: &str, output: &mut Write)
141+
-> Result<(), RunMigrationsError>
142+
{
137143
migration_with_version(ver)
138144
.map_err(|e| e.into())
139-
.and_then(|m| run_migration(conn, m))
145+
.and_then(|m| run_migration(conn, m, output))
140146
}
141147

142148
fn migration_with_version(ver: &str) -> Result<Box<Migration>, MigrationError> {
@@ -196,21 +202,21 @@ fn migrations_in_directory(path: &Path) -> Result<Vec<Box<Migration>>, Migration
196202
}).collect()
197203
}
198204

199-
fn run_migrations<Conn: Connection>(conn: &Conn, mut migrations: Vec<Box<Migration>>)
205+
fn run_migrations<Conn: Connection>(conn: &Conn, mut migrations: Vec<Box<Migration>>, output: &mut Write)
200206
-> Result<(), RunMigrationsError>
201207
{
202208
migrations.sort_by(|a, b| a.version().cmp(b.version()));
203209
for migration in migrations {
204-
try!(run_migration(conn, migration));
210+
try!(run_migration(conn, migration, output));
205211
}
206212
Ok(())
207213
}
208214

209-
fn run_migration<Conn: Connection>(conn: &Conn, migration: Box<Migration>)
215+
fn run_migration<Conn: Connection>(conn: &Conn, migration: Box<Migration>, output: &mut Write)
210216
-> Result<(), RunMigrationsError>
211217
{
212218
conn.transaction(|| {
213-
println!("Running migration {}", migration.version());
219+
try!(writeln!(output, "Running migration {}", migration.version()));
214220
try!(migration.run(conn));
215221
try!(::insert(&NewMigration(migration.version()))
216222
.into(__diesel_schema_migrations)
@@ -219,11 +225,11 @@ fn run_migration<Conn: Connection>(conn: &Conn, migration: Box<Migration>)
219225
}).map_err(|e| e.into())
220226
}
221227

222-
fn revert_migration<Conn: Connection>(conn: &Conn, migration: Box<Migration>)
228+
fn revert_migration<Conn: Connection>(conn: &Conn, migration: Box<Migration>, output: &mut Write)
223229
-> Result<(), RunMigrationsError>
224230
{
225231
try!(conn.transaction(|| {
226-
println!("Rolling back migration {}", migration.version());
232+
try!(writeln!(output, "Rolling back migration {}", migration.version()));
227233
try!(migration.revert(conn));
228234
let target = __diesel_schema_migrations.filter(version.eq(migration.version()));
229235
try!(::delete(target).execute(conn));

diesel_tests/build.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,14 @@ extern crate dotenv;
3030
use diesel::*;
3131
use diesel::connection::PgConnection;
3232
use dotenv::dotenv;
33+
use std::io;
3334

3435
fn main() {
3536
dotenv().ok();
3637
let database_url = ::std::env::var("DATABASE_URL")
3738
.expect("DATABASE_URL must be set to run tests");
3839
let connection = PgConnection::establish(&database_url).unwrap();
3940
let migrations_dir = migrations::find_migrations_directory().unwrap().join("postgresql");
40-
migrations::run_pending_migrations_in_directory(&connection, &migrations_dir).unwrap();
41+
migrations::run_pending_migrations_in_directory(&connection, &migrations_dir, &mut io::sink()).unwrap();
4142
inner::main();
4243
}

diesel_tests/tests/schema.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,11 @@ pub fn connection_without_transaction() -> TestConnection {
127127

128128
#[cfg(feature = "sqlite")]
129129
pub fn connection_without_transaction() -> TestConnection {
130+
use std::io;
131+
130132
let connection = ::diesel::connection::SqliteConnection::establish(":memory:").unwrap();
131133
let migrations_dir = migrations::find_migrations_directory().unwrap().join("sqlite");
132-
migrations::run_pending_migrations_in_directory(&connection, &migrations_dir).unwrap();
134+
migrations::run_pending_migrations_in_directory(&connection, &migrations_dir, &mut io::sink()).unwrap();
133135
connection
134136
}
135137

0 commit comments

Comments
 (0)