assistant: Committing a whole lot of files at once could overflow command-line length limits and cause the commit to fail. This only happened when using the assistant in an indirect mode repository.
This commit is contained in:
parent
7cb2f91f5b
commit
2b7f3ee3f2
3 changed files with 21 additions and 2 deletions
|
@ -290,8 +290,12 @@ handleAdds havelsof delayadd cs = returnWhen (null incomplete) $ do
|
||||||
-- files. The ls-files is run on a batch of files.
|
-- files. The ls-files is run on a batch of files.
|
||||||
findnew [] = return ([], noop)
|
findnew [] = return ([], noop)
|
||||||
findnew pending@(exemplar:_) = do
|
findnew pending@(exemplar:_) = do
|
||||||
(newfiles, cleanup) <- liftAnnex $
|
let segments = segmentXargs $ map changeFile pending
|
||||||
inRepo (Git.LsFiles.notInRepo False $ map changeFile pending)
|
rs <- liftAnnex $ forM segments $ \fs ->
|
||||||
|
inRepo (Git.LsFiles.notInRepo False fs)
|
||||||
|
let (newfiles, cleanup) = foldl'
|
||||||
|
(\(l1, a1) (l2, a2) -> (l1 ++ l2, a1 >> a2))
|
||||||
|
([], return True) rs
|
||||||
-- note: timestamp info is lost here
|
-- note: timestamp info is lost here
|
||||||
let ts = changeTime exemplar
|
let ts = changeTime exemplar
|
||||||
return (map (PendingAddChange ts) newfiles, void $ liftIO cleanup)
|
return (map (PendingAddChange ts) newfiles, void $ liftIO cleanup)
|
||||||
|
|
3
debian/changelog
vendored
3
debian/changelog
vendored
|
@ -14,6 +14,9 @@ git-annex (5.20150318) UNRELEASED; urgency=medium
|
||||||
command that ignored it.)
|
command that ignored it.)
|
||||||
* Improve error message when --in @date is used and there is no
|
* Improve error message when --in @date is used and there is no
|
||||||
reflog for the git-annex branch.
|
reflog for the git-annex branch.
|
||||||
|
* assistant: Committing a whole lot of files at once could overflow
|
||||||
|
command-line length limits and cause the commit to fail. This
|
||||||
|
only happened when using the assistant in an indirect mode repository.
|
||||||
|
|
||||||
-- Joey Hess <id@joeyh.name> Thu, 19 Mar 2015 17:05:32 -0400
|
-- Joey Hess <id@joeyh.name> Thu, 19 Mar 2015 17:05:32 -0400
|
||||||
|
|
||||||
|
|
|
@ -8,3 +8,15 @@ long)
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
Probably need to tune the command length limit for !linux. --[[Joey]]
|
Probably need to tune the command length limit for !linux. --[[Joey]]
|
||||||
|
|
||||||
|
> Investigation suggests this is the problem:
|
||||||
|
|
||||||
|
inRepo (Git.LsFiles.notInRepo False $ map changeFile pending)
|
||||||
|
|
||||||
|
> If a lot of new files have been added, the `pending` list can be
|
||||||
|
> arbitrarily large, and this passes it to git ls-files as parameters.a
|
||||||
|
>
|
||||||
|
> It's not the actual commit that fails; that uses Git.Queue and xargs.
|
||||||
|
> --[[Joey]]
|
||||||
|
|
||||||
|
>> [[fixed|done]] --[[Joey]]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue