diff --git a/sunrise-commit b/sunrise-commit index 17377fa..8a26783 100755 --- a/sunrise-commit +++ b/sunrise-commit @@ -56,6 +56,8 @@ find_repo() { SC_VCS=svn elif hg tip >/dev/null 2>&1; then SC_VCS=hg + elif cvs status -l >/dev/null 2>&1; then + SC_VCS=cvs else local remotes remotes=$(git branch -r 2>/dev/null) @@ -83,6 +85,8 @@ is_whole_dir_removed() { [ -z "$(git ls-files -c -- "${1}")" ] elif [ ${SC_VCS} = hg ]; then [ -z "$(hg status -madc "${1}")" ] + elif [ ${SC_VCS} = cvs ]; then + [ -z "$(cvs -Q status -R "${1}" 2>/dev/null | grep -e '^File:' | grep -v -e 'Status: Locally Removed$')" ] fi } @@ -95,6 +99,8 @@ is_package_removal() { list=$(git diff-index --relative --name-only --diff-filter=D HEAD) elif [ ${SC_VCS} = hg ]; then list=$(hg status -nr .) + elif [ ${SC_VCS} = cvs ]; then + list=$(cvs -n -q up 2>/dev/null | sed -n -e 's/^R//p') elif [ ${SC_VCS} = svn ]; then list=$(svn status -q | sed -n -e 's/^D //p') fi @@ -188,6 +194,9 @@ check_for_changes() { output=$(hg status -- ${1-.} "${@}") elif [ ${SC_VCS} = svn ]; then output=$(svn status -- "${@}") + elif [ ${SC_VCS} = cvs ]; then + # `U' indicates a remote, incomming update. + output=$(cvs -n -q update -R -- "${@}" 2>/dev/null | grep -v -e '^U') fi [ -z "${output}" ] && return 1 @@ -205,6 +214,11 @@ vcs_reset() { elif [ ${SC_VCS} = svn ]; then req rm -f -- "${@}" svn revert -- "${@}" >/dev/null + elif [ ${SC_VCS} = cvs ]; then + # cvs update -C does exist, but it sometimes doesn't + # work. + req rm -f -- "${@}" + cvs update -- "${@}" >/dev/null 2>&1 fi } @@ -216,6 +230,8 @@ vcs_status() { hg status -- ${1-.} "${@}" elif [ ${SC_VCS} = svn ]; then svn status -- "${@}" + elif [ ${SC_VCS} = cvs ]; then + cvs -n -q up -- "${@}" 2>/dev/null | grep -v -e '^U' fi } @@ -237,6 +253,8 @@ vcs_commit() { exec hg commit -m "${msg}" -- ${1-.} "${@}" elif [ ${SC_VCS} = svn ]; then exec svn commit -m "${msg}" -- "${@}" + elif [ ${SC_VCS} = cvs ]; then + exec cvs commit -m "${msg}" -- "${@}" fi } @@ -244,8 +262,8 @@ vcs_commit() { vcs_update() { # Unlike svn, DVCSes don't push the changes to their origins immediately. # That's why we don't force update to it right here. - if [ ${SC_VCS} = svn ]; then - svn up -- "${@}" || say 'Warning: svn up failed, trying to proceed anyway.' + if [ ${SC_VCS} = svn -o ${SC_VCS} = cvs ]; then + ${SC_VCS} up -- "${@}" || say "Warning: ${SC_VCS} up failed, trying to proceed anyway." fi } @@ -381,7 +399,7 @@ main() { # With DVCS repos, we do not do ChangeLogs by default... # ...at least unless they're already there. - if [ ${SC_VCS#git-} = svn -o -f ChangeLog ]; then + if [ ${SC_VCS#git-} = svn -o ${SC_VCS#git-} = cvs -o -f ChangeLog ]; then sayv 'Cleaning up the ChangeLog...' vcs_reset ChangeLog diff --git a/sunrise-commit.1 b/sunrise-commit.1 index 463750c..3a5fb52 100644 --- a/sunrise-commit.1 +++ b/sunrise-commit.1 @@ -23,13 +23,13 @@ performing the actual commit, it performs the following tasks: \- prepends the commit message with package name(s). -The script supports GIT, Mercurial, and Subversion repositories. For -the latter, it supports native checkouts as well as git-svn. +The script supports CVS, GIT, Mercurial, and Subversion repositories. +For the latter, it supports native checkouts as well as git-svn. Please note that when used with DVCSes, this script only performs the actual commit. (It does not push or dcommit it to the repository). -However, native Subversion commits are sent directly to the remote -repository (due to limitations of Subversion). +However, native Subversion and CVS commits are sent directly to the remote +repository (due to limitations of non-distributed VCSes). .SH OPTIONS @@ -55,8 +55,8 @@ sequences). .IP "\fB-d\fP, \fB--noupdate\fP" Do not update and rebase the repository before proceeding with the -commit. This option only applies to Subversion repositories. It makes -no sense to automatically pull from remote DVCS repositories. +commit. This option only applies to Subversion and CVS repositories. +It makes no sense to automatically pull from remote DVCS repositories. .IP "\fB-f\fP, \fB--force\fP" @@ -162,6 +162,7 @@ Michal Gorny .BR ebuild (5), .BR echangelog (1), +.BR cvs (1), .BR git (1), .BR hg (1), .BR repoman (1),