[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 メーリングリストの案内