From b2d4d1df00e0a9c309130ae21ac0e1f0c2fa6ffd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= Date: Mon, 12 Jul 2010 14:59:56 +0200 Subject: [PATCH] Native subversion support. --- sunrise-commit | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/sunrise-commit b/sunrise-commit index 76b9991..5584ddc 100755 --- a/sunrise-commit +++ b/sunrise-commit @@ -52,22 +52,30 @@ find_repo() { fi fi - if [ ${SC_VCS} = svn ]; then - die 'Native subversion repositories are not supported at the moment.' - fi - sayv "Ok, we're in ${SC_VCS} working tree. Let's see what I can do around here..." } +is_whole_dir_removed() { + if [ ${SC_VCS} = svn ]; then + local flist + flist=$(find "${1}" \( -name '.svn' -prune -o ! -name "${1}" -print \)) + [ -z "${flist}" ] + elif [ ${SC_VCS%-svn} = git ]; then + [ ! -e "${1}" ] + fi +} + # Check whether we're having a clean package removal. is_package_removal() { local fields list [ -d profiles ] && fields=1-2 || fields=1 if [ ${SC_VCS%-svn} = git ]; then - list=$(git diff-index --relative --name-only --diff-filter=D HEAD \ - | cut -d / -f ${fields} | sort | uniq) + list=$(git diff-index --relative --name-only --diff-filter=D HEAD) + elif [ ${SC_VCS} = svn ]; then + list=$(svn status -q | sed -n -e 's/^D //p') fi + list=$(echo "${list}" | cut -d / -f ${fields} | sort | uniq) # 1) We have to have any removes. [ -z "${list}" ] && return 1 @@ -76,7 +84,7 @@ is_package_removal() { local dir olist for dir in ${list}; do # 2) These removes have to remove whole directories. - [ -e ${dir} ] || olist=${olist+${olist} }${dir} + is_whole_dir_removed ${dir} && olist=${olist+${olist} }${dir} done [ -z "${olist}" ] && return 1 @@ -141,6 +149,8 @@ check_for_changes() { if [ ${SC_VCS%-svn} = git ]; then output=$(git diff-index --name-only --relative HEAD "$@") + elif [ ${SC_VCS} = svn ]; then + output=$(svn status "$@") fi [ -z "${output}" ] && return 1 @@ -152,12 +162,17 @@ vcs_reset() { if [ ${SC_VCS%-svn} = git ]; then req git reset -q HEAD "${1}" git checkout -f "${1}" 2>/dev/null || req rm -f ChangeLog + elif [ ${SC_VCS} = svn ]; then + req rm -f ChangeLog + svn up ChangeLog >/dev/null 2>&1 fi } vcs_status() { if [ ${SC_VCS%-svn} = git ]; then git status -s ${1-.} "${@}" + elif [ ${SC_VCS} = svn ]; then + svn status "${@}" fi } @@ -172,6 +187,8 @@ vcs_commit() { if [ ${SC_VCS%-svn} = git ]; then exec git commit -m "${msg}" ${1+-o} "${@}" + elif [ ${SC_VCS} = svn ]; then + exec svn commit -m "${msg}" "${@}" fi } @@ -311,7 +328,7 @@ main() { if [ -z "${trivial}" ]; then sayv '...and appending to it.' - req echangelog "${commitmsg}" + echangelog "${commitmsg}" || die 'Please correct the problems pointed by echangelog.' echo fi