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"
That was a fix for git remotes that use an url with a user name that is URL encoded
For example, "ssh://%6Aoey@localhost/path"
Of course, this is more likely to occur if the username is not all ASCII
like mine is.
And it could also happen when a scp-style url's username contains a non-ASCII
character, which gets URL encoded when git-annex internally converts that
to a ssh:// url.
* Support git remotes that use an url with a user name that is URL encoded.
* Fix git-lfs special remote ssh endpoint discovery when the repository
path is URL encoded.
In the previous commit, Git.Url.host was made to do URL decoding. That made
me wonder, what about URL encoded username and path? And so to these two
additional fixes. Note that Git.Url.authority remains URL encoded. That
seems ok given how it's used.
Which is a per-remote version of the annex.web-options config.
Had to plumb RemoteGitConfig through to getUrlOptions. In cases where a
special remote does not use curl, there was no need to do that and I used
Nothing instead.
In the case of the addurl and importfeed commands, it seemed best to say
that running these commands is not using the web special remote per se,
so the config is not used for those commands.