git-remote-annex: Fix cloning from a special remote on a crippled filesystem
Not initializing and so deleting the bundles only causes a little more work on the first git fetch.
This commit is contained in:
parent
1ff54a3b44
commit
df29f29e0d
3 changed files with 28 additions and 2 deletions
|
@ -15,6 +15,8 @@ git-annex (10.20241032) UNRELEASED; urgency=medium
|
||||||
unversioned S3 bucket that is large enough to need pagination.
|
unversioned S3 bucket that is large enough to need pagination.
|
||||||
* S3: Use significantly less memory when importing from a
|
* S3: Use significantly less memory when importing from a
|
||||||
versioned S3 bucket.
|
versioned S3 bucket.
|
||||||
|
* git-remote-annex: Fix cloning from a special remote on a crippled
|
||||||
|
filesystem.
|
||||||
|
|
||||||
-- Joey Hess <id@joeyh.name> Mon, 11 Nov 2024 12:26:00 -0400
|
-- Joey Hess <id@joeyh.name> Mon, 11 Nov 2024 12:26:00 -0400
|
||||||
|
|
||||||
|
|
|
@ -1129,7 +1129,7 @@ specialRemoteFromUrl sab a = withTmpDir "journal" $ \tmpdir -> do
|
||||||
-- If the git-annex branch did not exist when this command started,
|
-- If the git-annex branch did not exist when this command started,
|
||||||
-- it was created empty by this command, and this command has avoided
|
-- it was created empty by this command, and this command has avoided
|
||||||
-- making any other commits to it, writing any temporary annex branch
|
-- making any other commits to it, writing any temporary annex branch
|
||||||
-- changes to thre alternateJournal, which can now be discarded.
|
-- changes to the alternateJournal, which can now be discarded.
|
||||||
--
|
--
|
||||||
-- If nothing else has written to the branch while this command was running,
|
-- If nothing else has written to the branch while this command was running,
|
||||||
-- the branch will be deleted. That allows for the git-annex branch that is
|
-- the branch will be deleted. That allows for the git-annex branch that is
|
||||||
|
@ -1152,6 +1152,11 @@ specialRemoteFromUrl sab a = withTmpDir "journal" $ \tmpdir -> do
|
||||||
-- does not contain any hooks. Since initialization installs
|
-- does not contain any hooks. Since initialization installs
|
||||||
-- hooks, have to work around that by not initializing, and
|
-- hooks, have to work around that by not initializing, and
|
||||||
-- delete the git bundle objects.
|
-- delete the git bundle objects.
|
||||||
|
--
|
||||||
|
-- Similarly, when on a crippled filesystem, doing initialization would
|
||||||
|
-- involve checking out an adjusted branch. But git clone wants to do its
|
||||||
|
-- own checkout. So no initialization is done then, and the git bundle
|
||||||
|
-- objects are deleted.
|
||||||
cleanupInitialization :: StartAnnexBranch -> FilePath -> Annex ()
|
cleanupInitialization :: StartAnnexBranch -> FilePath -> Annex ()
|
||||||
cleanupInitialization sab alternatejournaldir = void $ tryNonAsync $ do
|
cleanupInitialization sab alternatejournaldir = void $ tryNonAsync $ do
|
||||||
liftIO $ mapM_ removeFile =<< dirContents alternatejournaldir
|
liftIO $ mapM_ removeFile =<< dirContents alternatejournaldir
|
||||||
|
@ -1173,7 +1178,7 @@ cleanupInitialization sab alternatejournaldir = void $ tryNonAsync $ do
|
||||||
Nothing -> return ()
|
Nothing -> return ()
|
||||||
Just _ -> void $ tryNonAsync $
|
Just _ -> void $ tryNonAsync $
|
||||||
inRepo $ Git.Branch.delete Annex.Branch.fullname
|
inRepo $ Git.Branch.delete Annex.Branch.fullname
|
||||||
ifM (Annex.Branch.hasSibling <&&> nonbuggygitversion)
|
ifM (Annex.Branch.hasSibling <&&> nonbuggygitversion <&&> notcrippledfilesystem)
|
||||||
( do
|
( do
|
||||||
autoInitialize' (pure True) startupAnnex remoteList
|
autoInitialize' (pure True) startupAnnex remoteList
|
||||||
differences <- allDifferences <$> recordedDifferences
|
differences <- allDifferences <$> recordedDifferences
|
||||||
|
@ -1190,6 +1195,8 @@ cleanupInitialization sab alternatejournaldir = void $ tryNonAsync $ do
|
||||||
_ -> noop
|
_ -> noop
|
||||||
void $ liftIO $ tryIO $ removeDirectory (decodeBS annexobjectdir)
|
void $ liftIO $ tryIO $ removeDirectory (decodeBS annexobjectdir)
|
||||||
|
|
||||||
|
notcrippledfilesystem = not <$> probeCrippledFileSystem
|
||||||
|
|
||||||
nonbuggygitversion = liftIO $
|
nonbuggygitversion = liftIO $
|
||||||
flip notElem buggygitversions <$> Git.Version.installed
|
flip notElem buggygitversions <$> Git.Version.installed
|
||||||
buggygitversions = map Git.Version.normalize
|
buggygitversions = map Git.Version.normalize
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
[[!comment format=mdwn
|
||||||
|
username="joey"
|
||||||
|
subject="""comment 1"""
|
||||||
|
date="2024-11-19T16:18:31Z"
|
||||||
|
content="""
|
||||||
|
This is a new test.
|
||||||
|
|
||||||
|
Looks like it's found a legitimate bug in git-remote-annex. When the
|
||||||
|
filesystem is crippled, the git-annex init checks out an adjusted branch,
|
||||||
|
which here happens in the middle of git's own checkout and so legitimately
|
||||||
|
confuses git.
|
||||||
|
|
||||||
|
I can reproduce this on a FAT filesystem, cloning from eg a directory
|
||||||
|
special remote. Fixed this.
|
||||||
|
|
||||||
|
(The OSX failure is something else.)
|
||||||
|
"""]]
|
Loading…
Add table
Add a link
Reference in a new issue