add --force-small: Send all non-regular files through addFile
authorKyle Meyer <kyle@kyleam.com>
Mon, 23 Mar 2020 19:45:15 +0000 (15:45 -0400)
committerJoey Hess <joeyh@joeyh.name>
Thu, 26 Mar 2020 17:14:16 +0000 (13:14 -0400)
Running `git annex add --force-small` on a modified submodule fails
when the submodule path is fed to hash-object.  This failure is
unlikely to be triggered by a caller passing a submodule explicitly to
`git annex add` because there's nothing useful that annex-add can do
with a submodule.  A more likely scenario for hitting this failure is
that the caller passes "." or a subdirectory to `annex-add` while a
submodule underneath the specified path happens to be modified.

addSmallOverridden already routes symbolic links through addFile
rather than using the custom hash-object/update-index call.  The
latter is valid only for regular files, so extend this condition so
that everything that isn't a regular file goes through addFile.  Doing
so avoids the above error because submodules come in as directories.

Command/Add.hs

index 56e6fb2361dbe75eaa38074fa790bddc5e5e7b06..72aae5f3c6749fa2fab2aff36ed2b8df7f531146 100644 (file)
@@ -108,7 +108,7 @@ addSmallOverridden file = do
        showNote "adding content to git repository"
        let file' = fromRawFilePath file
        s <- liftIO $ getSymbolicLinkStatus file'
-       if isSymbolicLink s
+       if not (isRegularFile s)
                then addFile file 
                else do
                        -- Can't use addFile because the clean filter will