From 9b6671b0ed510d1b738a238fc71edc6fdae738c1 Mon Sep 17 00:00:00 2001 From: Marius Mutu Date: Mon, 3 Aug 2026 08:30:21 +0300 Subject: [PATCH] actualizare --- CLAUDE.md | 2 +- git_svn_parallel_init_prompt.md | 87 --------------------------------- git_sync.ps1 | 23 ++++++--- 3 files changed, 17 insertions(+), 95 deletions(-) delete mode 100644 git_svn_parallel_init_prompt.md diff --git a/CLAUDE.md b/CLAUDE.md index fd5c875..27d06e6 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -9,7 +9,7 @@ A local shared copy of **FoxBin2Prg** (the VFPX tool by Fernando D. Bozzo, maint This directory is a git clone with two remotes: - **`origin`** = `https://github.com/fdbozzo/foxbin2prg.git` (upstream, read-only). `master` tracks `origin/master` and stays a pristine mirror. -- **`romfast`** = `git@gitea.romfast.ro:romfast/foxbin2prg.git` (our fork on Gitea, SSH). Working branch **`romfast`** (default on Gitea) = upstream `master` + the ROA additions committed (`vcx2txt.ps1`, `PROMPT_cautare_vfp.md`, `CLAUDE.md`, `git_svn_parallel_init_prompt.md`). The pre-git local state is kept on branch `local-snapshot-v1.21.04`. +- **`romfast`** = `git@gitea.romfast.ro:romfast/foxbin2prg.git` (our fork on Gitea, SSH). Working branch **`romfast`** (default on Gitea) = upstream `master` + the ROA additions committed (`vcx2txt.ps1`, `PROMPT_cautare_vfp.md`, `CLAUDE.md`). The pre-git local state is kept on branch `local-snapshot-v1.21.04`. Update flow (sync fork from upstream): `git fetch origin` → `git checkout master && git merge --ff-only origin/master` → `git checkout romfast && git merge master` → `git push romfast romfast master`. After any update, regenerate binaries/EXE in VFP9 with `DO ReCreate_FoxBin2Prg.prg` (an error about `TESTS\FXUResults.db2` is expected). Text caches live outside this folder (`D:\ROA\_vfp_textcache\`, see below) so `ReCreate` never touches them; compiled binaries are kept out of git via the upstream `.gitignore` plus `.git/info/exclude` (which also still ignores any stray local `_textcache*`). diff --git a/git_svn_parallel_init_prompt.md b/git_svn_parallel_init_prompt.md deleted file mode 100644 index ef9826a..0000000 --- a/git_svn_parallel_init_prompt.md +++ /dev/null @@ -1,87 +0,0 @@ -# Prompt: init git in paralel cu SVN pentru un proiect ROA - -Foloseste acest prompt intr-o sesiune Claude Code noua, deschisa in radacina proiectului -tinta (ex. `D:\ROA\ROAIMOB`). Functioneaza generic pentru orice proiect VFP din `D:\ROA\` -care are structura ROAACNPRO (proiect + subfolder COMUN\ partajat, ambele in SVN). - ---- - -``` -Vreau sa initializezi git pentru proiectul VFP din directorul curent, in paralel cu SVN-ul -existent (nu atinge SVN, nu rula comenzi svn, doar adauga .svn/ in .gitignore). - -Structura e identica cu D:\ROA\ROAACNPRO: acest folder e propriul proiect VFP (are un .PJX -al lui), si contine un subfolder COMUN\ care e framework-ul PARTAJAT intre toate aplicatiile -ROA, versionat separat prin SVN (are propriul .svn\). - -Fa exact ce s-a facut deja pentru ROAACNPRO (poti citi acolo ca referinta/sablon): -- D:\ROA\ROAACNPRO\.gitignore (sablon pentru .gitignore-ul proiectului principal) -- D:\ROA\ROAACNPRO\COMUN\.gitignore (sablon pentru .gitignore-ul din COMUN) -- D:\ROA\ROAACNPRO\CLAUDE.md (conventii proiect) si docs\cautare_vcx_vct.md (cum se cauta - cod in interiorul .vcx/.scx binare, via D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1) - -Pasi: - -1. Verifica intai ce exista deja: `git status`/`.git` in radacina si in COMUN\, si - `git remote -v` daca exista deja vreun remote configurat gresit (asa cum a fost cazul la - ROAACNPRO, unde originul proiectului principal pointa gresit catre repo-ul comun.git). - -2. REPO PRINCIPAL (radacina acestui folder): - - Daca nu exista .git, `git init -b main`. - - Creeaza/adapteaza .gitignore dupa modelul ROAACNPRO/.gitignore (artefacte VFP compilate: - *.fxp, *.mpx, *.bak, *.mpr, *.err, log.txt, *.tmp, *.dct, *.exe, cruft Windows), plus - obligatoriu `COMUN/` (COMUN e gestionat de git-ul lui separat, nu de-al acestui repo) - si `.svn/`. - - Deduce numele repo-ului gitea dupa conventia romfast/.git - (ex. romfast/roaimob.git). INAINTE sa creezi/pushezi orice, verifica cu - `git ls-remote git@gitea.romfast.ro:romfast/.git` daca exista deja si ce contine - (clone --depth 1 intr-un folder temporar din scratchpad daca ai dubii). Daca exista deja - cu istoric care nu se potriveste cu ce ai local, OPRESTE-TE si intreaba-ma inainte sa - faci push sau orice suprascriere. - - Daca remote-ul e gol/nou: add -A, commit "Initial commit — sursa ", adauga - origin, push normal (fara --force). - -3. COMUN\ (subfolder-ul partajat): - - Initializeaza un git SEPARAT, propriu, in interiorul COMUN\ (COMUN are propriul .git, - nu e tracked de repo-ul principal — de-asta l-am exclus mai sus). - - .gitignore propriu in COMUN\ dupa modelul ROAACNPRO/COMUN/.gitignore (artefacte VFP + - `.svn/` + `bash.exe.stackdump`). - - Origin-ul din COMUN\ trebuie sa fie EXACT acelasi repo pentru toate proiectele ROA: - git@gitea.romfast.ro:romfast/comun.git — repo-ul asta e deja populat (din COMUN-ul lui - ROAACNPRO). NU face commit+push orbeste peste el. - - Fa intai `git fetch origin`, compara continutul de pe origin/main cu fisierele locale - din acest COMUN\ (diff pe folder, nu doar pe nume). Daca sunt identice sau diferentele - sunt neglijabile, seteaza pur si simplu branch-ul local sa urmareasca origin/main (fara - sa strici fisierele din working copy SVN). Daca sunt diferente reale intre COMUN-ul - acestui proiect si cel deja impins pe gitea, arata-mi un rezumat al diferentelor si - intreaba-ma explicit cum procedez (nu face force-push fara aprobarea mea explicita — - ar sterge ireversibil istoricul comun tuturor proiectelor ROA). - -4. Cautare in cod VFP binar (.vcx/.scx) pentru acest proiect: - - Foloseste acelasi vcx2txt.ps1, dar parametrizat pentru proiectul curent (nu ROAACNPRO): - powershell -ExecutionPolicy Bypass -File D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1 ` - -Project D:\ROA\\.PJX -ProjectRoot D:\ROA\ ` - -CacheRoot D:\ROA\_vfp_textcache\ - - Cache separat per proiect, in D:\ROA\_vfp_textcache\ (in AFARA folderului foxbin2prg, ca - ReCreate_FoxBin2Prg.prg sa nu-l reconverteasca). Nu-l amesteca cu cache-ul ROAACNPRO - (D:\ROA\_vfp_textcache\roacnpro). Grep in cache-ul respectiv, la fel ca in docs\cautare_vcx_vct.md. - -5. La final, adauga/actualizeaza CLAUDE.md al acestui proiect cu o sectiune scurta: git ruleaza - in paralel cu SVN legacy (SVN ramane sursa "vie" pentru COMUN, sincronizat manual catre git); - COMUN e partajat intre toate aplicatiile ROA prin acelasi git@gitea.romfast.ro:romfast/comun.git; - cautarile in .vcx/.scx se fac cu vcx2txt.ps1 parametrizat pentru acest proiect (vezi mai sus). - -Inainte de orice `push --force` sau orice operatie care ar suprascrie istoric remote deja -existent (mai ales pe romfast/comun.git, care e comun mai multor proiecte), opreste-te si -intreaba-ma explicit — nu decide singur. -``` - ---- - -## Note - -- Cel mai sensibil pas e COMUN\: daca versiunea de COMUN a noului proiect difera de cea deja - impinsa pe `comun.git` (din ROAACNPRO), Claude trebuie sa se opreasca si sa intrebe cum se - reconciliaza, nu sa faca force-push automat. -- Daca `romfast/.git` nu exista inca pe gitea, trebuie creat gol acolo inainte de push - (manual sau prin API) — altfel push-ul esueaza cu "repository not found". diff --git a/git_sync.ps1 b/git_sync.ps1 index bdd1637..968e275 100644 --- a/git_sync.ps1 +++ b/git_sync.ps1 @@ -24,8 +24,9 @@ Esec partial: la esecul unui fisier continua cu restul, colecteaza esecurile, le raporteaza la final si iese cu exit code nenul. - Curatare orfani: textele .??2 fara binar corespondent (binar sters din SVN) se sterg si se - raporteaza; la fel .db2-urile ale caror tabele au IESIT din lista -DbfList. + Curatare orfani: textele .??2 fara binar corespondent (binar sters din SVN) si .db2-urile ale + caror tabele au IESIT din lista -DbfList sunt DOAR RAPORTATE implicit; se sterg numai cu + -OrphanCleanup explicit. Toate invocarile FoxBin2Prg.EXE trec prin Invoke-FoxBin2PrgSafe (timeout + taskkill). @@ -53,7 +54,10 @@ Reconverteste chiar daca textul e la zi. .PARAMETER NoOrphanCleanup - Nu sterge textele orfane (doar le raporteaza). + Pastrat pentru compatibilitate: forteaza doar-raportare chiar si cu -OrphanCleanup. + +.PARAMETER OrphanCleanup + Sterge efectiv textele orfane. Implicit orfanii sunt DOAR raportati, nu stersi. .EXAMPLE powershell -ExecutionPolicy Bypass -File D:\ROA\UTIL\foxbin2prg\git_sync.ps1 -ProjectRoot D:\ROA\ROACONT @@ -65,14 +69,19 @@ param( [string[]]$DbfList = @('Locale\locale*.dbf','Help\*.dbf','DATE\Optiuni_*.dbf', 'COMUN\clase\Locale\*.dbf','COMUN\datemenu\*.dbf','COMUN\datemenu\xold\*.dbf', 'COMUN\Drepturi utilizatori\*\*.dbf','COMUN\utile\GridExtras\gridextras.dbf', - 'COMUN\utile\ListProperty\lproperty.dbf','COMUN\utile\hpdf\*.dbf','COMUN\utile\hpdf\ReportOutput\*.dbf'), + 'COMUN\utile\ListProperty\lproperty.dbf','COMUN\utile\hpdf\*.dbf','COMUN\utile\hpdf\ReportOutput\*.dbf', + # acelasi set si fara prefixul COMUN\, pentru rulari cu -ProjectRoot chiar pe radacina COMUN + 'clase\Locale\*.dbf','datemenu\*.dbf','datemenu\xold\*.dbf', + 'Drepturi utilizatori\*\*.dbf','utile\GridExtras\gridextras.dbf', + 'utile\ListProperty\lproperty.dbf','utile\hpdf\*.dbf','utile\hpdf\ReportOutput\*.dbf'), # clase FFC/third-party cu #INCLUDE: roundtrip izolat = fals-negativ; editare doar in IDE, fara write-back [string[]]$RoundtripExempt = @('COMUN\clase\accessibility.vcx','COMUN\clase\oinventar.vcx','COMUN\clase\_gdiplus.vcx','COMUN\clase\_reportlistener.vcx','COMUN\utile\foxcharts\foxcharts.vcx','COMUN\utile\web\_webview.vcx'), [string]$SubDir = '', [int]$TimeoutSeconds = 60, [int]$MaxDb2Mb = 5, [switch]$Force, - [switch]$NoOrphanCleanup + [switch]$NoOrphanCleanup, + [switch]$OrphanCleanup ) $ErrorActionPreference = 'Stop' @@ -283,7 +292,7 @@ if (-not $SubDir) { } if ($isOrphan) { $orphansDeleted += (Get-RelPath $t.FullName) - if (-not $NoOrphanCleanup) { Remove-Item -LiteralPath $t.FullName -Force -ErrorAction SilentlyContinue } + if ($OrphanCleanup -and -not $NoOrphanCleanup) { Remove-Item -LiteralPath $t.FullName -Force -ErrorAction SilentlyContinue } } } } @@ -295,7 +304,7 @@ Write-Host '' Write-Host "--- Sumar git_sync ---" Write-Host "Convertite: $ok Sarite(la zi): $up Esuate: $($failures.Count)" if ($orphansDeleted.Count -gt 0) { - $verb = if ($NoOrphanCleanup) { 'raportate (nesterse)' } else { 'sterse' } + $verb = if ($OrphanCleanup -and -not $NoOrphanCleanup) { 'sterse' } else { 'raportate (nesterse)' } Write-Host "Orfani ${verb}: $($orphansDeleted.Count)" $orphansDeleted | ForEach-Object { Write-Host " orfan: $_" } }