make segmentXargs preserve order
This commit is contained in:
parent
705112903e
commit
7b32e7acb5
2 changed files with 10 additions and 7 deletions
|
@ -101,12 +101,15 @@ prop_idempotent_shellEscape s = [s] == (shellUnEscape . shellEscape) s
|
|||
prop_idempotent_shellEscape_multiword :: [String] -> Bool
|
||||
prop_idempotent_shellEscape_multiword s = s == (shellUnEscape . unwords . map shellEscape) s
|
||||
|
||||
{- Segements a list of filenames into groups that are all below the manximum
|
||||
- command-line length limit. Does not preserve order. -}
|
||||
segmentXargs :: [FilePath] -> [[FilePath]]
|
||||
segmentXargs l = go l [] 0 []
|
||||
{- Segments a list of filenames into groups that are all below the maximum
|
||||
- command-line length limit. -}
|
||||
segmentXargsOrdered :: [FilePath] -> [[FilePath]]
|
||||
segmentXargsOrdered = reverse . map reverse . segmentXargsUnordered
|
||||
|
||||
segmentXargsUnordered :: [FilePath] -> [[FilePath]]
|
||||
segmentXargsUnordered l = go l [] 0 []
|
||||
where
|
||||
go [] c _ r = c:r
|
||||
go [] c _ r = (c:r)
|
||||
go (f:fs) c accumlen r
|
||||
| len < maxlen && newlen > maxlen = go (f:fs) [] 0 (c:r)
|
||||
| otherwise = go fs (f:c) newlen r
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue