在命令行上进行cvs更新时,如何获得我的cvs冲突的摘要?

时间:2020-03-06 14:36:42  来源:igfitidea点击:

运行cvs update之后,有没有一种简单的方法来获取冲突摘要?

我正在做一个大型项目,完成一些工作后,我需要进行更新。从cvs update命令返回的更改列表长达几页,我想只看到在cvs update命令输出末尾重复的冲突列表(以" C"开头)。

该解决方案需要从命令行使用。

如果我的正常输出是:

M src/file1.txt
M src/file2.txt
cvs server: conflicts found ...
C src/file3.txt
M src/file4.txt
M src/file5.txt

我希望我的新输出为:

M src/file1.txt
M src/file2.txt
cvs server: conflicts found ...
C src/file3.txt
M src/file4.txt
M src/file5.txt

Conflict Summary:
C src/file3.txt

我希望这是一个单个命令(可能是一个简短的脚本或者别名),该命令在发生冲突时输出正常的cvs输出。

解决方案

我没有方便的CVS,CVS更新输出的确切格式是什么

我似乎记得C <文件名>
如果是这样,我们可以使用:

cvs update | tee log | grep "^C"

cvs的完整输出将保存到日志中,以供另一点使用。
然后我们对所有以'C'开头的行进行grep

希望能有所帮助。

在给出规范的情况下,我们似乎需要对Martin York的解决方案进行较小的修改(因为它仅显示冲突,而不显示常规的日志信息)。像这样的东西可能被称为" cvsupd":

tmp=${TMPDIR:-/tmp}/cvsupd.$$
trap "rm -f $tmp; exit 1" 0 1 2 3 13 15
cvs update "$@" | tee $tmp
if grep -s '^C' $tmp
then
    echo
    echo Conflict Summary:
    grep '^C' $tmp
fi
rm -f $tmp
trap 0
exit 0

trap命令确保不遗漏日志文件。它分别捕获正常信号HUP,INT,QUIT,PIPE和TERM,0捕获来自外壳的任何其他出口。