Is there a way to get a short CVS status from command line?
Asked Answered
V

4

27

When doing a cvs update, you get a nice summary of the state of the repository, for example:

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

Is there a way to get this without actually updating? I know there is cvs status, but this is way to verbose:

===================================================================
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)

I could of course make a script to do the transformation from the latter to the former, but it seems a waste of time since cvs can obviously produce the former.

Verlaverlee answered 17/10, 2008 at 11:37 Comment(0)
L
40

You can use the -n flag to get the update output without actually updating the files. You can also add -q (quiet) to suppress any server messages.

cvs -q -n update
Latif answered 17/10, 2008 at 11:40 Comment(2)
"cvs -n update" is a great solution for previewing a CVS update (thank you), but doesn't seem to work with tags. For example, "cvs -n update -dP -r DRUPAL-5-15" gives "cvs [update aborted]: no such tag `DRUPAL-5-13'", but the tag is definitely valid, as "cvs update -dP -r DRUPAL-5-15" works fine.Willett
This is very helpful. I whimper with git-withdrawl a bit less after adding alias cvs-st="cvs -q -n update"Schnorkle
E
4

@jmcnamara: Good tip!

And all this time I've been using this bash script:

cvs -q status "$@" | grep '^[?F]' | grep -v 'Up-to-date'
Epigoni answered 17/10, 2008 at 12:17 Comment(0)
S
4

I have some aliases, that may be useful for somebody:

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 = $0; \
        for (pattern in arr) { \
            gsub(".*" pattern ".*", "\033[" arr[pattern] "m&\033[0m", l); \
        } \
        print l; \
    }'"'"

alias cvsstatus='cvsstatus_command | cvsstatus_color'

This will display only file names and their status, ignore all up-to-date files, remove all eclipse project files and shared objects and will also print the lines in different colors, depending on the status (for example, I have orange for locally modified; red for files, needing merge; green for locally added, etc)

Stater answered 21/11, 2013 at 13:20 Comment(1)
Excellent approach! Exactly what I was looking for.Fendig
D
2

If you're using CVSNT you can also just do cvs status -q which will also produce much briefer output than the regular status command (also just one line per file). With more recent versions you can even do cvs status -qq which will skip the up-to-date files.

Demonolatry answered 6/11, 2008 at 23:25 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.