Attualmente sto scrivendo uno script in Powershell che consente di copiare una cartella in un repository SVN in un'altra mentre conserva la cronologia. Un esempio di tale comando è:Le tubazioni Powershell causano l'uso di memoria esplosiva
svnadmin.exe dump $FromRepoPath `
| svndumpfilter.exe include --drop-empty-revs --renumber-revs --preserve-revprops $Folder `
| svnadmin.exe load --ignore-uuid $ToRepoPath
Questo provoca un uso molto elevato di memoria in Powershell. Sembra che Powershell prima esegua svnadmin.exe e bufferizza lo stdout dall'amministratore SVN, quindi esegue svndumpfilter e i buffer che emettono ed infine esegue svnadmin.exe.
posso lavorare intorno ad esso con la creazione di un file batch separato:
@echo off
svnadmin.exe dump %1 | svndumpfilter.exe include --drop-empty-revs --renumber-revs --preserve-revprops %2 | svnadmin.exe load --ignore-uuid %3
e quindi chiamando da PowerShell:
cmd.exe /c "SvnHelper.cmd $FromRepoPath $Folder $ToRepoPath"
Ma questa sembra una soluzione brutta e inutile.
C'è un modo per dire a Powershell di passare direttamente durante la piping invece del buffering?
Prova 'svnadmin.exe ... | out-string | svnfilter.exe ... '? Questo potrebbe convincere PowerShell a convogliare ogni linea invece di raccogliere tutto. Non ho SVN né lo so, quindi scuse se questo si rompe orribilmente. – Eris