diff --git a/crates/db/.sqlx/query-72509d252c39fce77520aa816cb2acbc1fb35dc2605e7be893610599b2427f2e.json b/crates/db/.sqlx/query-283a8ef6493346c9ee3bf649e977849eb361d801cdfc8180a8f082269a6bd649.json
similarity index 69%
rename from crates/db/.sqlx/query-72509d252c39fce77520aa816cb2acbc1fb35dc2605e7be893610599b2427f2e.json
rename to crates/db/.sqlx/query-283a8ef6493346c9ee3bf649e977849eb361d801cdfc8180a8f082269a6bd649.json
index d68bd414..e3fc3b31 100644
--- a/crates/db/.sqlx/query-72509d252c39fce77520aa816cb2acbc1fb35dc2605e7be893610599b2427f2e.json
+++ b/crates/db/.sqlx/query-283a8ef6493346c9ee3bf649e977849eb361d801cdfc8180a8f082269a6bd649.json
@@ -1,6 +1,6 @@
{
"db_name": "SQLite",
- "query": "UPDATE projects SET name = $2, git_repo_path = $3, setup_script = $4, dev_script = $5, cleanup_script = $6 WHERE id = $1 RETURNING id as \"id!: Uuid\", name, git_repo_path, setup_script, dev_script, cleanup_script, created_at as \"created_at!: DateTime\", updated_at as \"updated_at!: DateTime\"",
+ "query": "UPDATE projects SET name = $2, git_repo_path = $3, setup_script = $4, dev_script = $5, cleanup_script = $6, copy_files = $7 WHERE id = $1 RETURNING id as \"id!: Uuid\", name, git_repo_path, setup_script, dev_script, cleanup_script, copy_files, created_at as \"created_at!: DateTime\", updated_at as \"updated_at!: DateTime\"",
"describe": {
"columns": [
{
@@ -34,18 +34,23 @@
"type_info": "Text"
},
{
- "name": "created_at!: DateTime",
+ "name": "copy_files",
"ordinal": 6,
"type_info": "Text"
},
{
- "name": "updated_at!: DateTime",
+ "name": "created_at!: DateTime",
"ordinal": 7,
"type_info": "Text"
+ },
+ {
+ "name": "updated_at!: DateTime",
+ "ordinal": 8,
+ "type_info": "Text"
}
],
"parameters": {
- "Right": 6
+ "Right": 7
},
"nullable": [
true,
@@ -54,9 +59,10 @@
true,
true,
true,
+ true,
false,
false
]
},
- "hash": "72509d252c39fce77520aa816cb2acbc1fb35dc2605e7be893610599b2427f2e"
+ "hash": "283a8ef6493346c9ee3bf649e977849eb361d801cdfc8180a8f082269a6bd649"
}
diff --git a/crates/db/.sqlx/query-90fd607fcb2dca72239ff25e618e21e174b195991eaa33722cbf5f76da84cfab.json b/crates/db/.sqlx/query-59d178b298ba60d490a9081a40064a5acb06fecbc0b164c0de2fe502d02b13a7.json
similarity index 69%
rename from crates/db/.sqlx/query-90fd607fcb2dca72239ff25e618e21e174b195991eaa33722cbf5f76da84cfab.json
rename to crates/db/.sqlx/query-59d178b298ba60d490a9081a40064a5acb06fecbc0b164c0de2fe502d02b13a7.json
index b06544b5..4b2a935c 100644
--- a/crates/db/.sqlx/query-90fd607fcb2dca72239ff25e618e21e174b195991eaa33722cbf5f76da84cfab.json
+++ b/crates/db/.sqlx/query-59d178b298ba60d490a9081a40064a5acb06fecbc0b164c0de2fe502d02b13a7.json
@@ -1,6 +1,6 @@
{
"db_name": "SQLite",
- "query": "INSERT INTO projects (id, name, git_repo_path, setup_script, dev_script, cleanup_script) VALUES ($1, $2, $3, $4, $5, $6) RETURNING id as \"id!: Uuid\", name, git_repo_path, setup_script, dev_script, cleanup_script, created_at as \"created_at!: DateTime\", updated_at as \"updated_at!: DateTime\"",
+ "query": "INSERT INTO projects (id, name, git_repo_path, setup_script, dev_script, cleanup_script, copy_files) VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING id as \"id!: Uuid\", name, git_repo_path, setup_script, dev_script, cleanup_script, copy_files, created_at as \"created_at!: DateTime\", updated_at as \"updated_at!: DateTime\"",
"describe": {
"columns": [
{
@@ -34,18 +34,23 @@
"type_info": "Text"
},
{
- "name": "created_at!: DateTime",
+ "name": "copy_files",
"ordinal": 6,
"type_info": "Text"
},
{
- "name": "updated_at!: DateTime",
+ "name": "created_at!: DateTime",
"ordinal": 7,
"type_info": "Text"
+ },
+ {
+ "name": "updated_at!: DateTime",
+ "ordinal": 8,
+ "type_info": "Text"
}
],
"parameters": {
- "Right": 6
+ "Right": 7
},
"nullable": [
true,
@@ -54,9 +59,10 @@
true,
true,
true,
+ true,
false,
false
]
},
- "hash": "90fd607fcb2dca72239ff25e618e21e174b195991eaa33722cbf5f76da84cfab"
+ "hash": "59d178b298ba60d490a9081a40064a5acb06fecbc0b164c0de2fe502d02b13a7"
}
diff --git a/crates/db/.sqlx/query-3d0a1cabf2a52e9d90cdfd29c509ca89aeb448d0c1d2446c65cd43db40735e86.json b/crates/db/.sqlx/query-71c7befa63391ca211eb69036ff0e4aabe92932fd8bb7ba8c52b2ae8bf411ac8.json
similarity index 75%
rename from crates/db/.sqlx/query-3d0a1cabf2a52e9d90cdfd29c509ca89aeb448d0c1d2446c65cd43db40735e86.json
rename to crates/db/.sqlx/query-71c7befa63391ca211eb69036ff0e4aabe92932fd8bb7ba8c52b2ae8bf411ac8.json
index 1ca98c41..6dec9ab5 100644
--- a/crates/db/.sqlx/query-3d0a1cabf2a52e9d90cdfd29c509ca89aeb448d0c1d2446c65cd43db40735e86.json
+++ b/crates/db/.sqlx/query-71c7befa63391ca211eb69036ff0e4aabe92932fd8bb7ba8c52b2ae8bf411ac8.json
@@ -1,6 +1,6 @@
{
"db_name": "SQLite",
- "query": "SELECT id as \"id!: Uuid\", name, git_repo_path, setup_script, dev_script, cleanup_script, created_at as \"created_at!: DateTime\", updated_at as \"updated_at!: DateTime\" FROM projects WHERE id = $1",
+ "query": "SELECT id as \"id!: Uuid\", name, git_repo_path, setup_script, dev_script, cleanup_script, copy_files, created_at as \"created_at!: DateTime\", updated_at as \"updated_at!: DateTime\" FROM projects WHERE git_repo_path = $1",
"describe": {
"columns": [
{
@@ -34,14 +34,19 @@
"type_info": "Text"
},
{
- "name": "created_at!: DateTime",
+ "name": "copy_files",
"ordinal": 6,
"type_info": "Text"
},
{
- "name": "updated_at!: DateTime",
+ "name": "created_at!: DateTime",
"ordinal": 7,
"type_info": "Text"
+ },
+ {
+ "name": "updated_at!: DateTime",
+ "ordinal": 8,
+ "type_info": "Text"
}
],
"parameters": {
@@ -54,9 +59,10 @@
true,
true,
true,
+ true,
false,
false
]
},
- "hash": "3d0a1cabf2a52e9d90cdfd29c509ca89aeb448d0c1d2446c65cd43db40735e86"
+ "hash": "71c7befa63391ca211eb69036ff0e4aabe92932fd8bb7ba8c52b2ae8bf411ac8"
}
diff --git a/crates/db/.sqlx/query-b2b2c6b4d0b1a347b5c4cb63c3a46a265d4db53be9554989a814b069d0af82f2.json b/crates/db/.sqlx/query-72769cc30de13bb250687b26609ee95660cb4b716615406ecb6f45c4562c3f97.json
similarity index 75%
rename from crates/db/.sqlx/query-b2b2c6b4d0b1a347b5c4cb63c3a46a265d4db53be9554989a814b069d0af82f2.json
rename to crates/db/.sqlx/query-72769cc30de13bb250687b26609ee95660cb4b716615406ecb6f45c4562c3f97.json
index 84cbfd22..32a0cbca 100644
--- a/crates/db/.sqlx/query-b2b2c6b4d0b1a347b5c4cb63c3a46a265d4db53be9554989a814b069d0af82f2.json
+++ b/crates/db/.sqlx/query-72769cc30de13bb250687b26609ee95660cb4b716615406ecb6f45c4562c3f97.json
@@ -1,6 +1,6 @@
{
"db_name": "SQLite",
- "query": "SELECT id as \"id!: Uuid\", name, git_repo_path, setup_script, dev_script, cleanup_script, created_at as \"created_at!: DateTime\", updated_at as \"updated_at!: DateTime\" FROM projects ORDER BY created_at DESC",
+ "query": "SELECT id as \"id!: Uuid\", name, git_repo_path, setup_script, dev_script, cleanup_script, copy_files, created_at as \"created_at!: DateTime\", updated_at as \"updated_at!: DateTime\" FROM projects ORDER BY created_at DESC",
"describe": {
"columns": [
{
@@ -34,14 +34,19 @@
"type_info": "Text"
},
{
- "name": "created_at!: DateTime",
+ "name": "copy_files",
"ordinal": 6,
"type_info": "Text"
},
{
- "name": "updated_at!: DateTime",
+ "name": "created_at!: DateTime",
"ordinal": 7,
"type_info": "Text"
+ },
+ {
+ "name": "updated_at!: DateTime",
+ "ordinal": 8,
+ "type_info": "Text"
}
],
"parameters": {
@@ -54,9 +59,10 @@
true,
true,
true,
+ true,
false,
false
]
},
- "hash": "b2b2c6b4d0b1a347b5c4cb63c3a46a265d4db53be9554989a814b069d0af82f2"
+ "hash": "72769cc30de13bb250687b26609ee95660cb4b716615406ecb6f45c4562c3f97"
}
diff --git a/crates/db/.sqlx/query-3a5b3c98a55ca183ab20c74708e3d7e579dda37972c059e7515c4ceee4bd8dd3.json b/crates/db/.sqlx/query-821192d8d8a8fba8ce0f144a32e7e500aaa2b6e527b7e7f082a1c73b1f9f9eb8.json
similarity index 75%
rename from crates/db/.sqlx/query-3a5b3c98a55ca183ab20c74708e3d7e579dda37972c059e7515c4ceee4bd8dd3.json
rename to crates/db/.sqlx/query-821192d8d8a8fba8ce0f144a32e7e500aaa2b6e527b7e7f082a1c73b1f9f9eb8.json
index a0dfb371..d3b1aad8 100644
--- a/crates/db/.sqlx/query-3a5b3c98a55ca183ab20c74708e3d7e579dda37972c059e7515c4ceee4bd8dd3.json
+++ b/crates/db/.sqlx/query-821192d8d8a8fba8ce0f144a32e7e500aaa2b6e527b7e7f082a1c73b1f9f9eb8.json
@@ -1,6 +1,6 @@
{
"db_name": "SQLite",
- "query": "SELECT id as \"id!: Uuid\", name, git_repo_path, setup_script, dev_script, cleanup_script, created_at as \"created_at!: DateTime\", updated_at as \"updated_at!: DateTime\" FROM projects WHERE git_repo_path = $1",
+ "query": "SELECT id as \"id!: Uuid\", name, git_repo_path, setup_script, dev_script, cleanup_script, copy_files, created_at as \"created_at!: DateTime\", updated_at as \"updated_at!: DateTime\" FROM projects WHERE id = $1",
"describe": {
"columns": [
{
@@ -34,14 +34,19 @@
"type_info": "Text"
},
{
- "name": "created_at!: DateTime",
+ "name": "copy_files",
"ordinal": 6,
"type_info": "Text"
},
{
- "name": "updated_at!: DateTime",
+ "name": "created_at!: DateTime",
"ordinal": 7,
"type_info": "Text"
+ },
+ {
+ "name": "updated_at!: DateTime",
+ "ordinal": 8,
+ "type_info": "Text"
}
],
"parameters": {
@@ -54,9 +59,10 @@
true,
true,
true,
+ true,
false,
false
]
},
- "hash": "3a5b3c98a55ca183ab20c74708e3d7e579dda37972c059e7515c4ceee4bd8dd3"
+ "hash": "821192d8d8a8fba8ce0f144a32e7e500aaa2b6e527b7e7f082a1c73b1f9f9eb8"
}
diff --git a/crates/db/.sqlx/query-6ecfa16d0cf825aacf233544b5baf151e9adfdca26c226ad71020d291fd802d5.json b/crates/db/.sqlx/query-b95cb59154da69213dea2ded3646d2df2f68293be211cc4f9db0582ea691efee.json
similarity index 74%
rename from crates/db/.sqlx/query-6ecfa16d0cf825aacf233544b5baf151e9adfdca26c226ad71020d291fd802d5.json
rename to crates/db/.sqlx/query-b95cb59154da69213dea2ded3646d2df2f68293be211cc4f9db0582ea691efee.json
index 329e4f71..689763bd 100644
--- a/crates/db/.sqlx/query-6ecfa16d0cf825aacf233544b5baf151e9adfdca26c226ad71020d291fd802d5.json
+++ b/crates/db/.sqlx/query-b95cb59154da69213dea2ded3646d2df2f68293be211cc4f9db0582ea691efee.json
@@ -1,6 +1,6 @@
{
"db_name": "SQLite",
- "query": "SELECT id as \"id!: Uuid\", name, git_repo_path, setup_script, dev_script, cleanup_script, created_at as \"created_at!: DateTime\", updated_at as \"updated_at!: DateTime\" FROM projects WHERE git_repo_path = $1 AND id != $2",
+ "query": "SELECT id as \"id!: Uuid\", name, git_repo_path, setup_script, dev_script, cleanup_script, copy_files, created_at as \"created_at!: DateTime\", updated_at as \"updated_at!: DateTime\" FROM projects WHERE git_repo_path = $1 AND id != $2",
"describe": {
"columns": [
{
@@ -34,14 +34,19 @@
"type_info": "Text"
},
{
- "name": "created_at!: DateTime",
+ "name": "copy_files",
"ordinal": 6,
"type_info": "Text"
},
{
- "name": "updated_at!: DateTime",
+ "name": "created_at!: DateTime",
"ordinal": 7,
"type_info": "Text"
+ },
+ {
+ "name": "updated_at!: DateTime",
+ "ordinal": 8,
+ "type_info": "Text"
}
],
"parameters": {
@@ -54,9 +59,10 @@
true,
true,
true,
+ true,
false,
false
]
},
- "hash": "6ecfa16d0cf825aacf233544b5baf151e9adfdca26c226ad71020d291fd802d5"
+ "hash": "b95cb59154da69213dea2ded3646d2df2f68293be211cc4f9db0582ea691efee"
}
diff --git a/crates/db/migrations/20250811000000_add_copy_files_to_projects.sql b/crates/db/migrations/20250811000000_add_copy_files_to_projects.sql
new file mode 100644
index 00000000..09ae996d
--- /dev/null
+++ b/crates/db/migrations/20250811000000_add_copy_files_to_projects.sql
@@ -0,0 +1,3 @@
+-- Add copy_files column to projects table
+-- This field stores comma-separated file paths to copy from the original project directory to the worktree
+ALTER TABLE projects ADD COLUMN copy_files TEXT;
\ No newline at end of file
diff --git a/crates/db/src/models/project.rs b/crates/db/src/models/project.rs
index 35d4db09..1fc44e40 100644
--- a/crates/db/src/models/project.rs
+++ b/crates/db/src/models/project.rs
@@ -29,6 +29,7 @@ pub struct Project {
pub setup_script: Option,
pub dev_script: Option,
pub cleanup_script: Option,
+ pub copy_files: Option,
#[ts(type = "Date")]
pub created_at: DateTime,
@@ -44,6 +45,7 @@ pub struct CreateProject {
pub setup_script: Option,
pub dev_script: Option,
pub cleanup_script: Option,
+ pub copy_files: Option,
}
#[derive(Debug, Deserialize, TS)]
@@ -53,6 +55,7 @@ pub struct UpdateProject {
pub setup_script: Option,
pub dev_script: Option,
pub cleanup_script: Option,
+ pub copy_files: Option,
}
#[derive(Debug, Serialize, TS)]
@@ -63,6 +66,7 @@ pub struct ProjectWithBranch {
pub setup_script: Option,
pub dev_script: Option,
pub cleanup_script: Option,
+ pub copy_files: Option,
pub current_branch: Option,
#[ts(type = "Date")]
@@ -80,6 +84,7 @@ impl ProjectWithBranch {
setup_script: project.setup_script,
dev_script: project.dev_script,
cleanup_script: project.cleanup_script,
+ copy_files: project.copy_files,
current_branch,
created_at: project.created_at,
updated_at: project.updated_at,
@@ -105,7 +110,7 @@ impl Project {
pub async fn find_all(pool: &SqlitePool) -> Result, sqlx::Error> {
sqlx::query_as!(
Project,
- r#"SELECT id as "id!: Uuid", name, git_repo_path, setup_script, dev_script, cleanup_script, created_at as "created_at!: DateTime", updated_at as "updated_at!: DateTime" FROM projects ORDER BY created_at DESC"#
+ r#"SELECT id as "id!: Uuid", name, git_repo_path, setup_script, dev_script, cleanup_script, copy_files, created_at as "created_at!: DateTime", updated_at as "updated_at!: DateTime" FROM projects ORDER BY created_at DESC"#
)
.fetch_all(pool)
.await
@@ -114,7 +119,7 @@ impl Project {
pub async fn find_by_id(pool: &SqlitePool, id: Uuid) -> Result
+
+
+
+
+ Comma-separated list of files to copy from the original project
+ directory to the worktree. These files will be copied after the
+ worktree is created but before the setup script runs. Useful for
+ environment-specific files like .env, configuration files, and local
+ settings. Make sure these are gitignored or they could get committed!
+