From 60a91f15d3d42e55f5124d2bbfa633488740b392 Mon Sep 17 00:00:00 2001 From: Nathan Phillip Brink Date: Tue, 24 Aug 2010 16:33:16 -0400 Subject: [PATCH] Mercurial support. --- sunrise-commit | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/sunrise-commit b/sunrise-commit index 7928bab..06d2019 100755 --- a/sunrise-commit +++ b/sunrise-commit @@ -46,6 +46,8 @@ find_repo() { if [ ${?} -eq 0 ]; then SC_VCS=svn + elif hg tip 2>/dev/null; then + SC_VCS=hg else local remotes remotes=$(git branch -r 2>/dev/null) @@ -72,6 +74,8 @@ is_whole_dir_removed() { [ -z "$(svn status --depth=empty -- "${1}")" ] elif [ ${SC_VCS%-svn} = git ]; then [ -z "$(git ls-files -c -- "${1}")" ] + elif [ ${SC_VCS} = hg ]; then + [ -z "$(hg status -madc "${1}")" ] fi } @@ -82,6 +86,8 @@ is_package_removal() { if [ ${SC_VCS%-svn} = git ]; then list=$(git diff-index --relative --name-only --diff-filter=D HEAD) + elif [ ${SC_VCS} = hg ]; then + list=$(hg status -nr .) elif [ ${SC_VCS} = svn ]; then list=$(svn status -q | sed -n -e 's/^D //p') fi @@ -167,6 +173,8 @@ check_for_changes() { if [ ${SC_VCS%-svn} = git ]; then output=$(git diff-index --name-only --relative HEAD -- "${@}") + elif [ ${SC_VCS} = hg ]; then + output=$(hg status -- ${1-.} "${@}") elif [ ${SC_VCS} = svn ]; then output=$(svn status -- "${@}") fi @@ -180,6 +188,9 @@ check_for_changes() { vcs_reset() { if [ ${SC_VCS%-svn} = git ]; then git checkout HEAD -- "${@}" 2>/dev/null || req rm -f -- "${@}" + elif [ ${SC_VCS} = hg ]; then + [ -n "$(hg status -au "${@}")" ] && req rm -f -- "${@}" + hg revert -- "${@}" 2>/dev/null elif [ ${SC_VCS} = svn ]; then req rm -f -- "${@}" svn revert -- "${@}" >/dev/null @@ -190,6 +201,8 @@ vcs_reset() { vcs_status() { if [ ${SC_VCS%-svn} = git ]; then git status -s -- ${1-.} "${@}" + elif [ ${SC_VCS} = hg ]; then + hg status -- ${1-.} "${@}" elif [ ${SC_VCS} = svn ]; then svn status -- "${@}" fi @@ -209,6 +222,8 @@ vcs_commit() { if [ ${SC_VCS%-svn} = git ]; then exec git commit -m "${msg}" ${1+-o} -- "${@}" + elif [ ${SC_VCS} = hg ]; then + exec hg commit -m "${MSG}" -- ${1-.} "${@}" elif [ ${SC_VCS} = svn ]; then exec svn commit -m "${msg}" -- "${@}" fi @@ -216,8 +231,8 @@ vcs_commit() { # Call VCS to update the working copy to HEAD revision. vcs_update() { - # Unlike svn, git doesn't push the changes to origin immediately, - # and that's why we don't force update to it right here. + # 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.' fi @@ -353,9 +368,9 @@ main() { ebuild-commit) check_for_changes || die 'No changes found to commit.' - # With native git repos, we do not do ChangeLogs by default... + # With DVCS repos, we do not do ChangeLogs by default... # ...at least unless they're already there. - if [ ${SC_VCS} != git -o -f ChangeLog ]; then + if [ ${SC_VCS} != git -a ${SC_VCS} != hg -o -f ChangeLog ]; then sayv 'Cleaning up the ChangeLog...' vcs_reset ChangeLog