about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2025-02-21 23:01:59 +0100
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2025-02-21 23:01:59 +0100
commit31f15dc02bdbb815ce2d53f10d710a65b0b7bf0b (patch)
treebf6a3b77e72a88c535858a94fa5a2fd66051babd
parentbuild(flake): Add `ffmpeg` to the devshell (diff)
downloadyt-31f15dc02bdbb815ce2d53f10d710a65b0b7bf0b.zip
feat(yt/cli): Make running the migrations of the database optional
-rw-r--r--yt/src/app.rs13
-rw-r--r--yt/src/cli.rs5
-rw-r--r--yt/src/main.rs7
3 files changed, 17 insertions, 8 deletions
diff --git a/yt/src/app.rs b/yt/src/app.rs
index 937e58f..bf8ad0f 100644
--- a/yt/src/app.rs
+++ b/yt/src/app.rs
@@ -9,6 +9,7 @@
 // If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
 
 use anyhow::{Context, Result};
+use log::warn;
 use sqlx::{SqlitePool, sqlite::SqliteConnectOptions};
 
 use crate::{config::Config, storage::migrate::migrate_db};
@@ -20,7 +21,7 @@ pub struct App {
 }
 
 impl App {
-    pub async fn new(config: Config) -> Result<Self> {
+    pub async fn new(config: Config, should_migrate_db: bool) -> Result<Self> {
         let options = SqliteConnectOptions::new()
             .filename(&config.paths.database_path)
             .optimize_on_close(true, None)
@@ -35,9 +36,13 @@ impl App {
             config,
         };
 
-        migrate_db(&app)
-            .await
-            .context("Failed to migrate db to new version")?;
+        if should_migrate_db {
+            migrate_db(&app)
+                .await
+                .context("Failed to migrate db to new version")?;
+        } else {
+            warn!("Skipping database migration.");
+        }
 
         Ok(app)
     }
diff --git a/yt/src/cli.rs b/yt/src/cli.rs
index 3afce3f..73121d1 100644
--- a/yt/src/cli.rs
+++ b/yt/src/cli.rs
@@ -34,6 +34,11 @@ pub struct CliArgs {
     #[arg(long, short = 'V', action= ArgAction::SetTrue)]
     pub version: bool,
 
+    /// Do not perform database migration before starting.
+    /// Setting this could cause runtime database access errors.
+    #[arg(long, short, action=ArgAction::SetTrue, default_value_t = false)]
+    pub no_migrate_db: bool,
+
     /// Increase message verbosity
     #[arg(long="verbose", short = 'v', action = ArgAction::Count)]
     pub verbosity: u8,
diff --git a/yt/src/main.rs b/yt/src/main.rs
index 0178488..930eb5b 100644
--- a/yt/src/main.rs
+++ b/yt/src/main.rs
@@ -88,10 +88,9 @@ async fn main() -> Result<()> {
         }
     });
 
-    let app = {
-        let config = Config::from_config_file(args.db_path, args.config_path, args.color)?;
-        App::new(config).await?
-    };
+    let config = Config::from_config_file(args.db_path, args.config_path, args.color)?;
+
+    let app = App::new(config, !args.no_migrate_db).await?;
 
     match args.command.unwrap_or(Command::default()) {
         Command::Download {