Compare commits
41 Commits
6ab4f1e026
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 95a19dceb3 | |||
| e8f66cd06f | |||
| c5a2463b91 | |||
|
|
1c86fa0c68 | ||
|
|
b67c2e7779 | ||
|
|
e1086312dd | ||
|
|
ba46dce3a3 | ||
| 2238021885 | |||
|
|
c101fbb381 | ||
|
|
68330de0fb | ||
|
|
0cff26cb0d | ||
| 75c2c1ed02 | |||
| 584f5135dd | |||
|
|
bffbff528e | ||
| 756e8168fb | |||
|
|
fbc0f833dc | ||
|
|
06e8177f0b | ||
| 81ada88dc1 | |||
|
|
2fd5023816 | ||
|
|
6c20b2de52 | ||
| b7ae8880e7 | |||
| 0da1dbd09a | |||
| e1c1aacd0d | |||
|
|
6d4cdb0549 | ||
|
|
55a2074c62 | ||
|
|
a152d17136 | ||
| ff6d3f584f | |||
| f795ea3848 | |||
| f2e3a96bf2 | |||
| 23562de9cf | |||
| 5b409d771b | |||
|
|
169b4f656d | ||
|
|
a506c09a49 | ||
|
|
83b5e62266 | ||
|
|
124ad9e3b6 | ||
|
|
dfc113ea38 | ||
|
|
5c5e22cfb7 | ||
|
|
cef84c68b9 | ||
| db2ee821fb | |||
| e541aa1a12 | |||
| 78598f68db |
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
|||||||
<!-- Generated by SpecStory -->
|
<!-- Generated by SpecStory, Markdown v2.1.0 -->
|
||||||
|
|
||||||
<!-- cursor Session 22ad1b66-1412-4dc8-962e-ef2f925bebf4 (2025-10-30 00:40Z) -->
|
<!-- cursor Session 22ad1b66-1412-4dc8-962e-ef2f925bebf4 (2025-10-30 00:40Z) -->
|
||||||
|
|
||||||
@@ -10,7 +10,7 @@ _**User (2025-10-30 00:28Z)**_
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
_**Assistant (gpt-5-codex)**_
|
_**Agent (model default, mode Plan)**_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -22,19 +22,21 @@ Reviewing `components/gitignore` and scanning `R:\Creative\artsy\maya\` for YYYY
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Tool use: **read_file**
|
<tool-use data-tool-type="read" data-tool-name="read_file">
|
||||||
|
<details><summary>Tool use: **read_file** • Read file: components/gitignore</summary>
|
||||||
|
|
||||||
Read file: components/gitignore
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Tool use: **list_dir**
|
<tool-use data-tool-type="generic" data-tool-name="list_dir">
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Listed directory undefined • **0** results</summary>
|
<summary>Tool use: **list_directory** • Listed directory undefined • **0** results</summary>
|
||||||
|
|
||||||
No results found
|
No results found
|
||||||
</details>
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -47,16 +49,17 @@ Checking a project directory to understand the structure:
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Tool use: **read_file**
|
<tool-use data-tool-type="read" data-tool-name="read_file">
|
||||||
|
<details><summary>Tool use: **read_file** • Read file: R:\Creative\artsy\maya\2025-08-02 Springtrap Prince of Egypt\.gitignore</summary>
|
||||||
|
|
||||||
Read file: R:\Creative\artsy\maya\2025-08-02 Springtrap Prince of Egypt\.gitignore
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Tool use: **codebase_search**
|
<tool-use data-tool-type="search" data-tool-name="codebase_search">
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Searched codebase "How does UpgradeToGitProj merge gitignore files?" • **14** results</summary>
|
<summary>Tool use: **codebase_search** • Searched codebase "How does UpgradeToGitProj merge gitignore files?" • **14** results</summary>
|
||||||
|
|
||||||
| File | Lines |
|
| File | Lines |
|
||||||
|------|-------|
|
|------|-------|
|
||||||
@@ -76,6 +79,7 @@ Tool use: **codebase_search**
|
|||||||
| `UpdateSequences.ps1` | L257-288 |
|
| `UpdateSequences.ps1` | L257-288 |
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -88,10 +92,9 @@ Clarifying a few details before creating the plan:
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Tool use: **grep**
|
<tool-use data-tool-type="search" data-tool-name="grep">
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Grep for "^renders/|^Renders/" in "components/gitignore" • 1 match</summary>
|
<summary>Tool use: **grep** • Grep for "^renders/|^Renders/" in "components/gitignore" • 1 match</summary>
|
||||||
|
|
||||||
Output mode: content
|
Output mode: content
|
||||||
|
|
||||||
@@ -102,6 +105,7 @@ Output mode: content
|
|||||||
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -114,7 +118,44 @@ Creating the plan:
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Tool use: **create_plan**
|
<tool-use data-tool-type="unknown" data-tool-name="create_plan">
|
||||||
|
<details>
|
||||||
|
<summary>Tool use: **create_plan**</summary>
|
||||||
|
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"plan": "# Sync gitignore across project repositories\n\n## Overview\nUpdate `.gitignore` files in all project repositories matching the YYYY-MM-DD pattern in `R:\\Creative\\artsy\\maya\\` by merging missing lines from `components/gitignore`, then commit each change.\n\n## Steps\n\n### 1. Discover project directories\n- Scan `R:\\Creative\\artsy\\maya\\` for directories matching pattern `YYYY-MM-DD*` (e.g., `2025-08-02 Springtrap Prince of Egypt`)\n- Filter to only directories that are git repositories (contain `.git` folder)\n\n### 2. For each project repository:\n - **Verify git repo**: Check if `.git` exists\n - **Merge .gitignore**: \n - Use the merge logic from `UpgradeToGitProj.bat` (`:MergeTemplate` function)\n - If `.gitignore` doesn Jones exist, copy from template\n - If it exists, fastr `/x /c:\"%%L\" \"%dst%\" || (>>\"%dst白白\" echo %%L)` to append only missing lines\n - Source: `R:\\Creative\\artsy\\maya\\0 ProjectStructure\\components\\gitignore`\n - Destination: `{projectDir}\\.gitignore`\n - **Stage changes**: Run `git add .gitignore` in each repo\n - **Commit**: Run `git commit -m \"prproj gzip to LFS\"` in each repo\n\n### 3. Report results\n- List which repos were updated\n- List which repos had no changes (already up to date)\n- List any repos that failed (not git repos, permission errors, etc.)\n\n## Implementation notes\n- Use the same merge logic as `UpgradeToGitProj.bat` lines 248-250\n- Only process directories that are git repositories\n- Handle cases where `.gitignore` doesn't exist (copy entire template)\n- Commit only if there are actual changes to `.gitignore`\n",
|
||||||
|
"name": "Sync gitignore across project repos",
|
||||||
|
"overview": "Find all YYYY-MM-DD project directories in R:\\Creative\\artsy\\maya\\, merge changes from components/gitignore into each repo's .gitignore (using append-missing-lines logic), and commit with the specified message."
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Additional data:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"status": "pending",
|
||||||
|
"reviewData": {
|
||||||
|
"status": "Requested",
|
||||||
|
"selectedOption": "none",
|
||||||
|
"isShowingInput": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Result:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"rejected": {}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Status: **completed**
|
||||||
|
|
||||||
|
|
||||||
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -124,13 +165,51 @@ Proofread the markdown, there seems to be some hallucinatory content in there.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
_**Assistant (gpt-5-codex)**_
|
_**Agent (model gpt-5-codex, mode Plan)**_
|
||||||
|
|
||||||
<think><details><summary>Thought Process</summary>**Correcting hallucinations and typos in plan**</details></think>
|
<think><details><summary>Thought Process</summary>
|
||||||
|
**Correcting hallucinations and typos in plan**</details></think>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Tool use: **create_plan**
|
<tool-use data-tool-type="unknown" data-tool-name="create_plan">
|
||||||
|
<details>
|
||||||
|
<summary>Tool use: **create_plan**</summary>
|
||||||
|
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"plan": "# Sync gitignore across project repositories\n\n## Overview\n\nUpdate `.gitignore` files in all project repositories matching the YYYY-MM-DD pattern in `R:\\Creative\\artsy\\maya\\` by merging missing lines from `components/gitignore`, then commit each change.\n\n## Steps\n\n### 1. Discover project directories\n\n- Scan `R:\\Creative\\artsy\\maya\\` for directories matching pattern `YYYY-MM-DD*` (e.g., `2025-08-02 Springtrap Prince of Egypt`)\n- Filter to only directories that are git repositories (contain `.git` folder)\n\n### 2. For each project repository:\n\n- **Verify git repo**: Check if `.git` exists\n- **Merge .gitignore**: \n - Use the merge logic from `UpgradeToGitProj.bat` (`:MergeTemplate` function)\n - If `.gitignore` doesn't exist, copy the template file in full\n - If it already exists, iterate each template line and append only those lines not present (e.g., `findstr /x /c:\"%%L\" \"%dst%\" || (>>\"%dst%\" echo %%L)`)\n - Source: `R:\\Creative\\artsy\\maya\\0 ProjectStructure\\components\\gitignore`\n - Destination: `{projectDir}\\.gitignore`\n- **Stage changes**: Run `git add .gitignore` in each repo\n- **Commit**: Run `git commit -m \"prproj gzip to LFS\"` in each repo\n\n### 3. Report results\n\n- List which repos were updated\n- List which repos had no changes (already up to date)\n- List any repos that failed (not git repos, permission errors, etc.)\n\n## Implementation notes\n\n- Use the same merge logic as `UpgradeToGitProj.bat` lines 248-250\n- Only process directories that are git repositories\n- Handle cases where `.gitignore` doesn't exist (copy entire template)\n- Commit only if there are actual changes to `.gitignore`",
|
||||||
|
"name": "Sync gitignore across project repos",
|
||||||
|
"overview": "Find all YYYY-MM-DD project directories in R:\\Creative\\artsy\\maya\\, merge changes from components/gitignore into each repo's .gitignore (using append-missing-lines logic), and commit with the specified message."
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Additional data:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"status": "accepted",
|
||||||
|
"reviewData": {
|
||||||
|
"status": "Done",
|
||||||
|
"selectedOption": "approve",
|
||||||
|
"isShowingInput": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Result:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"accepted": {}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Status: **completed**
|
||||||
|
|
||||||
|
|
||||||
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -140,57 +219,66 @@ Implement the plan as specified. To-do's from the plan have already been created
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
_**Assistant (gpt-5-codex)**_
|
_**Agent (model gpt-5-codex, mode Agent)**_
|
||||||
|
|
||||||
<think><details><summary>Thought Process</summary>**Preparing to update gitignore files**</details></think>
|
<think><details><summary>Thought Process</summary>
|
||||||
|
**Preparing to update gitignore files**</details></think>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Tool use: **list_dir**
|
<tool-use data-tool-type="generic" data-tool-name="list_dir">
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Listed directory undefined • **0** results</summary>
|
<summary>Tool use: **list_directory** • Listed directory undefined • **0** results</summary>
|
||||||
|
|
||||||
No results found
|
No results found
|
||||||
</details>
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<think><details><summary>Thought Process</summary>**Identifying git repositories from dated directories**</details></think>
|
<think><details><summary>Thought Process</summary>
|
||||||
|
**Identifying git repositories from dated directories**</details></think>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Tool use: **list_dir**
|
<tool-use data-tool-type="generic" data-tool-name="list_dir">
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Listed directory undefined • **0** results</summary>
|
<summary>Tool use: **list_directory** • Listed directory undefined • **0** results</summary>
|
||||||
|
|
||||||
No results found
|
No results found
|
||||||
</details>
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<think><details><summary>Thought Process</summary>**Verifying Git repository presence**</details></think>
|
<think><details><summary>Thought Process</summary>
|
||||||
|
**Verifying Git repository presence**</details></think>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Tool use: **read_file**
|
<tool-use data-tool-type="read" data-tool-name="read_file">
|
||||||
|
<details><summary>Tool use: **read_file** • Read file: R:\Creative\artsy\maya\2025-02 BondingArtifact\.git\config</summary>
|
||||||
|
|
||||||
Read file: R:\Creative\artsy\maya\2025-02 BondingArtifact\.git\config
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<think><details><summary>Thought Process</summary>**Checking and planning .gitignore update**</details></think>
|
<think><details><summary>Thought Process</summary>
|
||||||
|
**Checking and planning .gitignore update**</details></think>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Tool use: **read_file**
|
<tool-use data-tool-type="read" data-tool-name="read_file">
|
||||||
|
<details><summary>Tool use: **read_file** • Read file: R:\Creative\artsy\maya\2025-02 BondingArtifact\.gitignore</summary>
|
||||||
|
|
||||||
Read file: R:\Creative\artsy\maya\2025-02 BondingArtifact\.gitignore
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<think><details><summary>Thought Process</summary>**Comparing and planning .gitignore updates**</details></think>
|
<think><details><summary>Thought Process</summary>
|
||||||
|
**Comparing and planning .gitignore updates**</details></think>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -208,13 +296,16 @@ sorry, you got stuck.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
_**Assistant (gpt-5-codex)**_
|
_**Agent (model gpt-5-codex, mode Agent)**_
|
||||||
|
|
||||||
<think><details><summary>Thought Process</summary>**Planning directory processing with PowerShell**</details></think>
|
<think><details><summary>Thought Process</summary>
|
||||||
|
**Planning directory processing with PowerShell**</details></think>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Tool use: **run_terminal_cmd**
|
<tool-use data-tool-type="shell" data-tool-name="run_terminal_cmd">
|
||||||
|
<details><summary>Tool use: **command** • Run command: cd R:\Creative\artsy\maya
|
||||||
|
Get-ChildItem -Directory | Where-Object { $_.Name -match '^[0-9]{4}-[0-9]{2}-[0-9]{2}' -and (Test-Path (Join-Path $_.FullName '.git')) } | Select-Object -ExpandProperty FullName</summary>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd R:\Creative\artsy\maya
|
cd R:\Creative\artsy\maya
|
||||||
@@ -229,16 +320,72 @@ R:\Creative\artsy\maya\2025-08-02 Springtrap Prince of Egypt
|
|||||||
R:\Creative\artsy\maya\2025-08-17 DIE
|
R:\Creative\artsy\maya\2025-08-17 DIE
|
||||||
|
|
||||||
```
|
```
|
||||||
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<think><details><summary>Thought Process</summary>**Automating .gitignore updates across repos**
|
<think><details><summary>Thought Process</summary>
|
||||||
|
**Automating .gitignore updates across repos**
|
||||||
|
|
||||||
I'm drafting a PowerShell script to sync a template `.gitignore` to multiple git repos, carefully adding missing lines without duplicates and preserving newlines. The script will stage and commit changes only when needed, handling edge cases like missing files, trailing spaces, and git errors. I'll also ensure repo paths with spaces are correctly quoted for smooth execution.</details></think>
|
I'm drafting a PowerShell script to sync a template `.gitignore` to multiple git repos, carefully adding missing lines without duplicates and preserving newlines. The script will stage and commit changes only when needed, handling edge cases like missing files, trailing spaces, and git errors. I'll also ensure repo paths with spaces are correctly quoted for smooth execution.</details></think>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Tool use: **run_terminal_cmd**
|
<tool-use data-tool-type="shell" data-tool-name="run_terminal_cmd">
|
||||||
|
<details><summary>Tool use: **command** • Run command: cd R:\Creative\artsy\maya
|
||||||
|
$ErrorActionPreference = 'Stop'
|
||||||
|
$tplPath = 'R:\Creative\artsy\maya\0 ProjectStructure\components\gitignore'
|
||||||
|
$repos = @(
|
||||||
|
'R:\Creative\artsy\maya\2025-07-09 LolbitNSFW',
|
||||||
|
'R:\Creative\artsy\maya\2025-07-11 GothFexa',
|
||||||
|
'R:\Creative\artsy\maya\2025-07-29 Springtrap_Goopie',
|
||||||
|
'R:\Creative\artsy\maya\2025-08-02 Springtrap Prince of Egypt',
|
||||||
|
'R:\Creative\artsy\maya\2025-08-17 DIE'
|
||||||
|
)
|
||||||
|
$summary = @()
|
||||||
|
foreach ($repo in $repos) {
|
||||||
|
if (-not (Test-Path (Join-Path $repo '.git'))) {
|
||||||
|
$summary += [pscustomobject]@{Repo=$repo; Status='not-a-git-repo'}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
$dstPath = Join-Path $repo '.gitignore'
|
||||||
|
$changed = $false
|
||||||
|
if (-not (Test-Path $dstPath)) {
|
||||||
|
Copy-Item -LiteralPath $tplPath -Destination $dstPath -Force
|
||||||
|
$changed = $true
|
||||||
|
} else {
|
||||||
|
$tplLines = Get-Content -LiteralPath $tplPath
|
||||||
|
$dstLines = Get-Content -LiteralPath $dstPath
|
||||||
|
$missing = @()
|
||||||
|
foreach ($line in $tplLines) {
|
||||||
|
if ($dstLines -notcontains $line) { $missing += $line }
|
||||||
|
}
|
||||||
|
if ($missing.Count -gt 0) {
|
||||||
|
if ($dstLines.Count -gt 0 -and $dstLines[-1] -ne '') {
|
||||||
|
Add-Content -LiteralPath $dstPath -Value ''
|
||||||
|
}
|
||||||
|
Add-Content -LiteralPath $dstPath -Value $missing
|
||||||
|
$changed = $true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($changed) {
|
||||||
|
Push-Location $repo
|
||||||
|
git add .gitignore | Out-Null
|
||||||
|
$commitSucceeded = $true
|
||||||
|
try {
|
||||||
|
$commitOutput = git commit -m 'prproj gzip to LFS'
|
||||||
|
} catch {
|
||||||
|
$commitSucceeded = $false
|
||||||
|
$commitOutput = $_.Exception.Message
|
||||||
|
}
|
||||||
|
Pop-Location
|
||||||
|
$summary += [pscustomobject]@{Repo=$repo; Status=($(if ($commitSucceeded) {'updated'} else {'commit-failed'})); Output=$commitOutput}
|
||||||
|
} else {
|
||||||
|
$summary += [pscustomobject]@{Repo=$repo; Status='up-to-date'}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$summary</summary>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd R:\Creative\artsy\maya
|
cd R:\Creative\artsy\maya
|
||||||
@@ -300,14 +447,33 @@ $summary
|
|||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<think><details><summary>Thought Process</summary>**Analyzing missing command output**</details></think>
|
<think><details><summary>Thought Process</summary>
|
||||||
|
**Analyzing missing command output**</details></think>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Tool use: **run_terminal_cmd**
|
<tool-use data-tool-type="shell" data-tool-name="run_terminal_cmd">
|
||||||
|
<details><summary>Tool use: **command** • Run command: cd R:\Creative\artsy\maya
|
||||||
|
$repos = @(
|
||||||
|
'R:\Creative\artsy\maya\2025-07-09 LolbitNSFW',
|
||||||
|
'R:\Creative\artsy\maya\2025-07-11 GothFexa',
|
||||||
|
'R:\Creative\artsy\maya\2025-07-29 Springtrap_Goopie',
|
||||||
|
'R:\Creative\artsy\maya\2025-08-02 Springtrap Prince of Egypt',
|
||||||
|
'R:\Creative\artsy\maya\2025-08-17 DIE'
|
||||||
|
)
|
||||||
|
foreach ($repo in $repos) {
|
||||||
|
Write-Host "--- $repo ---"
|
||||||
|
if (-not (Test-Path (Join-Path $repo '.git'))) {
|
||||||
|
Write-Host 'not a git repo'
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
git -C $repo status --short .gitignore
|
||||||
|
}</summary>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd R:\Creative\artsy\maya
|
cd R:\Creative\artsy\maya
|
||||||
@@ -336,24 +502,32 @@ foreach ($repo in $repos) {
|
|||||||
--- R:\Creative\artsy\maya\2025-08-17 DIE ---
|
--- R:\Creative\artsy\maya\2025-08-17 DIE ---
|
||||||
|
|
||||||
```
|
```
|
||||||
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<think><details><summary>Thought Process</summary>**Verifying commits and changes**</details></think>
|
<think><details><summary>Thought Process</summary>
|
||||||
|
**Verifying commits and changes**</details></think>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Tool use: **read_file**
|
<tool-use data-tool-type="read" data-tool-name="read_file">
|
||||||
|
<details><summary>Tool use: **read_file** • Read file: R:\Creative\artsy\maya\2025-07-29 Springtrap_Goopie\.gitignore</summary>
|
||||||
|
|
||||||
Read file: R:\Creative\artsy\maya\2025-07-29 Springtrap_Goopie\.gitignore
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<think><details><summary>Thought Process</summary>**Analyzing duplicate lines from template merge**</details></think>
|
<think><details><summary>Thought Process</summary>
|
||||||
|
**Analyzing duplicate lines from template merge**</details></think>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Tool use: **run_terminal_cmd**
|
<tool-use data-tool-type="shell" data-tool-name="run_terminal_cmd">
|
||||||
|
<details><summary>Tool use: **command** • Run command: cd "R:\Creative\artsy\maya\2025-07-29 Springtrap_Goopie"
|
||||||
|
git log -1 --pretty=%s</summary>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd "R:\Creative\artsy\maya\2025-07-29 Springtrap_Goopie"
|
cd "R:\Creative\artsy\maya\2025-07-29 Springtrap_Goopie"
|
||||||
@@ -364,16 +538,32 @@ git log -1 --pretty=%s
|
|||||||
prproj gzip to LFS
|
prproj gzip to LFS
|
||||||
|
|
||||||
```
|
```
|
||||||
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<think><details><summary>Thought Process</summary>**Summarizing repo commit statuses**
|
<think><details><summary>Thought Process</summary>
|
||||||
|
**Summarizing repo commit statuses**
|
||||||
|
|
||||||
I’m figuring out how to identify which repos actually got updated by checking their latest commit messages and logs, aiming to differentiate repos with real changes from those without commits. I want to produce a concise table listing each repo alongside its HEAD commit message to clearly show which ones were modified.</details></think>
|
I’m figuring out how to identify which repos actually got updated by checking their latest commit messages and logs, aiming to differentiate repos with real changes from those without commits. I want to produce a concise table listing each repo alongside its HEAD commit message to clearly show which ones were modified.</details></think>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Tool use: **run_terminal_cmd**
|
<tool-use data-tool-type="shell" data-tool-name="run_terminal_cmd">
|
||||||
|
<details><summary>Tool use: **command** • Run command: $repos = @(
|
||||||
|
'R:\Creative\artsy\maya\2025-07-09 LolbitNSFW',
|
||||||
|
'R:\Creative\artsy\maya\2025-07-11 GothFexa',
|
||||||
|
'R:\Creative\artsy\maya\2025-07-29 Springtrap_Goopie',
|
||||||
|
'R:\Creative\artsy\maya\2025-08-02 Springtrap Prince of Egypt',
|
||||||
|
'R:\Creative\artsy\maya\2025-08-17 DIE'
|
||||||
|
)
|
||||||
|
foreach ($repo in $repos) {
|
||||||
|
if (-not (Test-Path (Join-Path $repo '.git'))) { continue }
|
||||||
|
$subject = git -C $repo log -1 --pretty=%s
|
||||||
|
Write-Host "${repo}`n HEAD: $subject"
|
||||||
|
}
|
||||||
|
</summary>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$repos = @(
|
$repos = @(
|
||||||
@@ -404,20 +594,26 @@ R:\Creative\artsy\maya\2025-08-17 DIE
|
|||||||
HEAD: prproj gzip to LFS
|
HEAD: prproj gzip to LFS
|
||||||
|
|
||||||
```
|
```
|
||||||
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<think><details><summary>Thought Process</summary>**Verifying .gitignore entries**</details></think>
|
<think><details><summary>Thought Process</summary>
|
||||||
|
**Verifying .gitignore entries**</details></think>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Tool use: **read_file**
|
<tool-use data-tool-type="read" data-tool-name="read_file">
|
||||||
|
<details><summary>Tool use: **read_file** • Read file: R:\Creative\artsy\maya\2025-08-02 Springtrap Prince of Egypt\.gitignore</summary>
|
||||||
|
|
||||||
Read file: R:\Creative\artsy\maya\2025-08-02 Springtrap Prince of Egypt\.gitignore
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<think><details><summary>Thought Process</summary>**Investigating case sensitivity in appended lines**</details></think>
|
<think><details><summary>Thought Process</summary>
|
||||||
|
**Investigating case sensitivity in appended lines**</details></think>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -425,11 +621,25 @@ spawn c:\Users\Nathan\AppData\Local\Programs\cursor\resources\app\node_modules\@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<think><details><summary>Thought Process</summary>**Analyzing case sensitivity in line sync**</details></think>
|
<think><details><summary>Thought Process</summary>
|
||||||
|
**Analyzing case sensitivity in line sync**</details></think>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Tool use: **run_terminal_cmd**
|
<tool-use data-tool-type="shell" data-tool-name="run_terminal_cmd">
|
||||||
|
<details><summary>Tool use: **command** • Run command: $repos = @(
|
||||||
|
'R:\Creative\artsy\maya\2025-07-09 LolbitNSFW',
|
||||||
|
'R:\Creative\artsy\maya\2025-07-11 GothFexa',
|
||||||
|
'R:\Creative\artsy\maya\2025-07-29 Springtrap_Goopie',
|
||||||
|
'R:\Creative\artsy\maya\2025-08-02 Springtrap Prince of Egypt',
|
||||||
|
'R:\Creative\artsy\maya\2025-08-17 DIE'
|
||||||
|
)
|
||||||
|
foreach ($repo in $repos) {
|
||||||
|
if (-not (Test-Path (Join-Path $repo '.git'))) { continue }
|
||||||
|
$hash = git -C $repo rev-parse --short HEAD
|
||||||
|
Write-Host "${repo}`n Commit: $hash"
|
||||||
|
}
|
||||||
|
</summary>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$repos = @(
|
$repos = @(
|
||||||
@@ -460,10 +670,13 @@ R:\Creative\artsy\maya\2025-08-17 DIE
|
|||||||
Commit: a403b76
|
Commit: a403b76
|
||||||
|
|
||||||
```
|
```
|
||||||
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<think><details><summary>Thought Process</summary>**Preparing final summary message**</details></think>
|
<think><details><summary>Thought Process</summary>
|
||||||
|
**Preparing final summary message**</details></think>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
22256
.specstory/history/2025-11-10_16-59Z-change-compression-method-to-7z.md
Normal file
22256
.specstory/history/2025-11-10_16-59Z-change-compression-method-to-7z.md
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -0,0 +1,235 @@
|
|||||||
|
<!-- Generated by SpecStory, Markdown v2.1.0 -->
|
||||||
|
|
||||||
|
<!-- cursor Session ebd5381e-09fc-4db2-a2c9-6daab402cc8a (2025-11-17 19:23Z) -->
|
||||||
|
|
||||||
|
# Sort and comment gitattributes file (2025-11-17 19:23Z)
|
||||||
|
|
||||||
|
_**User (2025-11-17 19:20Z)**_
|
||||||
|
|
||||||
|
@gitattributes (1-59) let's sort this with some comments and sort each with a section. can we do that without presenting errors?
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
_**Agent (model default, mode Agent)**_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
Organizing the gitattributes file into sections with comments and removing duplicates. Checking for duplicates first:
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<tool-use data-tool-type="read" data-tool-name="read_file">
|
||||||
|
<details><summary>Tool use: **read_file** • Read file: components/gitattributes</summary>
|
||||||
|
|
||||||
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
Organizing into sections with comments, removing duplicates, and sorting each section alphabetically:
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<tool-use data-tool-type="write" data-tool-name="write">
|
||||||
|
|
||||||
|
<details><summary>Tool use: **code_edit** • Edit file: components/gitattributes</summary>
|
||||||
|
|
||||||
|
**Chunk 1**
|
||||||
|
Lines added: 63, lines removed: 42
|
||||||
|
|
||||||
|
```diff
|
||||||
|
@@ -1,59 +1,80 @@
|
||||||
|
+ # Git LFS attributes configuration
|
||||||
|
+ # All listed file types will be tracked by Git LFS
|
||||||
|
+
|
||||||
|
+ # Video files
|
||||||
|
+ *.avi filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.mkv filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.mov filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.MOV filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.mp4 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.png filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.jpg filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+
|
||||||
|
+ # Image files
|
||||||
|
+ *.bmp filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.exr filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.gif filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.hdr filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.jpg filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.jpeg filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.png filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.psd filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.tga filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.tif filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.tiff filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+
|
||||||
|
+ # 3D/CG files
|
||||||
|
+ *.3ds filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.abc filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.blend filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.7z filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.abc filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.pdf filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.mkv filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.obj filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.max filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.ma filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.blend1 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.blend2 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.bvh filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.h5 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.tar filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.bvh.gz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.c4d filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.mov filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.blend1 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.3ds filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.hdf5 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.psd filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.zip filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.dae filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.fbx filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.fbxkey filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.blend2 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.ma filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.max filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.mb filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.ma filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.tiff filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.obj filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.usd filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.vdb filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+
|
||||||
|
+ # Audio files
|
||||||
|
+ *.mp3 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.wav filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+
|
||||||
|
+ # Archive/Compression files
|
||||||
|
+ *.7z filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.gz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.rar filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.tar filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.zip filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+
|
||||||
|
+ # Documents
|
||||||
|
*.ai filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.gz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.tga filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.tif filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.jpeg filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.bmp filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.docx filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.eps filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.rar filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.bz2 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.avi filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.bvh.gz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.dae filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.mp3 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.mp3 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.vdb filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.aep filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.pdf filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+
|
||||||
|
+ # Adobe files
|
||||||
|
*.aegraphic filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.prproj filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.aep filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.prel filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.prin filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.prel filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.prmf filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.wav filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.docx filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.MOV filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.gif filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.prproj filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+
|
||||||
|
+ # Substance files
|
||||||
|
*.sbs filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.sbsar filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.spp filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.usd filter=lfs diff=lfs merge=lfs -text
|
||||||
|
- *.uni filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+
|
||||||
|
+ # Data files
|
||||||
|
+ *.h5 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+ *.hdf5 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+
|
||||||
|
+ # Other
|
||||||
|
+ *.uni filter=lfs diff=lfs merge=lfs -text
|
||||||
|
+
|
||||||
|
```
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
Checking for linting errors:
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<tool-use data-tool-type="generic" data-tool-name="read_lints">
|
||||||
|
<details>
|
||||||
|
<summary>Tool use: **read_lints** • Read lints for 1 file</summary>
|
||||||
|
|
||||||
|
Lint paths:
|
||||||
|
|
||||||
|
- `components/gitattributes`
|
||||||
|
|
||||||
|
Lint results
|
||||||
|
|
||||||
|
|
||||||
|
**No lint errors found**
|
||||||
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
Reorganized the gitattributes file:
|
||||||
|
|
||||||
|
- **Organized into sections** with comments:
|
||||||
|
- Video files
|
||||||
|
- Image files
|
||||||
|
- 3D/CG files
|
||||||
|
- Audio files
|
||||||
|
- Archive/Compression files
|
||||||
|
- Documents
|
||||||
|
- Adobe files
|
||||||
|
- Substance files
|
||||||
|
- Data files
|
||||||
|
- Other
|
||||||
|
|
||||||
|
- **Sorted each section** alphabetically
|
||||||
|
- **Removed duplicates**: `*.ma` (was on lines 13 and 28) and `*.mp3` (was on lines 42 and 43)
|
||||||
|
- **No errors**: syntax is valid and linting passes
|
||||||
|
|
||||||
|
The file is now organized and easier to maintain.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,197 @@
|
|||||||
|
<!-- Generated by SpecStory, Markdown v2.1.0 -->
|
||||||
|
|
||||||
|
<!-- cursor Session 92e6d22f-d2e8-4786-8d47-b22f9893e990 (2025-11-26 20:08Z) -->
|
||||||
|
|
||||||
|
# Configure ConfigLoader for zipseq and unzipseq (2025-11-26 20:08Z)
|
||||||
|
|
||||||
|
_**User (2025-11-26 19:57Z)**_
|
||||||
|
|
||||||
|
@ConfigLoader.ps1 ConfigLoader should push zipseq and unzipseq to \Renders.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
_**Agent (model default, mode Agent)**_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
Checking for `zipseq` and `unzipseq` files and the `\Renders` directory structure.
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<tool-use data-tool-type="generic" data-tool-name="glob_file_search">
|
||||||
|
<details>
|
||||||
|
<summary>Tool use: **glob_file_search** • Searched codebase "*zipseq*" • **2** results in **1** directory</summary>
|
||||||
|
|
||||||
|
Directory: **a:\1 Amazon_Active_Projects\3 ProjectStructure** (2 files)
|
||||||
|
|
||||||
|
| File |
|
||||||
|
|------|
|
||||||
|
| `ZipSeqArchv.bat` |
|
||||||
|
| `UnzipSeqArchv.bat` |
|
||||||
|
|
||||||
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<tool-use data-tool-type="generic" data-tool-name="glob_file_search">
|
||||||
|
<details>
|
||||||
|
<summary>Tool use: **glob_file_search** • Searched codebase "*unzipseq*" • **1** result in **1** directory</summary>
|
||||||
|
|
||||||
|
Directory: **a:\1 Amazon_Active_Projects\3 ProjectStructure** (1 file)
|
||||||
|
|
||||||
|
| File |
|
||||||
|
|------|
|
||||||
|
| `UnzipSeqArchv.bat` |
|
||||||
|
|
||||||
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<tool-use data-tool-type="search" data-tool-name="codebase_search">
|
||||||
|
<details>
|
||||||
|
<summary>Tool use: **codebase_search** • Searched codebase "Renders directory structure or path" • **14** results</summary>
|
||||||
|
|
||||||
|
| File | Lines |
|
||||||
|
|------|-------|
|
||||||
|
| `NewProject.bat` | L58-83 |
|
||||||
|
| `NewProject.bat` | L63 |
|
||||||
|
| `UpgradeToGitProj.bat` | L59 |
|
||||||
|
| `UpgradeToGitProj.bat` | L53-126 |
|
||||||
|
| `components/gitignore` | L123 |
|
||||||
|
| `zip_sequences.py` | L565-585 |
|
||||||
|
| `UpgradeToGitProj.bat` | L121-166 |
|
||||||
|
| `zip_sequences.py` | L102 |
|
||||||
|
| `UpgradeToGitProj.bat` | L160-218 |
|
||||||
|
| `ConfigLoader.ps1` | L59 |
|
||||||
|
| `GetStructDir.ps1` | L27-68 |
|
||||||
|
| `UpgradeToGitProj.bat` | L215-295 |
|
||||||
|
| `ZipSeqArchv.bat` | L44 |
|
||||||
|
| `UnzipSeqArchv.bat` | L42 |
|
||||||
|
|
||||||
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
Adding logic to deploy `ZipSeqArchv.bat` and `UnzipSeqArchv.bat` to the project root's `\Renders` directory. Checking the current deployment logic:
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<tool-use data-tool-type="read" data-tool-name="read_file">
|
||||||
|
<details><summary>Tool use: **read_file** • Read file: ConfigLoader.ps1</summary>
|
||||||
|
|
||||||
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
Adding logic to deploy `ZipSeqArchv.bat` and `UnzipSeqArchv.bat` to the project root's `\Renders` directory:
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<tool-use data-tool-type="write" data-tool-name="search_replace">
|
||||||
|
|
||||||
|
<details><summary>Tool use: **code_edit** • Edit file: ConfigLoader.ps1</summary>
|
||||||
|
|
||||||
|
**Chunk 1**
|
||||||
|
Lines added: 24, lines removed: undefined
|
||||||
|
|
||||||
|
```diff
|
||||||
|
@@ -317,4 +317,28 @@
|
||||||
|
|
||||||
|
Write-Host "All batch files refreshed successfully." -ForegroundColor Green
|
||||||
|
+
|
||||||
|
+ # Deploy ZipSeqArchv.bat and UnzipSeqArchv.bat to \Renders
|
||||||
|
+ Write-Host "`n=== Deploying ZipSeqArchv.bat and UnzipSeqArchv.bat to \Renders ===" -ForegroundColor Magenta
|
||||||
|
+ $rendersDir = Join-Path -Path $resolvedProject -ChildPath 'Renders'
|
||||||
|
+ if (-not (Test-Path -LiteralPath $rendersDir -PathType Container)) {
|
||||||
|
+ New-Item -Path $rendersDir -ItemType Directory -Force | Out-Null
|
||||||
|
+ Write-Host "Created Renders directory: $rendersDir" -ForegroundColor Cyan
|
||||||
|
+ }
|
||||||
|
+ $zipFiles = @(
|
||||||
|
+ @{ Name = 'ZipSeqArchv.bat'; Source = Join-Path -Path $structDir -ChildPath 'ZipSeqArchv.bat' },
|
||||||
|
+ @{ Name = 'UnzipSeqArchv.bat'; Source = Join-Path -Path $structDir -ChildPath 'UnzipSeqArchv.bat' }
|
||||||
|
+ )
|
||||||
|
+ foreach ($zipFile in $zipFiles) {
|
||||||
|
+ $targetPath = Join-Path -Path $rendersDir -ChildPath $zipFile.Name
|
||||||
|
+ try {
|
||||||
|
+ Copy-Item -Path $zipFile.Source -Destination $targetPath -Force
|
||||||
|
+ Write-Host "[OK] $targetPath" -ForegroundColor Green
|
||||||
|
+ }
|
||||||
|
+ catch {
|
||||||
|
+ Write-Host "[FAIL] $targetPath" -ForegroundColor Red
|
||||||
|
+ Write-Host " $($_.Exception.Message)" -ForegroundColor DarkRed
|
||||||
|
+ exit 1
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
|
||||||
|
# Deploy .gitattributes and .gitignore to project root if they don't exist
|
||||||
|
```
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
Checking for linting errors:
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<tool-use data-tool-type="generic" data-tool-name="read_lints">
|
||||||
|
<details>
|
||||||
|
<summary>Tool use: **read_lints** • Read lints for 1 file</summary>
|
||||||
|
|
||||||
|
Lint paths:
|
||||||
|
|
||||||
|
- `ConfigLoader.ps1`
|
||||||
|
|
||||||
|
Lint results
|
||||||
|
|
||||||
|
|
||||||
|
**No lint errors found**
|
||||||
|
</details>
|
||||||
|
</tool-use>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
Updated `ConfigLoader.ps1` to deploy `ZipSeqArchv.bat` and `UnzipSeqArchv.bat` to the project root's `\Renders` directory.
|
||||||
|
|
||||||
|
The changes:
|
||||||
|
1. **Creates the `Renders` directory** if it doesn't exist
|
||||||
|
2. **Deploys both batch files** to `\Renders` in the project root
|
||||||
|
3. **Provides status messages** for each deployment
|
||||||
|
|
||||||
|
This follows the same pattern as the git files deployment and runs after the recursive batch file updates and before the git files deployment. The files are copied to `\Renders` even if they already exist elsewhere in the project.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
24
CONFIG.md
Normal file
24
CONFIG.md
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# ProjectStructure Configuration
|
||||||
|
|
||||||
|
The repository reads user preferences from `config.json` in the ProjectStructure
|
||||||
|
root (copied alongside helper batches when they are deployed to projects).
|
||||||
|
|
||||||
|
## Keys
|
||||||
|
|
||||||
|
| Key | Type | Meaning |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| `dailyFormat` | bool | `true` → daily folders named `YYYY-MM-DD`; `false` → `daily_*` style. |
|
||||||
|
| `structDir` | string | Absolute or relative path to the canonical ProjectStructure directory. Blank values default to the folder containing `config.json`. |
|
||||||
|
| `projectsRoot` | string (optional) | Override for the root directory scanned by `UpgradeSeqBatches.ps1`. Defaults to the parent of `structDir`. |
|
||||||
|
| `zipper` | bool | `true` → use 7‑Zip (if available); `false` → use Python’s built-in zipfile module. |
|
||||||
|
| `compression` | int | Compression level `0-9` (0 = store only, 9 = max). Applies to both zipfile and 7‑Zip. |
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- `UpdateProjectBatches.ps1` copies `config.json` and `ConfigLoader.ps1` to the
|
||||||
|
target project so the helper `.bat` launchers can resolve script locations.
|
||||||
|
- When `zipper` is `true`, the tool searches for `7z`/`7za` on `PATH`. If neither
|
||||||
|
is found it logs a warning and falls back to `zipfile`.
|
||||||
|
- Leaving `structDir` empty is safe—the scripts fall back to the directory that
|
||||||
|
contains `config.json`.
|
||||||
|
|
||||||
389
ConfigLoader.ps1
Normal file
389
ConfigLoader.ps1
Normal file
@@ -0,0 +1,389 @@
|
|||||||
|
Set-StrictMode -Version Latest
|
||||||
|
$ErrorActionPreference = 'Stop'
|
||||||
|
|
||||||
|
$script:LoaderRoot = Split-Path -Parent $MyInvocation.MyCommand.Path
|
||||||
|
$script:ConfigPath = Join-Path -Path $script:LoaderRoot -ChildPath 'config.json'
|
||||||
|
$script:ConfigCache = $null
|
||||||
|
|
||||||
|
function Get-ProjectStructureConfig {
|
||||||
|
if ($null -ne $script:ConfigCache) {
|
||||||
|
return $script:ConfigCache
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Test-Path -LiteralPath $script:ConfigPath) {
|
||||||
|
try {
|
||||||
|
$raw = Get-Content -LiteralPath $script:ConfigPath -Raw -ErrorAction Stop
|
||||||
|
if ($raw.Trim().Length -gt 0) {
|
||||||
|
$script:ConfigCache = $raw | ConvertFrom-Json
|
||||||
|
return $script:ConfigCache
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Warning "Failed to parse config.json: $($_.Exception.Message)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$script:ConfigCache = [pscustomobject]@{}
|
||||||
|
return $script:ConfigCache
|
||||||
|
}
|
||||||
|
|
||||||
|
function Get-ConfigValue {
|
||||||
|
param(
|
||||||
|
[Parameter(Mandatory)] [string]$Name,
|
||||||
|
$Default = $null
|
||||||
|
)
|
||||||
|
|
||||||
|
$config = Get-ProjectStructureConfig
|
||||||
|
if ($config.PSObject.Properties.Name -contains $Name) {
|
||||||
|
$value = $config.$Name
|
||||||
|
if ($null -ne $value -and ($value -isnot [string] -or $value.Trim().Length -gt 0)) {
|
||||||
|
return $value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $Default
|
||||||
|
}
|
||||||
|
|
||||||
|
function Get-StructDirectory {
|
||||||
|
$value = Get-ConfigValue -Name 'structDir'
|
||||||
|
if ($null -eq $value -or [string]::IsNullOrWhiteSpace($value)) {
|
||||||
|
return $script:LoaderRoot
|
||||||
|
}
|
||||||
|
|
||||||
|
if ([System.IO.Path]::IsPathRooted($value)) {
|
||||||
|
$resolved = Resolve-Path -LiteralPath $value -ErrorAction SilentlyContinue
|
||||||
|
if ($null -ne $resolved) { return $resolved.Path }
|
||||||
|
return $value
|
||||||
|
}
|
||||||
|
|
||||||
|
$candidate = Join-Path -Path $script:LoaderRoot -ChildPath $value
|
||||||
|
$resolvedCandidate = Resolve-Path -LiteralPath $candidate -ErrorAction SilentlyContinue
|
||||||
|
if ($null -ne $resolvedCandidate) { return $resolvedCandidate.Path }
|
||||||
|
return $candidate
|
||||||
|
}
|
||||||
|
|
||||||
|
function Get-ProjectsRoot {
|
||||||
|
$value = Get-ConfigValue -Name 'projectsRoot'
|
||||||
|
if ($null -eq $value -or [string]::IsNullOrWhiteSpace($value)) {
|
||||||
|
$structDir = Get-StructDirectory
|
||||||
|
$parent = Split-Path -Parent $structDir
|
||||||
|
if ($null -eq $parent -or $parent.Length -eq 0 -or $parent -eq $structDir) {
|
||||||
|
return $structDir
|
||||||
|
}
|
||||||
|
return $parent
|
||||||
|
}
|
||||||
|
|
||||||
|
if ([System.IO.Path]::IsPathRooted($value)) {
|
||||||
|
$resolved = Resolve-Path -LiteralPath $value -ErrorAction SilentlyContinue
|
||||||
|
if ($null -ne $resolved) { return $resolved.Path }
|
||||||
|
return $value
|
||||||
|
}
|
||||||
|
|
||||||
|
$candidate = Join-Path -Path $script:LoaderRoot -ChildPath $value
|
||||||
|
$resolvedCandidate = Resolve-Path -LiteralPath $candidate -ErrorAction SilentlyContinue
|
||||||
|
if ($null -ne $resolvedCandidate) { return $resolvedCandidate.Path }
|
||||||
|
return $candidate
|
||||||
|
}
|
||||||
|
|
||||||
|
function Get-ProjectPathFromUser {
|
||||||
|
param(
|
||||||
|
[string]$Prompt = "Paste the project path to deploy in"
|
||||||
|
)
|
||||||
|
|
||||||
|
do {
|
||||||
|
$inputPath = Read-Host -Prompt $Prompt
|
||||||
|
if ([string]::IsNullOrWhiteSpace($inputPath)) {
|
||||||
|
Write-Warning "Path cannot be empty. Please try again."
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
# Remove quotes if present
|
||||||
|
$inputPath = $inputPath.Trim('"', "'")
|
||||||
|
|
||||||
|
# Try to resolve the path
|
||||||
|
try {
|
||||||
|
if (Test-Path -LiteralPath $inputPath -PathType Container) {
|
||||||
|
$resolved = Resolve-Path -LiteralPath $inputPath -ErrorAction Stop
|
||||||
|
return $resolved.Path
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-Warning "Path does not exist or is not a directory: $inputPath"
|
||||||
|
$retry = Read-Host "Try again? (Y/N)"
|
||||||
|
if ($retry -notmatch '^[Yy]') {
|
||||||
|
return $null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Warning "Invalid path: $($_.Exception.Message)"
|
||||||
|
$retry = Read-Host "Try again? (Y/N)"
|
||||||
|
if ($retry -notmatch '^[Yy]') {
|
||||||
|
return $null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while ($true)
|
||||||
|
}
|
||||||
|
|
||||||
|
function Use-IsoDailyFormat {
|
||||||
|
$dailyFormat = Get-ConfigValue -Name 'dailyFormat' -Default $true
|
||||||
|
|
||||||
|
# Handle backward compatibility with boolean values
|
||||||
|
if ($dailyFormat -is [bool]) {
|
||||||
|
return $dailyFormat
|
||||||
|
}
|
||||||
|
|
||||||
|
# Handle string values
|
||||||
|
if ($dailyFormat -is [string]) {
|
||||||
|
$formatStr = $dailyFormat.Trim()
|
||||||
|
# ISO format contains YYYY-MM-DD pattern
|
||||||
|
if ($formatStr -match 'YYYY-MM-DD' -or $formatStr -match '\d{4}-\d{2}-\d{2}') {
|
||||||
|
return $true
|
||||||
|
}
|
||||||
|
# daily_YYMMDD or other formats are not ISO
|
||||||
|
return $false
|
||||||
|
}
|
||||||
|
|
||||||
|
# Default to false (not ISO format) for unknown types
|
||||||
|
return $false
|
||||||
|
}
|
||||||
|
|
||||||
|
function Use-7Zip {
|
||||||
|
$zipper = Get-ConfigValue -Name 'zipper' -Default $true
|
||||||
|
|
||||||
|
# Handle backward compatibility with boolean values
|
||||||
|
if ($zipper -is [bool]) {
|
||||||
|
return $zipper
|
||||||
|
}
|
||||||
|
|
||||||
|
# Handle string values
|
||||||
|
if ($zipper -is [string]) {
|
||||||
|
$zipperStr = $zipper.Trim().ToLower()
|
||||||
|
return ($zipperStr -eq '7z')
|
||||||
|
}
|
||||||
|
|
||||||
|
# Default to false (use zip) for unknown types
|
||||||
|
return $false
|
||||||
|
}
|
||||||
|
|
||||||
|
function Get-ZipCompressionLevel {
|
||||||
|
$value = Get-ConfigValue -Name 'compression' -Default 9
|
||||||
|
if ($value -is [string]) {
|
||||||
|
$parsed = 0
|
||||||
|
if ([int]::TryParse($value, [ref]$parsed)) {
|
||||||
|
$value = $parsed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($value -isnot [int]) {
|
||||||
|
return 9
|
||||||
|
}
|
||||||
|
|
||||||
|
return [Math]::Min(9, [Math]::Max(0, $value))
|
||||||
|
}
|
||||||
|
|
||||||
|
# If script is run directly (not dot-sourced), prompt for project path and deploy
|
||||||
|
# When dot-sourced, InvocationName is '.'; when run directly, it's the script path or name
|
||||||
|
if ($MyInvocation.InvocationName -ne '.') {
|
||||||
|
$projectPath = Get-ProjectPathFromUser
|
||||||
|
if ($null -ne $projectPath) {
|
||||||
|
# Deploy batch files and config to the project
|
||||||
|
$structDir = Get-StructDirectory
|
||||||
|
if (-not (Test-Path -LiteralPath $structDir -PathType Container)) {
|
||||||
|
Write-Error "Configured structDir not found: $structDir"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$resolvedProject = (Resolve-Path -LiteralPath $projectPath -ErrorAction Stop).Path
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Error "Unable to resolve project directory: $($_.Exception.Message)"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if (-not (Test-Path -LiteralPath $resolvedProject -PathType Container)) {
|
||||||
|
Write-Error "Project path is not a directory: $resolvedProject"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "`nDeploying to: $resolvedProject" -ForegroundColor Cyan
|
||||||
|
Write-Host "Struct directory: $structDir" -ForegroundColor Cyan
|
||||||
|
|
||||||
|
$specs = @(
|
||||||
|
@{ Name = 'UpdateSequences.bat'; Source = Join-Path -Path $structDir -ChildPath 'UpdateSequences.bat' },
|
||||||
|
@{ Name = 'UpdateAllSequences.bat'; Source = Join-Path -Path $structDir -ChildPath 'UpdateAllSequences.bat' },
|
||||||
|
@{ Name = 'ZipSeqArchv.bat'; Source = Join-Path -Path $structDir -ChildPath 'ZipSeqArchv.bat' },
|
||||||
|
@{ Name = 'UnzipSeqArchv.bat'; Source = Join-Path -Path $structDir -ChildPath 'UnzipSeqArchv.bat' },
|
||||||
|
@{ Name = 'NewDaily.bat'; Source = Join-Path -Path $structDir -ChildPath 'NewDaily.bat' },
|
||||||
|
@{ Name = '.gitattributes'; Source = Join-Path -Path $structDir -ChildPath 'components\gitattributes' },
|
||||||
|
@{ Name = '.gitignore'; Source = Join-Path -Path $structDir -ChildPath 'components\gitignore' }
|
||||||
|
)
|
||||||
|
|
||||||
|
# Config files to deploy to projectroot\.config\
|
||||||
|
$configAssets = @(
|
||||||
|
@{ Name = 'config.json'; Source = Join-Path -Path $structDir -ChildPath 'config.json' },
|
||||||
|
@{ Name = 'GetStructDir.ps1'; Source = Join-Path -Path $structDir -ChildPath 'GetStructDir.ps1' }
|
||||||
|
)
|
||||||
|
|
||||||
|
foreach ($spec in $specs) {
|
||||||
|
if (-not (Test-Path -LiteralPath $spec.Source -PathType Leaf)) {
|
||||||
|
Write-Error "Source file not found: $($spec.Source)"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($asset in $configAssets) {
|
||||||
|
if (-not (Test-Path -LiteralPath $asset.Source -PathType Leaf)) {
|
||||||
|
Write-Error "Config asset not found: $($asset.Source)"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Ensure .config directory exists in project root and is hidden
|
||||||
|
$projectConfigDir = Join-Path -Path $resolvedProject -ChildPath '.config'
|
||||||
|
if (-not (Test-Path -LiteralPath $projectConfigDir -PathType Container)) {
|
||||||
|
New-Item -Path $projectConfigDir -ItemType Directory -Force | Out-Null
|
||||||
|
Write-Host "Created .config directory: $projectConfigDir" -ForegroundColor Cyan
|
||||||
|
}
|
||||||
|
# Set hidden attribute on .config directory
|
||||||
|
$folder = Get-Item -LiteralPath $projectConfigDir -Force
|
||||||
|
$folder.Attributes = $folder.Attributes -bor [System.IO.FileAttributes]::Hidden
|
||||||
|
|
||||||
|
$touchedDirs = @{}
|
||||||
|
$summary = @()
|
||||||
|
|
||||||
|
foreach ($spec in $specs) {
|
||||||
|
Write-Host "`n=== Updating $($spec.Name) ===" -ForegroundColor Magenta
|
||||||
|
|
||||||
|
$targets = Get-ChildItem -LiteralPath $resolvedProject -Recurse -Filter $spec.Name -File -Force -ErrorAction SilentlyContinue
|
||||||
|
$targets = $targets | Where-Object { $_.FullName -ne $spec.Source }
|
||||||
|
|
||||||
|
if (-not $targets) {
|
||||||
|
Write-Host "No targets found." -ForegroundColor Yellow
|
||||||
|
$summary += [pscustomobject]@{
|
||||||
|
Name = $spec.Name
|
||||||
|
Updated = 0
|
||||||
|
Failed = 0
|
||||||
|
Skipped = 0
|
||||||
|
Total = 0
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
$updated = 0
|
||||||
|
$failed = 0
|
||||||
|
|
||||||
|
foreach ($target in $targets) {
|
||||||
|
try {
|
||||||
|
Copy-Item -Path $spec.Source -Destination $target.FullName -Force
|
||||||
|
# Set hidden attribute for .gitattributes and .gitignore files
|
||||||
|
if ($spec.Name -eq '.gitattributes' -or $spec.Name -eq '.gitignore') {
|
||||||
|
$file = Get-Item -LiteralPath $target.FullName -Force
|
||||||
|
$file.Attributes = $file.Attributes -bor [System.IO.FileAttributes]::Hidden
|
||||||
|
}
|
||||||
|
Write-Host "[OK] $($target.FullName)" -ForegroundColor Green
|
||||||
|
$updated++
|
||||||
|
|
||||||
|
$targetDir = $target.Directory.FullName
|
||||||
|
if (-not $touchedDirs.ContainsKey($targetDir)) {
|
||||||
|
$touchedDirs[$targetDir] = $true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Host "[FAIL] $($target.FullName)" -ForegroundColor Red
|
||||||
|
Write-Host " $($_.Exception.Message)" -ForegroundColor DarkRed
|
||||||
|
$failed++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$summary += [pscustomobject]@{
|
||||||
|
Name = $spec.Name
|
||||||
|
Updated = $updated
|
||||||
|
Failed = $failed
|
||||||
|
Skipped = 0
|
||||||
|
Total = @($targets).Count
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "`n=== Summary ===" -ForegroundColor Cyan
|
||||||
|
foreach ($item in $summary) {
|
||||||
|
Write-Host ("{0,-22} Updated: {1,3} Failed: {2,3} Total: {3,3}" -f $item.Name, $item.Updated, $item.Failed, $item.Total)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (($summary | Measure-Object -Property Failed -Sum).Sum -gt 0) {
|
||||||
|
Write-Host "Completed with errors." -ForegroundColor Yellow
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "All batch files refreshed successfully." -ForegroundColor Green
|
||||||
|
|
||||||
|
# Deploy ZipSeqArchv.bat and UnzipSeqArchv.bat to \Renders
|
||||||
|
Write-Host "`n=== Deploying ZipSeqArchv.bat and UnzipSeqArchv.bat to \Renders ===" -ForegroundColor Magenta
|
||||||
|
$rendersDir = Join-Path -Path $resolvedProject -ChildPath 'Renders'
|
||||||
|
if (-not (Test-Path -LiteralPath $rendersDir -PathType Container)) {
|
||||||
|
New-Item -Path $rendersDir -ItemType Directory -Force | Out-Null
|
||||||
|
Write-Host "Created Renders directory: $rendersDir" -ForegroundColor Cyan
|
||||||
|
}
|
||||||
|
$zipFiles = @(
|
||||||
|
@{ Name = 'ZipSeqArchv.bat'; Source = Join-Path -Path $structDir -ChildPath 'ZipSeqArchv.bat' },
|
||||||
|
@{ Name = 'UnzipSeqArchv.bat'; Source = Join-Path -Path $structDir -ChildPath 'UnzipSeqArchv.bat' }
|
||||||
|
)
|
||||||
|
foreach ($zipFile in $zipFiles) {
|
||||||
|
$targetPath = Join-Path -Path $rendersDir -ChildPath $zipFile.Name
|
||||||
|
try {
|
||||||
|
Copy-Item -Path $zipFile.Source -Destination $targetPath -Force
|
||||||
|
Write-Host "[OK] $targetPath" -ForegroundColor Green
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Host "[FAIL] $targetPath" -ForegroundColor Red
|
||||||
|
Write-Host " $($_.Exception.Message)" -ForegroundColor DarkRed
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Deploy .gitattributes and .gitignore to project root if they don't exist
|
||||||
|
Write-Host "`n=== Deploying .gitattributes and .gitignore to project root ===" -ForegroundColor Magenta
|
||||||
|
$gitFiles = @(
|
||||||
|
@{ Name = '.gitattributes'; Source = Join-Path -Path $structDir -ChildPath 'components\gitattributes' },
|
||||||
|
@{ Name = '.gitignore'; Source = Join-Path -Path $structDir -ChildPath 'components\gitignore' }
|
||||||
|
)
|
||||||
|
foreach ($gitFile in $gitFiles) {
|
||||||
|
$targetPath = Join-Path -Path $resolvedProject -ChildPath $gitFile.Name
|
||||||
|
try {
|
||||||
|
Copy-Item -Path $gitFile.Source -Destination $targetPath -Force
|
||||||
|
# Set hidden attribute on the file
|
||||||
|
$file = Get-Item -LiteralPath $targetPath -Force
|
||||||
|
$file.Attributes = $file.Attributes -bor [System.IO.FileAttributes]::Hidden
|
||||||
|
Write-Host "[OK] $targetPath" -ForegroundColor Green
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Host "[FAIL] $targetPath" -ForegroundColor Red
|
||||||
|
Write-Host " $($_.Exception.Message)" -ForegroundColor DarkRed
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Deploy config files to projectroot\.config\
|
||||||
|
Write-Host "`n=== Deploying config files to .config\ ===" -ForegroundColor Magenta
|
||||||
|
foreach ($asset in $configAssets) {
|
||||||
|
$targetPath = Join-Path -Path $projectConfigDir -ChildPath $asset.Name
|
||||||
|
try {
|
||||||
|
Copy-Item -Path $asset.Source -Destination $targetPath -Force
|
||||||
|
Write-Host "[OK] $targetPath" -ForegroundColor Green
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Host "[FAIL] $targetPath" -ForegroundColor Red
|
||||||
|
Write-Host " $($_.Exception.Message)" -ForegroundColor DarkRed
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "`nConfig files deployed successfully." -ForegroundColor Green
|
||||||
|
Write-Host "Deployment completed successfully." -ForegroundColor Green
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-Host "No project path provided." -ForegroundColor Yellow
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
}
|
||||||
68
GetStructDir.ps1
Normal file
68
GetStructDir.ps1
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
# Simple helper script to get structDir from project config.json
|
||||||
|
# Reads config.json from .config folder in project root
|
||||||
|
|
||||||
|
param(
|
||||||
|
[string]$ProjectRoot
|
||||||
|
)
|
||||||
|
|
||||||
|
Set-StrictMode -Version Latest
|
||||||
|
$ErrorActionPreference = 'Stop'
|
||||||
|
|
||||||
|
if ([string]::IsNullOrWhiteSpace($ProjectRoot)) {
|
||||||
|
# Try to determine project root from script location
|
||||||
|
if ($PSScriptRoot) {
|
||||||
|
$ProjectRoot = Split-Path -Parent $PSScriptRoot
|
||||||
|
}
|
||||||
|
elseif ($MyInvocation.MyCommand.Path) {
|
||||||
|
$ProjectRoot = Split-Path -Parent (Split-Path -Parent $MyInvocation.MyCommand.Path)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-Error "Unable to determine project root. Please provide -ProjectRoot parameter."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$configPath = Join-Path -Path $ProjectRoot -ChildPath '.config\config.json'
|
||||||
|
|
||||||
|
if (-not (Test-Path -LiteralPath $configPath -PathType Leaf)) {
|
||||||
|
Write-Error "config.json not found at: $configPath"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$config = Get-Content -LiteralPath $configPath -Raw -ErrorAction Stop | ConvertFrom-Json
|
||||||
|
|
||||||
|
if ($config.PSObject.Properties.Name -contains 'structDir') {
|
||||||
|
$structDir = $config.structDir
|
||||||
|
if ($null -ne $structDir -and ($structDir -isnot [string] -or $structDir.Trim().Length -gt 0)) {
|
||||||
|
# If it's an absolute path, resolve it
|
||||||
|
if ([System.IO.Path]::IsPathRooted($structDir)) {
|
||||||
|
$resolved = Resolve-Path -LiteralPath $structDir -ErrorAction SilentlyContinue
|
||||||
|
if ($null -ne $resolved) {
|
||||||
|
Write-Output $resolved.Path
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
Write-Output $structDir
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
# Relative path - resolve relative to config location
|
||||||
|
$candidate = Join-Path -Path (Split-Path -Parent $configPath) -ChildPath $structDir
|
||||||
|
$resolvedCandidate = Resolve-Path -LiteralPath $candidate -ErrorAction SilentlyContinue
|
||||||
|
if ($null -ne $resolvedCandidate) {
|
||||||
|
Write-Output $resolvedCandidate.Path
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
Write-Output $candidate
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Default: return the directory containing config.json (project root)
|
||||||
|
Write-Output $ProjectRoot
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Error "Failed to read or parse config.json: $($_.Exception.Message)"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
@@ -1,5 +1,27 @@
|
|||||||
@echo off
|
@echo off
|
||||||
setlocal
|
setlocal EnableExtensions
|
||||||
|
|
||||||
|
set "SCRIPT_DIR=%~dp0"
|
||||||
|
set "CONFIG_LOADER=%SCRIPT_DIR%ConfigLoader.ps1"
|
||||||
|
set "CONFIG_PATH=%SCRIPT_DIR%config.json"
|
||||||
|
|
||||||
|
if not exist "%CONFIG_LOADER%" (
|
||||||
|
echo [ERROR] ConfigLoader.ps1 not found next to NewProject.bat.
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
if not exist "%CONFIG_PATH%" (
|
||||||
|
echo [ERROR] config.json not found next to NewProject.bat.
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
for /f "usebackq delims=" %%I in (`powershell -NoProfile -ExecutionPolicy Bypass -Command ^
|
||||||
|
"Set-StrictMode -Version Latest; $loader = Resolve-Path -LiteralPath '%CONFIG_LOADER%' -ErrorAction Stop; . $loader.Path; Write-Output (Get-StructDirectory)"`) do set "STRUCT_DIR=%%I"
|
||||||
|
|
||||||
|
if not defined STRUCT_DIR (
|
||||||
|
echo [ERROR] Unable to resolve ProjectStructure directory from config.
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
:: Get current date in YYYY-MM-DD format
|
:: Get current date in YYYY-MM-DD format
|
||||||
for /f "tokens=2-4 delims=/ " %%a in ('date /t') do (
|
for /f "tokens=2-4 delims=/ " %%a in ('date /t') do (
|
||||||
@@ -20,7 +42,7 @@ mkdir "%projectRoot%"
|
|||||||
|
|
||||||
:: Create Assets structure
|
:: Create Assets structure
|
||||||
mkdir "%projectRoot%\Assets\ElevenLabs"
|
mkdir "%projectRoot%\Assets\ElevenLabs"
|
||||||
if exist "A:\1 Amazon_Active_Projects\3 ProjectStructure\NewDaily.bat" copy /Y "A:\1 Amazon_Active_Projects\3 ProjectStructure\NewDaily.bat" "%projectRoot%\Assets\ElevenLabs\NewDaily.bat" >nul
|
if exist "%STRUCT_DIR%\NewDaily.bat" copy /Y "%STRUCT_DIR%\NewDaily.bat" "%projectRoot%\Assets\ElevenLabs\NewDaily.bat" >nul
|
||||||
mkdir "%projectRoot%\Assets\Blends"
|
mkdir "%projectRoot%\Assets\Blends"
|
||||||
mkdir "%projectRoot%\Assets\Mocap"
|
mkdir "%projectRoot%\Assets\Mocap"
|
||||||
mkdir "%projectRoot%\Assets\VO"
|
mkdir "%projectRoot%\Assets\VO"
|
||||||
@@ -40,11 +62,10 @@ mkdir "%projectRoot%\Pr\RnR\RIFE"
|
|||||||
if not exist "%projectRoot%\Renders" mkdir "%projectRoot%\Renders"
|
if not exist "%projectRoot%\Renders" mkdir "%projectRoot%\Renders"
|
||||||
|
|
||||||
:: Place helper scripts into Renders
|
:: Place helper scripts into Renders
|
||||||
set "templateRoot=%~dp0"
|
set "templateRoot=%STRUCT_DIR%"
|
||||||
if not exist "%templateRoot%ZipSeqArchv.bat" set "templateRoot=A:\1 Amazon_Active_Projects\3 ProjectStructure\"
|
for %%F in (UpdateSequences.bat ZipSeqArchv.bat UnzipSeqArchv.bat ConfigLoader.ps1 config.json) do (
|
||||||
if exist "%templateRoot%UpdateSequences.bat" copy /Y "%templateRoot%UpdateSequences.bat" "%projectRoot%\Renders\UpdateSequences.bat" >nul
|
if exist "%templateRoot%\%%F" copy /Y "%templateRoot%\%%F" "%projectRoot%\Renders\%%F" >nul
|
||||||
if exist "%templateRoot%ZipSeqArchv.bat" copy /Y "%templateRoot%ZipSeqArchv.bat" "%projectRoot%\Renders\ZipSeqArchv.bat" >nul
|
)
|
||||||
if exist "%templateRoot%UnzipSeqArchv.bat" copy /Y "%templateRoot%UnzipSeqArchv.bat" "%projectRoot%\Renders\UnzipSeqArchv.bat" >nul
|
|
||||||
|
|
||||||
:: Use repo-provided templates for git config files
|
:: Use repo-provided templates for git config files
|
||||||
if exist "%~dp0components\gitignore" copy /Y "%~dp0components\gitignore" "%projectRoot%\.gitignore" >nul
|
if exist "%~dp0components\gitignore" copy /Y "%~dp0components\gitignore" "%projectRoot%\.gitignore" >nul
|
||||||
|
|||||||
@@ -1,24 +1,42 @@
|
|||||||
@echo off
|
@echo off
|
||||||
setlocal
|
setlocal EnableExtensions EnableDelayedExpansion
|
||||||
|
|
||||||
set "REN_DIR=%~dp0"
|
set "REN_DIR=%~dp0"
|
||||||
for %%I in ("%REN_DIR%..") do set "PROJ_ROOT=%%~fI"
|
for %%I in ("%REN_DIR%..") do set "PROJ_ROOT=%%~fI"
|
||||||
set "PY_SCRIPT=A:\1 Amazon_Active_Projects\3 ProjectStructure\zip_sequences.py"
|
|
||||||
|
|
||||||
if not exist "%PY_SCRIPT%" (
|
set "CONFIG_DIR=%PROJ_ROOT%\.config"
|
||||||
echo Missing %PY_SCRIPT%
|
set "CONFIG_PATH=%CONFIG_DIR%\config.json"
|
||||||
|
set "GET_STRUCT_DIR=%CONFIG_DIR%\GetStructDir.ps1"
|
||||||
|
|
||||||
|
if not exist "%CONFIG_PATH%" (
|
||||||
|
echo [ERROR] config.json not found at %CONFIG_PATH%
|
||||||
|
echo Please run ConfigLoader.ps1 to deploy helper files.
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
if not exist "%GET_STRUCT_DIR%" (
|
||||||
|
echo [ERROR] GetStructDir.ps1 not found at %GET_STRUCT_DIR%
|
||||||
|
echo Please run ConfigLoader.ps1 to deploy helper files.
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
for /f "usebackq delims=" %%I in (`powershell -NoProfile -ExecutionPolicy Bypass -Command ^
|
||||||
|
"Set-StrictMode -Version Latest; $structDir = & '%GET_STRUCT_DIR%' -ProjectRoot '%PROJ_ROOT%'; if (-not $structDir) { throw \"Failed to get structDir from GetStructDir.ps1\" }; $pyPath = Join-Path $structDir 'zip_sequences.py'; if (-not (Test-Path -LiteralPath $pyPath)) { throw \"zip_sequences.py not found at $pyPath\" }; Write-Output $pyPath"`) do set "PY_SCRIPT=%%I"
|
||||||
|
|
||||||
|
if not defined PY_SCRIPT (
|
||||||
|
echo [ERROR] Unable to resolve zip_sequences.py path from config.
|
||||||
exit /b 1
|
exit /b 1
|
||||||
)
|
)
|
||||||
|
|
||||||
pushd "%PROJ_ROOT%" >nul 2>&1
|
pushd "%PROJ_ROOT%" >nul 2>&1
|
||||||
|
|
||||||
python "%PY_SCRIPT%" --mode expand --verbose %*
|
python "%PY_SCRIPT%" --mode expand --verbose %*
|
||||||
set "ERR=%ERRORLEVEL%"
|
set "ERR=!ERRORLEVEL!"
|
||||||
|
|
||||||
if not "%ERR%"=="0" (
|
if not "!ERR!"=="0" (
|
||||||
echo Failed to expand render sequence archives (exit code %ERR%).
|
echo Failed to expand render sequence archives (exit code !ERR!).
|
||||||
)
|
)
|
||||||
|
|
||||||
popd >nul 2>&1
|
popd >nul 2>&1
|
||||||
exit /b %ERR%
|
exit /b !ERR!
|
||||||
|
|
||||||
|
|||||||
164
UpdateProjectBatches.ps1
Normal file
164
UpdateProjectBatches.ps1
Normal file
@@ -0,0 +1,164 @@
|
|||||||
|
# Refresh helper batch scripts within a specific project directory.
|
||||||
|
|
||||||
|
param(
|
||||||
|
[string]$ProjectPath
|
||||||
|
)
|
||||||
|
|
||||||
|
Set-StrictMode -Version Latest
|
||||||
|
$ErrorActionPreference = 'Stop'
|
||||||
|
|
||||||
|
if (-not $PSScriptRoot) {
|
||||||
|
$PSScriptRoot = Split-Path -Parent $MyInvocation.MyCommand.Path
|
||||||
|
}
|
||||||
|
|
||||||
|
$configLoader = Join-Path -Path $PSScriptRoot -ChildPath 'ConfigLoader.ps1'
|
||||||
|
if (-not (Test-Path -LiteralPath $configLoader)) {
|
||||||
|
throw "Missing ConfigLoader.ps1 in $PSScriptRoot"
|
||||||
|
}
|
||||||
|
. $configLoader
|
||||||
|
|
||||||
|
$structDir = Get-StructDirectory
|
||||||
|
if (-not (Test-Path -LiteralPath $structDir -PathType Container)) {
|
||||||
|
throw "Configured structDir not found: $structDir"
|
||||||
|
}
|
||||||
|
|
||||||
|
if ([string]::IsNullOrWhiteSpace($ProjectPath)) {
|
||||||
|
$ProjectPath = Read-Host 'Enter the full path to the project directory'
|
||||||
|
}
|
||||||
|
|
||||||
|
if ([string]::IsNullOrWhiteSpace($ProjectPath)) {
|
||||||
|
Write-Error 'No project directory provided.'
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$resolvedProject = (Resolve-Path -LiteralPath $ProjectPath -ErrorAction Stop).Path
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Error "Unable to resolve project directory: $($_.Exception.Message)"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if (-not (Test-Path -LiteralPath $resolvedProject -PathType Container)) {
|
||||||
|
Write-Error "Project path is not a directory: $resolvedProject"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "Project directory: $resolvedProject" -ForegroundColor Cyan
|
||||||
|
Write-Host "Struct directory: $structDir" -ForegroundColor Cyan
|
||||||
|
|
||||||
|
$specs = @(
|
||||||
|
@{ Name = 'UpdateSequences.bat'; Source = Join-Path -Path $structDir -ChildPath 'UpdateSequences.bat' },
|
||||||
|
@{ Name = 'UpdateAllSequences.bat'; Source = Join-Path -Path $structDir -ChildPath 'UpdateAllSequences.bat' },
|
||||||
|
@{ Name = 'ZipSeqArchv.bat'; Source = Join-Path -Path $structDir -ChildPath 'ZipSeqArchv.bat' },
|
||||||
|
@{ Name = 'UnzipSeqArchv.bat'; Source = Join-Path -Path $structDir -ChildPath 'UnzipSeqArchv.bat' },
|
||||||
|
@{ Name = 'NewDaily.bat'; Source = Join-Path -Path $structDir -ChildPath 'NewDaily.bat' }
|
||||||
|
)
|
||||||
|
|
||||||
|
# Config files to deploy to projectroot\.config\
|
||||||
|
$configAssets = @(
|
||||||
|
@{ Name = 'config.json'; Source = Join-Path -Path $structDir -ChildPath 'config.json' },
|
||||||
|
@{ Name = 'GetStructDir.ps1'; Source = Join-Path -Path $structDir -ChildPath 'GetStructDir.ps1' }
|
||||||
|
)
|
||||||
|
|
||||||
|
foreach ($spec in $specs) {
|
||||||
|
if (-not (Test-Path -LiteralPath $spec.Source -PathType Leaf)) {
|
||||||
|
Write-Error "Source file not found: $($spec.Source)"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($asset in $configAssets) {
|
||||||
|
if (-not (Test-Path -LiteralPath $asset.Source -PathType Leaf)) {
|
||||||
|
Write-Error "Config asset not found: $($asset.Source)"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Ensure .config directory exists in project root
|
||||||
|
$projectConfigDir = Join-Path -Path $resolvedProject -ChildPath '.config'
|
||||||
|
if (-not (Test-Path -LiteralPath $projectConfigDir -PathType Container)) {
|
||||||
|
New-Item -Path $projectConfigDir -ItemType Directory -Force | Out-Null
|
||||||
|
Write-Host "Created .config directory: $projectConfigDir" -ForegroundColor Cyan
|
||||||
|
}
|
||||||
|
|
||||||
|
$touchedDirs = @{}
|
||||||
|
$summary = @()
|
||||||
|
|
||||||
|
foreach ($spec in $specs) {
|
||||||
|
Write-Host "`n=== Updating $($spec.Name) ===" -ForegroundColor Magenta
|
||||||
|
|
||||||
|
$targets = Get-ChildItem -LiteralPath $resolvedProject -Recurse -Filter $spec.Name -File -ErrorAction SilentlyContinue
|
||||||
|
$targets = $targets | Where-Object { $_.FullName -ne $spec.Source }
|
||||||
|
|
||||||
|
if (-not $targets) {
|
||||||
|
Write-Host "No targets found." -ForegroundColor Yellow
|
||||||
|
$summary += [pscustomobject]@{
|
||||||
|
Name = $spec.Name
|
||||||
|
Updated = 0
|
||||||
|
Failed = 0
|
||||||
|
Skipped = 0
|
||||||
|
Total = 0
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
$updated = 0
|
||||||
|
$failed = 0
|
||||||
|
|
||||||
|
foreach ($target in $targets) {
|
||||||
|
try {
|
||||||
|
Copy-Item -Path $spec.Source -Destination $target.FullName -Force
|
||||||
|
Write-Host "[OK] $($target.FullName)" -ForegroundColor Green
|
||||||
|
$updated++
|
||||||
|
|
||||||
|
$targetDir = $target.Directory.FullName
|
||||||
|
if (-not $touchedDirs.ContainsKey($targetDir)) {
|
||||||
|
$touchedDirs[$targetDir] = $true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Host "[FAIL] $($target.FullName)" -ForegroundColor Red
|
||||||
|
Write-Host " $($_.Exception.Message)" -ForegroundColor DarkRed
|
||||||
|
$failed++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$summary += [pscustomobject]@{
|
||||||
|
Name = $spec.Name
|
||||||
|
Updated = $updated
|
||||||
|
Failed = $failed
|
||||||
|
Skipped = 0
|
||||||
|
Total = @($targets).Count
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "`n=== Summary ===" -ForegroundColor Cyan
|
||||||
|
foreach ($item in $summary) {
|
||||||
|
Write-Host ("{0,-22} Updated: {1,3} Failed: {2,3} Total: {3,3}" -f $item.Name, $item.Updated, $item.Failed, $item.Total)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (($summary | Measure-Object -Property Failed -Sum).Sum -gt 0) {
|
||||||
|
Write-Host "Completed with errors." -ForegroundColor Yellow
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "All batch files refreshed successfully." -ForegroundColor Green
|
||||||
|
|
||||||
|
# Deploy config files to projectroot\.config\
|
||||||
|
Write-Host "`n=== Deploying config files to .config\ ===" -ForegroundColor Magenta
|
||||||
|
foreach ($asset in $configAssets) {
|
||||||
|
$targetPath = Join-Path -Path $projectConfigDir -ChildPath $asset.Name
|
||||||
|
try {
|
||||||
|
Copy-Item -Path $asset.Source -Destination $targetPath -Force
|
||||||
|
Write-Host "[OK] $targetPath" -ForegroundColor Green
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Host "[FAIL] $targetPath" -ForegroundColor Red
|
||||||
|
Write-Host " $($_.Exception.Message)" -ForegroundColor DarkRed
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "Config files deployed successfully." -ForegroundColor Green
|
||||||
|
|
||||||
@@ -1,7 +1,33 @@
|
|||||||
@echo off
|
@echo off
|
||||||
setlocal EnableExtensions
|
setlocal EnableExtensions
|
||||||
|
|
||||||
set "ps1=A:\1 Amazon_Active_Projects\3 ProjectStructure\UpdateSequences.ps1"
|
set "script_dir=%~dp0"
|
||||||
|
for %%I in ("%script_dir%..\..") do set "PROJ_ROOT=%%~fI"
|
||||||
|
|
||||||
|
set "CONFIG_DIR=%PROJ_ROOT%\.config"
|
||||||
|
set "CONFIG_PATH=%CONFIG_DIR%\config.json"
|
||||||
|
set "GET_STRUCT_DIR=%CONFIG_DIR%\GetStructDir.ps1"
|
||||||
|
|
||||||
|
if not exist "%CONFIG_PATH%" (
|
||||||
|
echo [ERROR] config.json not found at %CONFIG_PATH%
|
||||||
|
echo Please run ConfigLoader.ps1 to deploy helper files.
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
if not exist "%GET_STRUCT_DIR%" (
|
||||||
|
echo [ERROR] GetStructDir.ps1 not found at %GET_STRUCT_DIR%
|
||||||
|
echo Please run ConfigLoader.ps1 to deploy helper files.
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
for /f "usebackq delims=" %%I in (`powershell -NoProfile -ExecutionPolicy Bypass -Command ^
|
||||||
|
"Set-StrictMode -Version Latest; $structDir = & '%GET_STRUCT_DIR%' -ProjectRoot '%PROJ_ROOT%'; if (-not $structDir) { throw \"Failed to get structDir from GetStructDir.ps1\" }; $ps1Path = Join-Path $structDir 'UpdateSequences.ps1'; if (-not (Test-Path -LiteralPath $ps1Path)) { throw \"UpdateSequences.ps1 not found at $ps1Path\" }; Write-Output $ps1Path"`) do set "ps1=%%I"
|
||||||
|
|
||||||
|
if not defined ps1 (
|
||||||
|
echo [ERROR] Unable to resolve UpdateSequences.ps1 path from config.
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
echo Running PowerShell update script...
|
echo Running PowerShell update script...
|
||||||
powershell -NoProfile -ExecutionPolicy Bypass -File "%ps1%"
|
powershell -NoProfile -ExecutionPolicy Bypass -File "%ps1%"
|
||||||
set "rc=%errorlevel%"
|
set "rc=%errorlevel%"
|
||||||
|
|||||||
@@ -6,6 +6,18 @@ param(
|
|||||||
Set-StrictMode -Version Latest
|
Set-StrictMode -Version Latest
|
||||||
$ErrorActionPreference = 'Stop'
|
$ErrorActionPreference = 'Stop'
|
||||||
|
|
||||||
|
if (-not $PSScriptRoot) {
|
||||||
|
$PSScriptRoot = Split-Path -Parent $MyInvocation.MyCommand.Path
|
||||||
|
}
|
||||||
|
|
||||||
|
$configLoader = Join-Path -Path $PSScriptRoot -ChildPath 'ConfigLoader.ps1'
|
||||||
|
if (-not (Test-Path -LiteralPath $configLoader)) {
|
||||||
|
throw "Missing ConfigLoader.ps1 in $PSScriptRoot"
|
||||||
|
}
|
||||||
|
. $configLoader
|
||||||
|
|
||||||
|
$useIsoDailyFormat = Use-IsoDailyFormat
|
||||||
|
|
||||||
function Sync-SequenceFilenames {
|
function Sync-SequenceFilenames {
|
||||||
param(
|
param(
|
||||||
[Parameter(Mandatory)] [string]$SequenceFolderPath,
|
[Parameter(Mandatory)] [string]$SequenceFolderPath,
|
||||||
@@ -191,9 +203,25 @@ try {
|
|||||||
|
|
||||||
$sequenceMap = @{}
|
$sequenceMap = @{}
|
||||||
|
|
||||||
$dailyDirs = Get-ChildItem -LiteralPath $root -Directory -Filter 'daily_*' -ErrorAction SilentlyContinue |
|
$primaryPattern = if ($useIsoDailyFormat) { '????-??-??' } else { 'daily_*' }
|
||||||
|
$secondaryPattern = if ($useIsoDailyFormat) { 'daily_*' } else { '????-??-??' }
|
||||||
|
|
||||||
|
$primaryDirs = Get-ChildItem -LiteralPath $root -Directory -Filter $primaryPattern -ErrorAction SilentlyContinue |
|
||||||
Where-Object { $_.Name -ne '_archive' }
|
Where-Object { $_.Name -ne '_archive' }
|
||||||
foreach ($d in $dailyDirs) {
|
foreach ($d in $primaryDirs) {
|
||||||
|
$seqDirs = @(Get-ChildItem -LiteralPath $d.FullName -Directory -ErrorAction SilentlyContinue | Where-Object { $_.Name -ne '_archive' })
|
||||||
|
if ($seqDirs.Count -eq 0) {
|
||||||
|
Add-SequenceFolder -Directory $d -Map $sequenceMap
|
||||||
|
} else {
|
||||||
|
foreach ($s in $seqDirs) {
|
||||||
|
Add-SequenceFolder -Directory $s -Map $sequenceMap
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$secondaryDirs = Get-ChildItem -LiteralPath $root -Directory -Filter $secondaryPattern -ErrorAction SilentlyContinue |
|
||||||
|
Where-Object { $_.Name -ne '_archive' }
|
||||||
|
foreach ($d in $secondaryDirs) {
|
||||||
$seqDirs = @(Get-ChildItem -LiteralPath $d.FullName -Directory -ErrorAction SilentlyContinue | Where-Object { $_.Name -ne '_archive' })
|
$seqDirs = @(Get-ChildItem -LiteralPath $d.FullName -Directory -ErrorAction SilentlyContinue | Where-Object { $_.Name -ne '_archive' })
|
||||||
if ($seqDirs.Count -eq 0) {
|
if ($seqDirs.Count -eq 0) {
|
||||||
Add-SequenceFolder -Directory $d -Map $sequenceMap
|
Add-SequenceFolder -Directory $d -Map $sequenceMap
|
||||||
@@ -204,18 +232,15 @@ try {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
# Scan for folders with both conventions: daily_* (work) and YYYY-MM-DD (home)
|
|
||||||
$dailyDirsWork = Get-ChildItem -LiteralPath $root -Directory -Filter 'daily_*' | Where-Object { $_.Name -ne '_archive' }
|
|
||||||
$dailyDirsHome = Get-ChildItem -LiteralPath $root -Directory -Filter '????-??-??' | Where-Object { $_.Name -ne '_archive' }
|
|
||||||
$dailyDirs = @($dailyDirsWork) + @($dailyDirsHome)
|
|
||||||
=======
|
|
||||||
$directSeqs = Get-ChildItem -LiteralPath $root -Directory -ErrorAction SilentlyContinue |
|
$directSeqs = Get-ChildItem -LiteralPath $root -Directory -ErrorAction SilentlyContinue |
|
||||||
Where-Object { $_.Name -ne '_archive' -and $_.Name -notlike 'daily_*' }
|
Where-Object {
|
||||||
|
$_.Name -ne '_archive' -and
|
||||||
|
$_.Name -notlike 'daily_*' -and
|
||||||
|
$_.Name -notmatch '^\d{4}-\d{2}-\d{2}$'
|
||||||
|
}
|
||||||
foreach ($seq in $directSeqs) {
|
foreach ($seq in $directSeqs) {
|
||||||
Add-SequenceFolder -Directory $seq -Map $sequenceMap
|
Add-SequenceFolder -Directory $seq -Map $sequenceMap
|
||||||
}
|
}
|
||||||
>>>>>>> origin/main
|
|
||||||
|
|
||||||
$sequenceFolders = $sequenceMap.GetEnumerator() | ForEach-Object {
|
$sequenceFolders = $sequenceMap.GetEnumerator() | ForEach-Object {
|
||||||
[pscustomobject]@{
|
[pscustomobject]@{
|
||||||
@@ -248,7 +273,7 @@ try {
|
|||||||
$renameCollisions += $renameResult.Collisions
|
$renameCollisions += $renameResult.Collisions
|
||||||
$renameErrors += $renameResult.Errors
|
$renameErrors += $renameResult.Errors
|
||||||
|
|
||||||
if ($renameResult.FrameCount -gt 0 -and $renameResult.MinFrame -ne $null -and $renameResult.MaxFrame -ne $null) {
|
if ($renameResult.FrameCount -gt 0 -and $null -ne $renameResult.MinFrame -and $null -ne $renameResult.MaxFrame) {
|
||||||
$mp4Result = Rename-SequencePreviewMp4 -SequenceFolderPath $seq.Path -SequenceName $seq.Name -StartFrame $renameResult.MinFrame -EndFrame $renameResult.MaxFrame -LogFile $logFile
|
$mp4Result = Rename-SequencePreviewMp4 -SequenceFolderPath $seq.Path -SequenceName $seq.Name -StartFrame $renameResult.MinFrame -EndFrame $renameResult.MaxFrame -LogFile $logFile
|
||||||
if ($DebugMode -or $mp4Result.Renamed -gt 0 -or $mp4Result.Collisions -gt 0 -or $mp4Result.Errors -gt 0) {
|
if ($DebugMode -or $mp4Result.Renamed -gt 0 -or $mp4Result.Collisions -gt 0 -or $mp4Result.Errors -gt 0) {
|
||||||
Write-Host "[MP4]|$($seq.Path)|$($seq.Name)|renamed=$($mp4Result.Renamed)|collisions=$($mp4Result.Collisions)|errors=$($mp4Result.Errors)" -ForegroundColor Cyan
|
Write-Host "[MP4]|$($seq.Path)|$($seq.Name)|renamed=$($mp4Result.Renamed)|collisions=$($mp4Result.Collisions)|errors=$($mp4Result.Errors)" -ForegroundColor Cyan
|
||||||
|
|||||||
@@ -1,65 +1,8 @@
|
|||||||
# Update subfolders with the latest UpdateSequences and UpdateAllSequences scripts
|
# Deprecated helper retained for compatibility.
|
||||||
|
|
||||||
$sourceBat = "R:\Creative\artsy\maya\0 ProjectStructure\UpdateSequences.bat"
|
Set-StrictMode -Version Latest
|
||||||
$sourceAllBat = "R:\Creative\artsy\maya\0 ProjectStructure\UpdateAllSequences.bat"
|
$ErrorActionPreference = 'Stop'
|
||||||
|
|
||||||
if (-not (Test-Path $sourceBat)) { Write-Error "Source file not found: $sourceBat"; exit 1 }
|
Write-Warning 'UpgradeSeqBatches.ps1 has been deprecated.'
|
||||||
if (-not (Test-Path $sourceAllBat)) { Write-Error "Source file not found: $sourceAllBat"; exit 1 }
|
Write-Warning 'Please run UpdateProjectBatches.ps1 and choose the project that needs refreshed batch files.'
|
||||||
|
exit 1
|
||||||
$root = "R:\Creative\artsy\maya"
|
|
||||||
|
|
||||||
$specs = @(
|
|
||||||
@{ Name = "UpdateSequences.bat"; Source = $sourceBat },
|
|
||||||
@{ Name = "UpdateAllSequences.bat"; Source = $sourceAllBat }
|
|
||||||
)
|
|
||||||
|
|
||||||
$grandTotal = 0
|
|
||||||
$grandUpdated = 0
|
|
||||||
$grandFailed = 0
|
|
||||||
|
|
||||||
foreach ($spec in $specs) {
|
|
||||||
Write-Host "=== Updating $($spec.Name) files ===" -ForegroundColor Cyan
|
|
||||||
Write-Host "Source: $($spec.Source)" -ForegroundColor White
|
|
||||||
Write-Host ""
|
|
||||||
|
|
||||||
$targets = Get-ChildItem -Path $root -Recurse -Filter $spec.Name | Where-Object { $_.FullName -ne $spec.Source }
|
|
||||||
Write-Host "Found $($targets.Count) target files to update:" -ForegroundColor Yellow
|
|
||||||
foreach ($t in $targets) { Write-Host " - $($t.FullName)" -ForegroundColor Gray }
|
|
||||||
Write-Host ""
|
|
||||||
|
|
||||||
$updated = 0
|
|
||||||
$failed = 0
|
|
||||||
foreach ($t in $targets) {
|
|
||||||
try {
|
|
||||||
Copy-Item -Path $spec.Source -Destination $t.FullName -Force
|
|
||||||
Write-Host "✓ Updated: $($t.FullName)" -ForegroundColor Green
|
|
||||||
$updated++
|
|
||||||
}
|
|
||||||
catch {
|
|
||||||
Write-Host "✗ Failed to update: $($t.FullName)" -ForegroundColor Red
|
|
||||||
Write-Host " Error: $($_.Exception.Message)" -ForegroundColor Red
|
|
||||||
$failed++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Write-Host ""
|
|
||||||
Write-Host "=== $($spec.Name) SUMMARY ===" -ForegroundColor Magenta
|
|
||||||
Write-Host "Successfully updated: $updated" -ForegroundColor Green
|
|
||||||
Write-Host "Failed updates: $failed" -ForegroundColor Red
|
|
||||||
Write-Host "Total targets: $($targets.Count)" -ForegroundColor White
|
|
||||||
Write-Host ""
|
|
||||||
|
|
||||||
$grandTotal += $targets.Count
|
|
||||||
$grandUpdated += $updated
|
|
||||||
$grandFailed += $failed
|
|
||||||
}
|
|
||||||
|
|
||||||
Write-Host "=== OVERALL SUMMARY ===" -ForegroundColor Magenta
|
|
||||||
Write-Host "Total targets across all files: $grandTotal" -ForegroundColor White
|
|
||||||
Write-Host "Total successfully updated: $grandUpdated" -ForegroundColor Green
|
|
||||||
Write-Host "Total failed: $grandFailed" -ForegroundColor Red
|
|
||||||
if ($grandFailed -eq 0) {
|
|
||||||
Write-Host "`n🎉 All files updated successfully!" -ForegroundColor Green
|
|
||||||
} else {
|
|
||||||
Write-Host "`n⚠️ Some updates failed. See errors above." -ForegroundColor Yellow
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -56,6 +56,18 @@ for %%F in (UpdateSequences.bat ZipSeqArchv.bat UnzipSeqArchv.bat) do (
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
for %%F in (ConfigLoader.ps1 config.json) do (
|
||||||
|
if exist "%scriptDir%%%F" (
|
||||||
|
if "%DRY%"=="1" (
|
||||||
|
echo [DRY] copy "%scriptDir%%%F" "%rendersDir%\%%F"
|
||||||
|
) else (
|
||||||
|
copy /Y "%scriptDir%%%F" "%rendersDir%\%%F" >nul
|
||||||
|
)
|
||||||
|
) else (
|
||||||
|
echo [WARN] Missing template: "%scriptDir%%%F"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
:: -----------------------------
|
:: -----------------------------
|
||||||
:: Merge .gitignore and .gitattributes from templates
|
:: Merge .gitignore and .gitattributes from templates
|
||||||
:: -----------------------------
|
:: -----------------------------
|
||||||
|
|||||||
@@ -1,24 +1,44 @@
|
|||||||
@echo off
|
@echo off
|
||||||
setlocal
|
setlocal EnableExtensions EnableDelayedExpansion
|
||||||
|
|
||||||
set "REN_DIR=%~dp0"
|
set "REN_DIR=%~dp0"
|
||||||
for %%I in ("%REN_DIR%..") do set "PROJ_ROOT=%%~fI"
|
for %%I in ("%REN_DIR%..") do set "PROJ_ROOT=%%~fI"
|
||||||
set "PY_SCRIPT=A:\1 Amazon_Active_Projects\3 ProjectStructure\zip_sequences.py"
|
|
||||||
|
|
||||||
if not exist "%PY_SCRIPT%" (
|
set "CONFIG_DIR=%PROJ_ROOT%\.config"
|
||||||
echo Missing %PY_SCRIPT%
|
set "CONFIG_PATH=%CONFIG_DIR%\config.json"
|
||||||
|
set "GET_STRUCT_DIR=%CONFIG_DIR%\GetStructDir.ps1"
|
||||||
|
|
||||||
|
if not exist "%CONFIG_PATH%" (
|
||||||
|
echo [ERROR] config.json not found at %CONFIG_PATH%
|
||||||
|
echo Please run ConfigLoader.ps1 to deploy helper files.
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
if not exist "%GET_STRUCT_DIR%" (
|
||||||
|
echo [ERROR] GetStructDir.ps1 not found at %GET_STRUCT_DIR%
|
||||||
|
echo Please run ConfigLoader.ps1 to deploy helper files.
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
for /f "usebackq delims=" %%I in (`powershell -NoProfile -ExecutionPolicy Bypass -Command ^
|
||||||
|
"Set-StrictMode -Version Latest; $structDir = & '%GET_STRUCT_DIR%' -ProjectRoot '%PROJ_ROOT%'; if (-not $structDir) { throw \"Failed to get structDir from GetStructDir.ps1\" }; $pyPath = Join-Path $structDir 'zip_sequences.py'; if (-not (Test-Path -LiteralPath $pyPath)) { throw \"zip_sequences.py not found at $pyPath\" }; Write-Output $pyPath"`) do set "PY_SCRIPT=%%~I"
|
||||||
|
|
||||||
|
if not defined PY_SCRIPT (
|
||||||
|
echo [ERROR] Unable to resolve zip_sequences.py path from config.
|
||||||
exit /b 1
|
exit /b 1
|
||||||
)
|
)
|
||||||
|
|
||||||
pushd "%PROJ_ROOT%" >nul 2>&1
|
pushd "%PROJ_ROOT%" >nul 2>&1
|
||||||
|
|
||||||
python "%PY_SCRIPT%" --verbose %*
|
python "%PY_SCRIPT%" --verbose %*
|
||||||
set "ERR=%ERRORLEVEL%"
|
set "ERR=!ERRORLEVEL!"
|
||||||
|
|
||||||
if not "%ERR%"=="0" (
|
|
||||||
echo Failed to update render sequence archives (exit code %ERR%).
|
|
||||||
)
|
|
||||||
|
|
||||||
popd >nul 2>&1
|
popd >nul 2>&1
|
||||||
exit /b %ERR%
|
|
||||||
|
if !ERR! NEQ 0 (
|
||||||
|
echo Failed to update render sequence archives ^(exit code !ERR!^).
|
||||||
|
exit /b !ERR!
|
||||||
|
)
|
||||||
|
|
||||||
|
exit /b 0
|
||||||
|
|
||||||
|
|||||||
@@ -1,53 +1,96 @@
|
|||||||
*.mp4 filter=lfs diff=lfs merge=lfs -text
|
# Git LFS attributes configuration
|
||||||
*.png filter=lfs diff=lfs merge=lfs -text
|
# All listed file types will be tracked by Git LFS
|
||||||
*.jpg filter=lfs diff=lfs merge=lfs -text
|
|
||||||
*.exr filter=lfs diff=lfs merge=lfs -text
|
# Video files
|
||||||
*.hdr filter=lfs diff=lfs merge=lfs -text
|
*.avi filter=lfs diff=lfs merge=lfs -text
|
||||||
*.blend filter=lfs diff=lfs merge=lfs -text
|
|
||||||
*.7z filter=lfs diff=lfs merge=lfs -text
|
|
||||||
*.abc filter=lfs diff=lfs merge=lfs -text
|
|
||||||
*.pdf filter=lfs diff=lfs merge=lfs -text
|
|
||||||
*.mkv filter=lfs diff=lfs merge=lfs -text
|
*.mkv filter=lfs diff=lfs merge=lfs -text
|
||||||
*.obj filter=lfs diff=lfs merge=lfs -text
|
|
||||||
*.max filter=lfs diff=lfs merge=lfs -text
|
|
||||||
*.ma filter=lfs diff=lfs merge=lfs -text
|
|
||||||
*.bvh filter=lfs diff=lfs merge=lfs -text
|
|
||||||
*.h5 filter=lfs diff=lfs merge=lfs -text
|
|
||||||
*.tar filter=lfs diff=lfs merge=lfs -text
|
|
||||||
*.c4d filter=lfs diff=lfs merge=lfs -text
|
|
||||||
*.mov filter=lfs diff=lfs merge=lfs -text
|
*.mov filter=lfs diff=lfs merge=lfs -text
|
||||||
*.blend1 filter=lfs diff=lfs merge=lfs -text
|
*.MOV filter=lfs diff=lfs merge=lfs -text
|
||||||
*.3ds filter=lfs diff=lfs merge=lfs -text
|
*.mp4 filter=lfs diff=lfs merge=lfs -text
|
||||||
*.hdf5 filter=lfs diff=lfs merge=lfs -text
|
*.webm filter=lfs diff=lfs merge=lfs -text
|
||||||
*.psd filter=lfs diff=lfs merge=lfs -text
|
|
||||||
*.zip filter=lfs diff=lfs merge=lfs -text
|
# Image files
|
||||||
*.fbx filter=lfs diff=lfs merge=lfs -text
|
*.bmp filter=lfs diff=lfs merge=lfs -text
|
||||||
*.fbxkey filter=lfs diff=lfs merge=lfs -text
|
*.exr filter=lfs diff=lfs merge=lfs -text
|
||||||
*.blend2 filter=lfs diff=lfs merge=lfs -text
|
*.gif filter=lfs diff=lfs merge=lfs -text
|
||||||
*.mb filter=lfs diff=lfs merge=lfs -text
|
*.hdr filter=lfs diff=lfs merge=lfs -text
|
||||||
*.ma filter=lfs diff=lfs merge=lfs -text
|
*.jpg filter=lfs diff=lfs merge=lfs -text
|
||||||
*.tiff filter=lfs diff=lfs merge=lfs -text
|
*.jpeg filter=lfs diff=lfs merge=lfs -text
|
||||||
*.ai filter=lfs diff=lfs merge=lfs -text
|
*.png filter=lfs diff=lfs merge=lfs -text
|
||||||
*.gz filter=lfs diff=lfs merge=lfs -text
|
|
||||||
*.tga filter=lfs diff=lfs merge=lfs -text
|
*.tga filter=lfs diff=lfs merge=lfs -text
|
||||||
*.tif filter=lfs diff=lfs merge=lfs -text
|
*.tif filter=lfs diff=lfs merge=lfs -text
|
||||||
*.jpeg filter=lfs diff=lfs merge=lfs -text
|
*.tiff filter=lfs diff=lfs merge=lfs -text
|
||||||
*.bmp filter=lfs diff=lfs merge=lfs -text
|
*.webp filter=lfs diff=lfs merge=lfs -text
|
||||||
*.eps filter=lfs diff=lfs merge=lfs -text
|
|
||||||
*.rar filter=lfs diff=lfs merge=lfs -text
|
# 3D/CG files
|
||||||
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
*.3ds filter=lfs diff=lfs merge=lfs -text
|
||||||
*.avi filter=lfs diff=lfs merge=lfs -text
|
*.abc filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.blend filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.blend1 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.blend2 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.bvh filter=lfs diff=lfs merge=lfs -text
|
||||||
*.bvh.gz filter=lfs diff=lfs merge=lfs -text
|
*.bvh.gz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.c4d filter=lfs diff=lfs merge=lfs -text
|
||||||
*.dae filter=lfs diff=lfs merge=lfs -text
|
*.dae filter=lfs diff=lfs merge=lfs -text
|
||||||
*.mp3 filter=lfs diff=lfs merge=lfs -text
|
*.fbx filter=lfs diff=lfs merge=lfs -text
|
||||||
*.mp3 filter=lfs diff=lfs merge=lfs -text
|
*.fbxkey filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.ma filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.max filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.mb filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.obj filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.usd filter=lfs diff=lfs merge=lfs -text
|
||||||
*.vdb filter=lfs diff=lfs merge=lfs -text
|
*.vdb filter=lfs diff=lfs merge=lfs -text
|
||||||
*.aep filter=lfs diff=lfs merge=lfs -text
|
*.bphys filter=lfs diff=lfs merge=lfs -text
|
||||||
*.aegraphic filter=lfs diff=lfs merge=lfs -text
|
*.bobj filter=lfs diff=lfs merge=lfs -text
|
||||||
*.prproj filter=lfs diff=lfs merge=lfs -text
|
*.bvel filter=lfs diff=lfs merge=lfs -text
|
||||||
*.prin filter=lfs diff=lfs merge=lfs -text
|
*.bpointcache filter=lfs diff=lfs merge=lfs -text
|
||||||
*.prel filter=lfs diff=lfs merge=lfs -text
|
*.blob filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.unitypackage filter=lfs diff=lfs merge=lfs -text
|
||||||
|
|
||||||
|
# Flip Fluids cache files
|
||||||
|
*.data filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.sqlite3 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
|
||||||
|
# Substance files
|
||||||
|
*.sbs filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.sbsar filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.spp filter=lfs diff=lfs merge=lfs -text
|
||||||
|
|
||||||
|
# Audio files
|
||||||
|
*.mp3 filter=lfs diff=lfs merge=lfs -text
|
||||||
*.wav filter=lfs diff=lfs merge=lfs -text
|
*.wav filter=lfs diff=lfs merge=lfs -text
|
||||||
|
|
||||||
|
# Archive/Compression files
|
||||||
|
*.7z filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.gz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.rar filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tar filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.zip filter=lfs diff=lfs merge=lfs -text
|
||||||
|
|
||||||
|
# Documents
|
||||||
*.docx filter=lfs diff=lfs merge=lfs -text
|
*.docx filter=lfs diff=lfs merge=lfs -text
|
||||||
*.MOV filter=lfs diff=lfs merge=lfs -text
|
*.xlsx filter=lfs diff=lfs merge=lfs -text
|
||||||
*.gif filter=lfs diff=lfs merge=lfs -text
|
*.eps filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.pdf filter=lfs diff=lfs merge=lfs -text
|
||||||
|
|
||||||
|
# Adobe files
|
||||||
|
*.aegraphic filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.aep filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.prel filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.prin filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.prmf filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.prproj filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.ai filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.psd filter=lfs diff=lfs merge=lfs -text
|
||||||
|
|
||||||
|
# Data files
|
||||||
|
*.h5 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.hdf5 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
|
||||||
|
# Other
|
||||||
|
*.uni filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.pdn filter=lfs diff=lfs merge=lfs -text
|
||||||
|
|
||||||
|
# Python files
|
||||||
|
*.npz filter=lfs diff=lfs merge=lfs -text
|
||||||
@@ -41,13 +41,6 @@
|
|||||||
*.tmp
|
*.tmp
|
||||||
*.temp
|
*.temp
|
||||||
|
|
||||||
# Blender internal cache files
|
|
||||||
*.bpy
|
|
||||||
*.bmesh
|
|
||||||
*.bvh
|
|
||||||
*.bobj
|
|
||||||
*.bphys
|
|
||||||
|
|
||||||
# OS generated files
|
# OS generated files
|
||||||
.DS_Store
|
.DS_Store
|
||||||
.DS_Store?
|
.DS_Store?
|
||||||
@@ -119,6 +112,7 @@ Renders/**
|
|||||||
!Renders/**/
|
!Renders/**/
|
||||||
!Renders/**/*.bat
|
!Renders/**/*.bat
|
||||||
!Renders/**/*.log
|
!Renders/**/*.log
|
||||||
|
seq/
|
||||||
|
|
||||||
# Premiere
|
# Premiere
|
||||||
*.prlock
|
*.prlock
|
||||||
|
|||||||
8
config.json
Normal file
8
config.json
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"dailyFormat": "daily_YYMMDD",
|
||||||
|
"structDir": "A:\\1 Amazon_Active_Projects\\3 ProjectStructure",
|
||||||
|
"zipper": "7z",
|
||||||
|
"compression": 0,
|
||||||
|
"Max7zInst": 0
|
||||||
|
}
|
||||||
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
new script named UpgradeToGitProj. this is to be ran in a project structure that was pre-git.
|
|
||||||
|
|
||||||
1. appends gitignore and gitattributes, initializes git, and installs git lfs
|
|
||||||
- If already initialized, will this just error but continue?
|
|
||||||
2. Manages Renders folder:
|
|
||||||
a. creates folder, adding NewDaily and UpdateSeq scripts
|
|
||||||
b. scans the structure within blends\animations and creates a folder for each submodule, e.g. Horizontal, Shorts, Vertical, etc. If there are no submodules, it just grabs the daily_* folders.
|
|
||||||
c. For each daily_* folder, it copies the contents of each daily_*\seq\ folder into the Renders\submodule\ folder. If it's taking daily_* folders from the root, it just copies the contents of the daily_*\seq\ folder into the Renders\ folder.
|
|
||||||
934
zip_sequences.py
934
zip_sequences.py
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user