assistant: Notice on startup when the index file is corrupt, and auto-repair.
This commit is contained in:
parent
5e7e0c7dc0
commit
13108b7196
5 changed files with 39 additions and 12 deletions
|
@ -25,8 +25,10 @@ import Utility.Batch
|
|||
import Utility.NotificationBroadcaster
|
||||
import Config
|
||||
import Utility.HumanTime
|
||||
import Git.Repair
|
||||
|
||||
import Data.Time.Clock.POSIX
|
||||
import qualified Data.Set as S
|
||||
|
||||
{- This thread runs once at startup, and most other threads wait for it
|
||||
- to finish. (However, the webapp thread does not, to prevent the UI
|
||||
|
@ -36,6 +38,16 @@ sanityCheckerStartupThread startupdelay = namedThreadUnchecked "SanityCheckerSta
|
|||
{- Stale git locks can prevent commits from happening, etc. -}
|
||||
void $ repairStaleGitLocks =<< liftAnnex gitRepo
|
||||
|
||||
{- A corrupt index file can prevent the assistant from working at
|
||||
- all, so detect and repair. -}
|
||||
unlessM (liftAnnex $ inRepo $ checkIndex S.empty) $ do
|
||||
debug ["corrupt index found at startup; removing"]
|
||||
liftAnnex $ inRepo nukeIndex
|
||||
{- Normally the startup scan avoids re-staging files,
|
||||
- but with the index deleted, everything needs to be
|
||||
- restaged. -}
|
||||
modifyDaemonStatus_ $ \s -> s { forceRestage = True }
|
||||
|
||||
{- If there's a startup delay, it's done here. -}
|
||||
liftIO $ maybe noop (threadDelaySeconds . Seconds . fromIntegral . durationSeconds) startupdelay
|
||||
|
||||
|
|
|
@ -200,6 +200,9 @@ onAdd matcher file filestatus
|
|||
add matcher file
|
||||
| otherwise = noChange
|
||||
|
||||
shouldRestage :: DaemonStatus -> Bool
|
||||
shouldRestage ds = scanComplete ds || forceRestage ds
|
||||
|
||||
{- In direct mode, add events are received for both new files, and
|
||||
- modified existing files.
|
||||
-}
|
||||
|
@ -214,7 +217,7 @@ onAddDirect symlinkssupported matcher file fs = do
|
|||
- really modified, but it might have
|
||||
- just been deleted and been put back,
|
||||
- so it symlink is restaged to make sure. -}
|
||||
( ifM (scanComplete <$> getDaemonStatus)
|
||||
( ifM (shouldRestage <$> getDaemonStatus)
|
||||
( do
|
||||
link <- liftAnnex $ inRepo $ gitAnnexLink file key
|
||||
addLink file link (Just key)
|
||||
|
@ -286,7 +289,7 @@ onAddSymlink' linktarget mk isdirect file filestatus = go mk
|
|||
- links too.)
|
||||
-}
|
||||
ensurestaged (Just link) daemonstatus
|
||||
| scanComplete daemonstatus = addLink file link mk
|
||||
| shouldRestage daemonstatus = addLink file link mk
|
||||
| otherwise = case filestatus of
|
||||
Just s
|
||||
| not (afterLastDaemonRun (statusChangeTime s) daemonstatus) -> noChange
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue