From: Joey Hess Date: Tue, 10 Nov 2020 16:10:51 +0000 (-0400) Subject: add warning on add of annex link X-Git-Tag: archive/raspbian/10.20250416-2+rpi1~1^2~102^2~99 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=92b7b1964dd5ab1a4d324971dc89daf49cdea9a4;p=git-annex.git add warning on add of annex link 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. This commit was sponsored by Jake Vosloo on Patreon. --- diff --git a/Annex/Ingest.hs b/Annex/Ingest.hs index 3fa601347f..0e5a7a2452 100644 --- a/Annex/Ingest.hs +++ b/Annex/Ingest.hs @@ -21,6 +21,7 @@ module Annex.Ingest ( CheckGitIgnore(..), gitAddParams, addAnnexedFile, + addingExistingLink, ) where import Annex.Common @@ -387,3 +388,19 @@ addAnnexedFile ci matcher file key mtmp = ifM (addUnlocked matcher mi) _ -> 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 diff --git a/CHANGELOG b/CHANGELOG index 151940e525..e12ce250fd 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -3,6 +3,9 @@ git-annex (8.20201104) UNRELEASED; urgency=medium * 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 Mon, 09 Nov 2020 15:15:20 -0400 diff --git a/Command/Add.hs b/Command/Add.hs index 800b56bf87..614b406e73 100644 --- a/Command/Add.hs +++ b/Command/Add.hs @@ -27,8 +27,6 @@ import Utility.FileMode import Utility.OptParse import qualified Utility.RawFilePath as R -import System.Log.Logger (debugM) - cmd :: Command cmd = notBareRepo $ withGlobalOptions opts $ @@ -171,16 +169,17 @@ start o si file addunlockedmatcher = do 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 diff --git a/Command/Smudge.hs b/Command/Smudge.hs index 007608c9b9..ebf041018a 100644 --- a/Command/Smudge.hs +++ b/Command/Smudge.hs @@ -98,8 +98,9 @@ clean file = 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 diff --git a/doc/bugs/file_not_correctly_added.mdwn b/doc/bugs/file_not_correctly_added.mdwn index 6ef068f8c9..cb88fa9d8f 100644 --- a/doc/bugs/file_not_correctly_added.mdwn +++ b/doc/bugs/file_not_correctly_added.mdwn @@ -219,3 +219,5 @@ $ tree -a ### 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]]