<$> getFileSize lf
getsizes = liftIO $ catMaybes <$> mapM getsize lockfiles
go [] = return ()
- go l = ifM (liftIO $ null <$> Lsof.query ("--" : map (fromOsPath . fst) l))
- ( do
- waitforit "to check stale git lock file"
- l' <- getsizes
- if l' == l
- then liftIO $ mapM_ (removeWhenExistsWith removeFile . fst) l
- else go l'
- , do
- waitforit "for git lock file writer"
- go =<< getsizes
- )
- waitforit why = do
- debug ["Waiting for 60 seconds", why]
+ go l = whenM (liftIO $ null <$> Lsof.query ("--" : map (fromOsPath . fst) l)) $ do
+ debug ["Waiting for 60 seconds to check stale git lock file"]
liftIO $ threadDelaySeconds $ Seconds 60
+ l' <- getsizes
+ if l' == l
+ then liftIO $ mapM_ (removeWhenExistsWith removeFile . fst) l
+ else go l'
+git-annex (10.20250521) UNRELEASED; urgency=medium
+
+ * assistant: Avoid hanging at startup when a process has a *.lock file
+ open in the .git directory.
+
+ -- Joey Hess <id@joeyh.name> Thu, 22 May 2025 12:43:38 -0400
+
git-annex (10.20250520) upstream; urgency=medium
* Preferred content now supports "balanced=groupname:lackingcopies"
[[!meta author=yoh]]
[[!tag projects/repronim]]
+
+> [[fixed|done]] --[[Joey]]
--- /dev/null
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 4"""
+ date="2025-05-22T16:19:35Z"
+ content="""
+It's treating `*.lock` as git lock files. Any other filename won't have the
+problem.
+
+[[!commit 635c9a1549f28992b6ae370f6e8687170c971525]] has a rationalle for
+that, that git has other lock files than index.lock. It does seem to me to
+be doubtful that any other stale git lock than index.lock would cause
+significant trouble to the assistant.
+
+But this code is supposed to deal with stale locks. This lock is not
+stale; it has a process holding it open. So the assistant has no
+reason to wait on it. I've removed the wait loop.
+"""]]