[mew-dist 28637] Re: HyperEstraierでインデックス更新中でも検索をしたい
Kazu Yamamoto ( 山本和彦 )
kazu at example.com
2008年 9月 25日 (木) 14:17:44 JST
山本です。
> HyperEstraierを検索エンジンに使っている場合で、kMでインデックスを更新
> 中に、k/で検索すると、Emacsが固まってしまいます。
>
> http://hyperestraier.sourceforge.net/uguide-ja.html#tips
> を参考に以下のパッチを作ってみました。
ありがとうございます。アイディアは素晴らしいです。
しかし、以下のようなエラーが出て止まります。
Replicating index...
Replicating index...done
Purging old messages...
estcmd: ERROR: /Users/kazu/Mail/casket_replica: database problem
Purging old messages...failed
コードを眺めてみましたが、原因は分りませんでした。
この問題が解決できたら、マージしようと思います。
もし、原因を調べて頂ける方がいるなら、以下のパッチを CVS に当てて下さい。
幾分コードを奇麗にしてあります。
--かず
Index: mewest
===================================================================
RCS file: /cvsroot/mew/mew/bin/mewest,v
retrieving revision 1.19
diff -c -r1.19 mewest
*** mewest 21 Mar 2008 03:59:58 -0000 1.19
--- mewest 25 Sep 2008 05:17:26 -0000
***************
*** 12,18 ****
RM=rm
MKDIR=mkdir
BASEDIR=${HOME}/Mail
! INDEXDIR=casket
OUTPUT=${OUTPUT:-/dev/null}
LOCK=${BASEDIR}/.mewest.lock
CYGWINENV=no
--- 12,20 ----
RM=rm
MKDIR=mkdir
BASEDIR=${HOME}/Mail
! INDEXDIR_ORG=casket
! INDEXDIR_REPLICA=casket_replica
! INDEXDIR=${INDEXDIR_ORG}
OUTPUT=${OUTPUT:-/dev/null}
LOCK=${BASEDIR}/.mewest.lock
CYGWINENV=no
***************
*** 29,42 ****
exit 1
}
! cleanup_lock () {
${RM} -fr "${LOCK}"
exit 4
}
! cleanup_lock_exit () {
echo $1
! cleanup_lock
}
# Check if environment is Cygwin.
--- 31,56 ----
exit 1
}
! cleanup () {
${RM} -fr "${LOCK}"
+ clean_up_replica
+ }
+
+ cleanup_trap () {
+ cleanup
exit 4
}
! cleanup_exit () {
echo $1
! cleanup
! exit 4
! }
!
! clean_up_replica () {
! if [ -d "${BASEDIR}/${INDEXDIR_REPLICA}" ]; then
! rm -fr "${BASEDIR}/${INDEXDIR_REPLICA}"
! fi
}
# Check if environment is Cygwin.
***************
*** 110,116 ****
shift `expr $OPTIND - 1`
TGTDIR=${1:-${HOME}/Mail}
! trap cleanup_lock 1 2 3 9 15
# create and check lock
if ${MKDIR} "${LOCK}" > /dev/null 2>&1 ; then
--- 124,130 ----
shift `expr $OPTIND - 1`
TGTDIR=${1:-${HOME}/Mail}
! trap cleanup_trap 1 2 3 9 15
# create and check lock
if ${MKDIR} "${LOCK}" > /dev/null 2>&1 ; then
***************
*** 122,134 ****
# Directory exist?
if [ ! -d "${TGTDIR}" ]; then
! cleanup_lock_exit "${TGTDIR} not found"
fi
if [ -d "${BASEDIR}/${INDEXDIR}" ]; then
echo "Purging old messages..."
${ESTCMD} purge "`path_conv \"${BASEDIR}/${INDEXDIR}\"`" "`path_conv \"${TGTDIR}\"`" > ${OUTPUT} ||\
! cleanup_lock_exit "Purging old messages...failed"
echo "Purging old messages...done"
fi
--- 136,153 ----
# Directory exist?
if [ ! -d "${TGTDIR}" ]; then
! cleanup_exit "${TGTDIR} not found"
fi
if [ -d "${BASEDIR}/${INDEXDIR}" ]; then
+ echo "Replicating index..."
+ clean_up_replica
+ cp -R "${BASEDIR}/${INDEXDIR}" "${BASEDIR}/${INDEXDIR_REPLICA}"
+ INDEXDIR=${INDEXDIR_REPLICA}
+ echo "Replicating index...done"
echo "Purging old messages..."
${ESTCMD} purge "`path_conv \"${BASEDIR}/${INDEXDIR}\"`" "`path_conv \"${TGTDIR}\"`" > ${OUTPUT} ||\
! cleanup_exit "Purging old messages...failed"
echo "Purging old messages...done"
fi
***************
*** 138,153 ****
${FIND} "`path_conv \"${TGTDIR}\"`" \
-type d -name "trash" -prune -o \
! -type d -name ${INDEXDIR} -prune -o \
-type f \( -name "[0-9]" -o -name "[0-9]*[0-9]" -o -name "[0-9]*${SUFFIX}" \) -print |\
${ESTCMD} gather -cl -fm -cm -sd -xh "`path_conv \"${BASEDIR}/${INDEXDIR}\"`" - > ${OUTPUT} ||\
! cleanup_lock_exit "Indexing new messages...failed"
echo "Indexing new messages...done"
! # clean up lock
! ${RM} -fr "${LOCK}"
!
exit 0
# Copyright (C) 2006-2007 Mew developing team.
--- 157,177 ----
${FIND} "`path_conv \"${TGTDIR}\"`" \
-type d -name "trash" -prune -o \
! -type d -name ${INDEXDIR_ORG} -prune -o \
! -type d -name ${INDEXDIR_REPLICA} -prune -o \
-type f \( -name "[0-9]" -o -name "[0-9]*[0-9]" -o -name "[0-9]*${SUFFIX}" \) -print |\
${ESTCMD} gather -cl -fm -cm -sd -xh "`path_conv \"${BASEDIR}/${INDEXDIR}\"`" - > ${OUTPUT} ||\
! cleanup_exit "Indexing new messages...failed"
echo "Indexing new messages...done"
+ if [ "${BASEDIR}/${INDEXDIR}" = "${BASEDIR}/${INDEXDIR_REPLICA}" ]; then
+ echo "Replacing old index with new one..."
+ rm -fr "${BASEDIR}/${INDEXDIR_ORG}"
+ mv "${BASEDIR}/${INDEXDIR_REPLICA}" "${BASEDIR}/${INDEXDIR_ORG}"
+ echo "Replacing old index with new one...done"
+ fi
! cleanup
exit 0
# Copyright (C) 2006-2007 Mew developing team.
Mew-dist メーリングリストの案内