finally fixed v6 get/drop git status
After updating the worktree for an add/drop, update git's index, so git
status will not show the files as modified.
What actually happens is that the index update removes the inode
information from the index. The next git status (or similar) run
then has to do some work. It runs the clean filter.
So, this depends on the clean filter being reasonably fast and on git
not leaking memory when running it. Both problems were fixed in
a96972015d
, but only for git 2.5. Anyone
using an older git will see very expensive git status after an add/drop.
This uses the same git update-index queue as other parts of git-annex, so
the actual index update is fairly efficient. Of course, updating the index
does still have some overhead. The annex.queuesize config will control how
often the index gets updated when working on a lot of files.
This is an imperfect workaround... Added several todos about new
problems this workaround causes. Still, this seems a lot better than the
old behavior.
This commit was supported by the NSF-funded DataLad project.
This commit is contained in:
parent
06fd4657db
commit
48e9e12961
6 changed files with 76 additions and 102 deletions
|
@ -97,7 +97,7 @@ clean file = do
|
|||
<$> catKeyFile file
|
||||
liftIO . emitPointer
|
||||
=<< go
|
||||
=<< (\ld -> ingest' currbackend ld Nothing)
|
||||
=<< (\ld -> ingest' currbackend ld Nothing norestage)
|
||||
=<< lockDown cfg file
|
||||
, liftIO $ B.hPut stdout b
|
||||
)
|
||||
|
@ -111,6 +111,9 @@ clean file = do
|
|||
{ lockingFile = False
|
||||
, hardlinkFileTmp = False
|
||||
}
|
||||
-- Can't restage associated files because git add runs this and has
|
||||
-- the index locked.
|
||||
norestage = Restage False
|
||||
|
||||
shouldAnnex :: FilePath -> Annex Bool
|
||||
shouldAnnex file = do
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue