Joey Hess [Thu, 22 May 2025 16:56:31 +0000 (12:56 -0400)]
assistant: Avoid startup hang on active *.lock file
Avoid hanging at startup when a process has a *.lock file open in the .git
directory.
The goal is to repair stale locks, not wait for all active locks to be
closed. This was causing problems for a non-git process that has its own
lock file in a subdir of .git/.
If .git/index_lock is a non-stale lock, this does let the assistant start
up regardless. Commits by the assistant will then fail, until the process
locking the index finishes. This is not a problem, because the same
behavior could already happen if the assistant is started and then another
process locks the index.
Sponsored-by: the NIH-funded NICEMAN (ReproNim TR&D3) project
Joey Hess [Mon, 12 May 2025 18:27:32 +0000 (14:27 -0400)]
implement balanced=groupname:lackingcopies
Preferred content now supports "balanced=groupname:lackingcopies" to make
files be evenly balanced amoung as many repositories as are needed to
satisfy numcopies.
This implementation could be optimised to only call limitCheckNumCopies
once per file. Currently, it is called in two different places. Or it may
be that it would be better to add a cache to getNumMinCopiesAttr.
It might also be worth implementing :approxlackingcopies, but I'm not sure
if that has a use case. The use case for this seems to be when different
files have different numcopies values.
Joey Hess [Thu, 8 May 2025 18:59:29 +0000 (14:59 -0400)]
set fileEncoding in streamLogFileUnsafe
Windows: Fix bug that can cause git status to show annexed files as
modified when built with OsPath.
This may also have caused bugs on non-Windows, with filenames with
non-ascii characters? Unsure.
The OsPath conversion makes this one of the last few places
(hopefully) where a String is read from a Handle. All other fileEncoding
uses have been eliminated before this point by converting to reading
ByteString and using OsPath. Doing that here would be a better fix,
performance wise.
map: Avoid looping forever with mutually recursive paths between repositories accessed via ssh
Slightly unsatisfying to fix this in Git.Construct.localToUrl rather than
in Command.Map.absRepo, which is what map relies on to make repos always
use the same path form. But it was already constructing the url with the
path there, so that was the easiest place to add normalization.
map: Fix buggy handling of remotes that are bare git repositories accessed via ssh
It was treating remote paths of a remote repo as if they were local paths,
and so trying to expand git directories and so forth on them. That led to
bad results, including a path like "foo.git" getting turned into
"foo.git.git"