summaryrefslogtreecommitdiff
path: root/Types
diff options
context:
space:
mode:
authorJoey Hess <joeyh@joeyh.name>2017-09-15 16:30:49 -0400
committerJoey Hess <joeyh@joeyh.name>2017-09-15 16:30:49 -0400
commite54a05612e1f780f393883468c7f102d788b4261 (patch)
tree481881603fa8f4ac6127cf2a7ec149bdb8de06e7 /Types
parentaf82b2229c7ec10adf599c7be9fcfd1c4662cae8 (diff)
avoid unncessary db queries when exported directory can't be empty
In rename foo/bar to foo/baz, foo can't be empty. In delete zxyyz, there's no exported directory (top doesn't count).
Diffstat (limited to 'Types')
-rw-r--r--Types/Remote.hs13
1 files changed, 7 insertions, 6 deletions
diff --git a/Types/Remote.hs b/Types/Remote.hs
index 671d90b79d..adec329733 100644
--- a/Types/Remote.hs
+++ b/Types/Remote.hs
@@ -27,8 +27,8 @@ module Types.Remote
where
import qualified Data.Map as M
-import Data.Ord
import qualified System.FilePath.Posix as Posix
+import Data.Ord
import qualified Git
import Types.Key
@@ -201,13 +201,14 @@ data ExportActions a = ExportActions
, renameExport :: Key -> ExportLocation -> ExportLocation -> a Bool
}
--- | All directories down to the ExportLocation, with the deepest ones
--- last.
+-- | All subdirectories down to the ExportLocation, with the deepest ones
+-- last. Does not include the top of the export.
exportedDirectories :: ExportLocation -> [ExportDirectory]
exportedDirectories (ExportLocation f) =
- map (ExportDirectory . Posix.joinPath . reverse) $
- subs [] $ map Posix.dropTrailingPathSeparator $
- Posix.splitPath $ Posix.takeDirectory f
+ map (ExportDirectory . Posix.joinPath . reverse) (subs [] dirs)
where
subs _ [] = []
subs ps (d:ds) = (d:ps) : subs (d:ps) ds
+
+ dirs = map Posix.dropTrailingPathSeparator $
+ reverse $ drop 1 $ reverse $ Posix.splitPath f