use TopFilePath for associated files
Fixes several bugs with updates of pointer files. When eg, running git annex drop --from localremote it was updating the pointer file in the local repository, not the remote. Also, fixes drop ../foo when run in a subdir, and probably lots of other problems. Test suite drops from ~30 to 11 failures now. TopFilePath is used to force thinking about what the filepath is relative to. The data stored in the sqlite db is still just a plain string, and TopFilePath is a newtype, so there's no overhead involved in using it in DataBase.Keys.
This commit is contained in:
parent
f3d6f9acb5
commit
b3d60ca285
11 changed files with 60 additions and 38 deletions
|
@ -21,6 +21,7 @@ import Utility.InodeCache
|
|||
import qualified Database.Keys
|
||||
import Annex.Ingest
|
||||
import Logs.Location
|
||||
import Git.FilePath
|
||||
|
||||
cmd :: Command
|
||||
cmd = notDirect $ withGlobalOptions annexedMatchingOptions $
|
||||
|
@ -85,7 +86,9 @@ performNew file key filemodified = do
|
|||
-- Try to repopulate obj from an unmodified associated file.
|
||||
repopulate obj
|
||||
| filemodified = modifyContent obj $ do
|
||||
fs <- Database.Keys.getAssociatedFiles key
|
||||
g <- Annex.gitRepo
|
||||
fs <- mapM (`fromTopFilePath` g)
|
||||
<$> Database.Keys.getAssociatedFiles key
|
||||
mfile <- firstM (isUnmodified key) fs
|
||||
liftIO $ nukeFile obj
|
||||
case mfile of
|
||||
|
@ -99,7 +102,7 @@ performNew file key filemodified = do
|
|||
|
||||
cleanupNew :: FilePath -> Key -> CommandCleanup
|
||||
cleanupNew file key = do
|
||||
Database.Keys.removeAssociatedFile key file
|
||||
Database.Keys.removeAssociatedFile key =<< inRepo (toTopFilePath file)
|
||||
return True
|
||||
|
||||
startOld :: FilePath -> CommandStart
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue