C'è un modo per ottenere un breve stato CVS dalla riga di comando?

StackOverflow https://stackoverflow.com/questions/211819

  •  03-07-2019
  •  | 
  •  

Domanda

Quando si esegue un aggiornamento cvs , si ottiene un bel riepilogo dello stato del repository, ad esempio:

M src/file1.txt
M src/file2.txt
C src/file3.txt
A src/file4.txt
? src/file5.txt

C'è un modo per ottenerlo senza aggiornarlo? So che c'è cvs status , ma questo è un modo per dire in dettaglio:

===================================================================
File: file6.txt        Status: Up-to-date

Working revision:    1.2
Repository revision: 1.2     /var/cvs/cvsroot/file6.txt,v
Sticky Tag:          (none)
Sticky Date:         (none)
Sticky Options:      (none)

Ovviamente potrei creare una sceneggiatura per fare la trasformazione da quest'ultima alla prima, ma sembra una perdita di tempo poiché i CV possono ovviamente produrre la prima.

È stato utile?

Soluzione

È possibile utilizzare il flag -n per ottenere l'output di aggiornamento senza aggiornare effettivamente i file. Puoi anche aggiungere -q (quiet) per sopprimere i messaggi del server.

cvs -q -n update

Altri suggerimenti

@jmcnamara: buon consiglio!

E per tutto questo tempo ho usato questo script bash:

cvs -q status "$@" | grep '^[?F]' | grep -v 'Up-to-date'

Ho alcuni alias, che potrebbero essere utili per qualcuno:

alias cvsstatus_command='cvs -q status | grep "^[?F]" | grep -v "Up-to-date" | \
    grep -v "\.so" | grep -v "\.[c]*project"'

alias cvsstatus_color='nawk '"'"'BEGIN \
    { \
        arr["Needs Merge"] = "0;31"; \
        arr["Needs Patch"] = "1;31"; \
        arr["conflicts"] = "1;33"; \
        arr["Locally Modified"] = "0;33"; \
        arr["Locally Added"] = "0;32" \
    } \
    { \
        l = <*>; \
        for (pattern in arr) { \
            gsub(".*" pattern ".*", "\033[" arr[pattern] "m&\033[0m", l); \
        } \
        print l; \
    }'"'"

alias cvsstatus='cvsstatus_command | cvsstatus_color'

Questo mostrerà solo i nomi dei file e il loro stato, ignorerà tutti i file aggiornati, rimuoverà tutti i file di progetto eclissi e gli oggetti condivisi e stamperà anche le linee con colori diversi, a seconda dello stato (ad esempio, ho arancione per modificato localmente; rosso per file, che necessita di unire; verde per aggiunto localmente, ecc.)

Se stai usando CVSNT puoi anche semplicemente fare cvs status -q che produrrà anche un output molto più breve rispetto al normale comando status (anche solo una riga per file). Con le versioni più recenti puoi persino fare cvs status -qq che salterà i file aggiornati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top