]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - Rakka/Storage/Impl.hs
Exodus to GHC 6.8.1
[Rakka.git] / Rakka / Storage / Impl.hs
index dd8b7c4c504f8ad40195334b8dbd3caa7eec86bb..c3246929257076dc45ab8ce541d7551a232a1550 100644 (file)
@@ -27,23 +27,25 @@ import           Subversion.FileSystem
 import           Subversion.Repository
 import           Text.HyperEstraier hiding (WriteLock)
 
+
+logger :: String
 logger = "Rakka.Storage"
 
 
 getPage' :: Repository -> PageName -> Maybe RevNum -> IO (Maybe Page)
-getPage' repos name rev
+getPage' _repos name _rev
     = loadDefaultPage name -- FIXME
 
 
 findAllPages :: Repository -> RevNum -> IO (Set PageName)
 findAllPages _     0   = findAllDefaultPages
-findAllPages repos rev
+findAllPages _repos _rev
     = findAllDefaultPages -- FIXME
 
 
 findChangedPages :: Repository -> RevNum -> RevNum -> IO (Set PageName)
 findChangedPages repos 0      newRev = findAllPages repos newRev
-findChangedPages repos oldRev newRev
+findChangedPages _repos _oldRev _newRev
     = fail "FIXME: not impl"
 
 
@@ -66,12 +68,22 @@ startIndexManager lsdir repos mkDraft
       loop chan index
           = do req <- atomically $ readTChan chan
                case req of
+                 RebuildIndex
+                     -> do noticeM logger "Rebuilding the H.E. index..."
+                           closeDatabase index
+                           removeDirectoryRecursive indexDir
+                           index' <- openIndex indexDir revFile
+                           syncIndex' index' revFile repos mkDraft
+                           loop chan index'
+
                  SyncIndex
-                     -> syncIndex' index revFile repos mkDraft
+                     -> do syncIndex' index revFile repos mkDraft
+                           loop chan index
+
                  SearchIndex cond var
                      -> do result <- searchIndex index cond
                            atomically $ putTMVar var result
-               loop chan index
+                           loop chan index
 
 
 -- casket を R/W モードで開く。成功したらそのまま返し、失敗したら
@@ -85,8 +97,8 @@ openIndex indexDir revFile
                      return index
 
            Left err
-               -> do warningM logger ("Failed to open an H.E. index on "
-                                      ++ indexDir ++ ": " ++ show err)
+               -> do noticeM logger ("Failed to open an H.E. index on "
+                                     ++ indexDir ++ ": " ++ show err)
 
                      indexExists <- doesDirectoryExist indexDir
                      when indexExists
@@ -112,7 +124,8 @@ syncIndex' index revFile repos mkDraft
          newRev <- getCurrentRevNum repos
          debugM logger ("The repository revision is currently " ++ show newRev)
 
-         when (newRev /= oldRev) (syncIndex'' oldRev newRev)
+         when (oldRev == 0 || newRev /= oldRev)
+              $ syncIndex'' oldRev newRev
          return newRev
     where
       syncIndex'' :: RevNum -> RevNum -> IO ()