refactor: hand clap's own structs to the commands
This commit is contained in:
@@ -10,6 +10,7 @@ use anyhow::{Context, Result, bail};
|
||||
use self::server::{Database, wait_until_ready, when_ready};
|
||||
use self::shape::{Dump, HEADER_LEN, Kind};
|
||||
use crate::cli::Format;
|
||||
use crate::cli::postgres as cli;
|
||||
use crate::cmd::{
|
||||
Cmd, Cp, CreateDb, DropDb, Gunzip, Gzip, Head, PgDump, PgDumpAll, PgRestore, Psql, Rm,
|
||||
};
|
||||
@@ -297,10 +298,13 @@ pub fn psql(ctx: &Ctx, rest: &[String]) -> Result<()> {
|
||||
.replace(ctx)
|
||||
}
|
||||
|
||||
pub fn dump(ctx: &Ctx, file: &Path, format: Format, gzip: bool) -> Result<()> {
|
||||
pub fn dump(ctx: &Ctx, args: &cli::Dump) -> Result<()> {
|
||||
let (file, format, gzip) = (args.path.as_path(), args.format, args.gzip);
|
||||
let db = Database::resolve(ctx)?;
|
||||
|
||||
if format == Format::Directory {
|
||||
// main says this as an argument error before getting here; kept as the
|
||||
// last word in case anything else ever calls dump
|
||||
if gzip {
|
||||
bail!("a directory dump is a directory of already compressed files, not a stream");
|
||||
}
|
||||
@@ -343,8 +347,8 @@ pub fn dump(ctx: &Ctx, file: &Path, format: Format, gzip: bool) -> Result<()> {
|
||||
|
||||
// pg_dump for one database, pg_dumpall for a cluster, which has no format letter
|
||||
fn dump_command(db: &Database, format: Format) -> Box<dyn Cmd + '_> {
|
||||
match format.flag() {
|
||||
Some(flag) => Box::new(PgDump::new(&db.user, &db.name, flag)),
|
||||
match PgDump::of(&db.user, &db.name, format) {
|
||||
Some(dump) => Box::new(dump),
|
||||
None => Box::new(PgDumpAll { username: &db.user }),
|
||||
}
|
||||
}
|
||||
@@ -364,7 +368,8 @@ fn dump_directory(ctx: &Ctx, db: &Database, target: &Path) -> Result<()> {
|
||||
note!(ctx, "dumping to local directory {}", target.display());
|
||||
let remote = remote_dump();
|
||||
|
||||
PgDump::new(&db.user, &db.name, "d")
|
||||
PgDump::of(&db.user, &db.name, Format::Directory)
|
||||
.expect("a directory dump has a pg_dump letter")
|
||||
.to(&remote)
|
||||
.in_container(&db.container)
|
||||
.run(ctx)?;
|
||||
|
||||
Reference in New Issue
Block a user