diff options
author | Joey Hess <joeyh@joeyh.name> | 2015-04-02 00:19:49 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2015-04-02 00:19:49 -0400 |
commit | 5492d8f4ddbd398e0188da9daed840908d1198c0 (patch) | |
tree | 8a4642c9f4ff1e6f7629c2ba78fb20fc011f1cdb /Utility/Path.hs | |
parent | 48af4b01cd00f6f470aeb1f56f258ce2eeb060c4 (diff) |
Significantly sped up processing of large numbers of directories passed to a single git-annex command.
Diffstat (limited to 'Utility/Path.hs')
-rw-r--r-- | Utility/Path.hs | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/Utility/Path.hs b/Utility/Path.hs index 755436448..ceecf3829 100644 --- a/Utility/Path.hs +++ b/Utility/Path.hs @@ -170,17 +170,19 @@ prop_relPathDirToFile_regressionTest = same_dir_shortcurcuits_at_difference == joinPath ["..", "..", "..", "..", ".git", "annex", "objects", "18", "gk", "SHA256-foo", "SHA256-foo"] {- Given an original list of paths, and an expanded list derived from it, - - generates a list of lists, where each sublist corresponds to one of the + - partitions the expanded list, so that sublist corresponds to one of the - original paths. When the original path is a directory, any items - in the expanded list that are contained in that directory will appear in - its segment. + - + - The expanded list must have the same ordering as the original list. -} segmentPaths :: [FilePath] -> [FilePath] -> [[FilePath]] segmentPaths [] new = [new] segmentPaths [_] new = [new] -- optimisation segmentPaths (l:ls) new = found : segmentPaths ls rest where - (found, rest)=partition (l `dirContains`) new + (found, rest) = break (\p -> not (l `dirContains` p)) new {- This assumes that it's cheaper to call segmentPaths on the result, - than it would be to run the action separately with each path. In |