CheckGitIgnore(..),
gitAddParams,
addAnnexedFile,
+ addingExistingLink,
) where
import Annex.Common
_ -> return ()
writepointer mode = liftIO $ writePointerFile file key mode
+
+{- Use with actions that add an already existing annex symlink or pointer
+ - file. The warning avoids a confusing situation where the file got copied
+ - from another git-annex repo, probably by accident. -}
+addingExistingLink :: RawFilePath -> Key -> Annex a -> Annex a
+addingExistingLink f k a = do
+ unlessM (isKnownKey k <||> inAnnex k) $ do
+ islink <- isJust <$> isAnnexLink f
+ warning $ unwords
+ [ fromRawFilePath f
+ , "is a git-annex"
+ , if islink then "symlink." else "pointer file."
+ , "Its content is not available in this repository."
+ , "(Maybe " ++ fromRawFilePath f ++ " was copied from another repository?)"
+ ]
+ a
* sync --content: Fix a bug where a file that was not preferred content
could be transferred to a remote. This happened when the file got deleted
after the sync started running.
+ * Warn when adding a annex symlink or pointer file that uses a key that
+ is not known to the repository, to prevent confusion if the user has
+ copied it from some other repository.
-- Joey Hess <id@joeyh.name> Mon, 09 Nov 2020 15:15:20 -0400
import Utility.OptParse
import qualified Utility.RawFilePath as R
-import System.Log.Logger (debugM)
-
cmd :: Command
cmd = notBareRepo $
withGlobalOptions opts $
liftIO (catchMaybeIO $ R.getSymbolicLinkStatus file) >>= \case
Just s | isSymbolicLink s -> fixuplink key
_ -> add
- fixuplink key = starting "add" (ActionItemWorkTreeFile file) si $ do
- liftIO $ debugM "add" "adding existing annex symlink to git"
- liftIO $ removeFile (fromRawFilePath file)
- addLink (checkGitIgnoreOption o) file key Nothing
- next $
- cleanup key =<< inAnnex key
- fixuppointer key = starting "add" (ActionItemWorkTreeFile file) si $ do
- liftIO $ debugM "add" "adding pointer file to git"
- Database.Keys.addAssociatedFile key =<< inRepo (toTopFilePath file)
- next $ addFile (checkGitIgnoreOption o) file
+ fixuplink key =
+ starting "add" (ActionItemWorkTreeFile file) si $
+ addingExistingLink file key $ do
+ liftIO $ removeFile (fromRawFilePath file)
+ addLink (checkGitIgnoreOption o) file key Nothing
+ next $ cleanup key =<< inAnnex key
+ fixuppointer key =
+ starting "add" (ActionItemWorkTreeFile file) si $
+ addingExistingLink file key $ do
+ Database.Keys.addAssociatedFile key =<< inRepo (toTopFilePath file)
+ next $ addFile (checkGitIgnoreOption o) file
perform :: AddOptions -> RawFilePath -> AddUnlockedMatcher -> CommandPerform
perform o file addunlockedmatcher = withOtherTmp $ \tmpdir -> do
where
go b = case parseLinkTargetOrPointerLazy b of
Just k -> do
- getMoveRaceRecovery k file
- liftIO $ L.hPut stdout b
+ addingExistingLink file k $ do
+ getMoveRaceRecovery k file
+ liftIO $ L.hPut stdout b
Nothing -> do
let fileref = Git.Ref.fileRef file
indexmeta <- catObjectMetaData fileref
### Have you had any luck using git-annex before? (Sometimes we get tired of reading bug reports all day and a lil' positive end note does wonders)
It used to work before. It seem to be broken since a system update. I have tried reinstalling `git-annex` as well as all dependencies, bit without any luck.
+
+> Added warning. [[done]] --[[Joey]]