Riga di comando per cancellare tutti i file di visualizzazione privata di ClearCase

Sto cercando una riga di comando per rimuovere tutti i file e le directory view-private da una vista ClearCase su Windows. Ho a disposizione anche Cygwin.

Lo script disponibile in questo articolo non è esattamente quello che voglio, dal momento che sto lavorando con un gran numero di file e voglio eliminarli tutti senza doverli selezionare.

Alcune osservazioni:

  • ct lsprivate è ottimo per le viste dinamiche, non per le istantanee
  • ct ls -rec -view_only ct lsprivate anche i file estratti … Non sono sicuro che tu voglia cancellarli …

Per elencare i file privati ​​(solo quelli privati, non quelli dirottati che potresti voler mantenere), devi avere un comando che:

  • prende in considerazione gli spazi nel nome
  • non elenca checkout, file hijacked o eclipse o collegamenti simbolici
  • funziona sia per le istantanee che per le viste dinamiche
  • (bonus) non dipende da comandi di shell esterni

    for /F "usebackq delims=" %i in (`cleartool ls -r ^| find /V "Rule:" ^| find /V "hijacked" ^| find /V "eclipsed" ^| find /V "-->"`) do @echo "%i"

Questo elenca tutti i tuoi file privati ​​(saltando i collegamenti hijacked / eclipse / check-out o non privati ​​così come i link simbolici) in un modo puro di Windows (non è necessaria alcuna dipendenza da shell esterna).
Sostituisci @echo "%i" di del /F "%i" e sono spariti.
Notare le doppie virgolette attorno a% i, per visualizzare / rimuovere correttamente i file con spazi nel loro nome. Si noti inoltre l’assenza del parametro cleartool -nxn, in quanto i collegamenti simbolici sarebbero altrimenti indistinguibili e i file view-private non vengono comunque decorati.

Per eliminare anche le directory private, eseguire prima il comando con rmdir /S /Q "%i" e quindi con del /F "%i" .

Sotto il prompt di DOS di Windows:

 for /f "delims=" %f in ('cleartool lspriv -s -do -oth ^| sort /r') do @del /f /q "%f" 

So che probabilmente c’è un modo migliore ma mi sembra sempre di tornare a questo:

 ct lspriv | grep -v checkedout | xargs rm -rf 

Ho sempre usato:

 ct lsprivate | xargs rm 

Su Unix (viste dinamiche), una tecnica molto efficace per rimuovere la vista dei file privati ​​è di eliminare la vista. Conserva prima il cspec. Assicurati anche che non ci siano checkout nella vista. Quindi rimuovilo e ricreane uno nuovo (stesso nome, stesso cspec, stessa memoria, ma nessun file privato finché non li crei).

 # With the view to be cleaned as your current view... ct pwv -s > /tmp/viewname viewname=$( /tmp/$viewname.cs ct lsview -cvi | awk '{print $3;}' > /tmp/$viewname.vws # The next line is the first dangerous line! # It cancels all outstanding checkouts and removes the modified files ct lsco -cvi -s -avo 2>/dev/null | xargs ct unco -rm # Or: xargs ct ci -nc exit # Terminate the session in the view viewname=$( 

Tutti i file privati ​​di visualizzazione sono spariti e hai ridotto al minimo l'utilizzo del disco.

Se sei abbastanza fortunato da lavorare solo con un singolo VOB, puoi omettere l' -avo ' -avo ' (tutti i VOB). Il reindirizzamento ' 2>/dev/null ' perde errori da VOB inaccessibili: ho più di 100 VOB visibili ma inaccessibili nel mio ambiente, a parte una dozzina di accessi accessibili che uso davvero.

Si noti che se si rebuild.view packaging come script ' rebuild.view ', si avrebbe il viewname come argomento (lavorando al di fuori della vista - non sarebbe la vista corrente), e si potrebbe quindi eseguire la pulizia all'interno del view, usa una diversa opzione 'lsview' per ottenere i dettagli necessari, e in genere ti allontani dalla memoria temporanea in / tmp (anche se avrai bisogno di memorizzare il cspec da qualche parte).

Un altro punto da notare: vorresti assicurarti di aver effettuato una pulizia manuale prima di lasciare libero l'automatico. Non dovrebbero esserci checkout, per esempio. In alternativa, scrivi lo script per rifiutare di abbandonare la vista in caso di checkout.

Ho finito per usare questo comando in Cygwin:

 cleartool ls -recurse -view_only | sed -e 's:\\:/:g' | xargs rm -r 

Il sed è necessario per modificare i percorsi in stile Windows in output tramite cleartool in percorsi in stile Unix. Probabilmente c’è un comando più efficiente là fuori. Questo genera molti errori, perché cancella la directory, e quindi tutti i file di visualizzazione privati ​​precedentemente trovati sotto quella directory non verranno trovati da rm. Ma ottieni il risultato giusto alla fine.

EDIT: VonC sottolinea che questo funziona solo con viste dinamiche ClearCase

  1. Dalla CLI Per elencare la vista i file privati ​​hanno eseguito il comando seguente

     for /F "usebackq delims=" %i in (`cleartool lspriv -s ^| find /V "Rule:" ^| find /V "hijacked" ^| find /V "eclipsed"`) do @echo "%i" 
  2. Dalla CLI eseguita sotto comando per cancellare la vista dei file privati

     for /F "usebackq delims=" %i in (`cleartool lspriv -s ^| find /V "Rule:" ^| find /V "hijacked" ^| find /V "eclipsed"`) do del /F "%i" 
  3. Sincronizzazione della vista con il progetto:
    Dall’esploratore del progetto seleziona le proprietà del stream, vai alla scheda vista, seleziona le proprietà della vista e poi fai clic su “sincronizza con il progetto”

che ne dici di usare il comando cygpath invece di sed?
puoi trovare maggiori informazioni su cygpath.exe qui:
link text

un modo per colbind cygpath.exe con altri programmi è quello di utilizzare xargs.
esempio: processA | xargs cygpath -u> my-path-in-unix-format.txt

In puro windows puoi farlo:

 for /F "delims=" %i IN ('ct lsprivate') DO rm -rf "%i"