From d48c28bfffeda0a7b958f5312fa15dc404c5b8c1 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 8 Nov 2017 14:38:24 -0400 Subject: Fix directory special remote's cleanup of empty export directories. Was trying to rmdir the file, which had already been deleted, and when that failed, it skipped trying to delete the parent directories. Noticed the bug through testremote, but it can't itself detect such problems as there is no enumeration in the API. This commit was sponsored by Brock Spratlen on Patreon. --- CHANGELOG | 1 + Remote/Directory.hs | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index faa05e3d2..ae02be0a9 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -10,6 +10,7 @@ git-annex (6.20171027) UNRELEASED; urgency=medium Thanks, Eric Siegerman * Makefile improvement for BUILDER=stack, use stack to run ghc. * testremote: Test exporttree. + * Fix directory special remote's cleanup of empty export directories. -- Joey Hess Mon, 30 Oct 2017 12:01:45 -0400 diff --git a/Remote/Directory.hs b/Remote/Directory.hs index 406af0fdc..f44961ce2 100644 --- a/Remote/Directory.hs +++ b/Remote/Directory.hs @@ -276,10 +276,11 @@ renameExportM d _k oldloc newloc = liftIO $ catchBoolIO $ do exportPath :: FilePath -> ExportLocation -> FilePath exportPath d loc = d fromExportLocation loc -{- Removes the ExportLocation directory and its parents, so long as +{- Removes the ExportLocation's parent directory and its parents, so long as - they're empty, up to but not including the topdir. -} removeExportLocation :: FilePath -> ExportLocation -> IO () -removeExportLocation topdir loc = go (Just $ fromExportLocation loc) (Right ()) +removeExportLocation topdir loc = + go (Just $ takeDirectory $ fromExportLocation loc) (Right ()) where go _ (Left _e) = return () go Nothing _ = return () -- cgit v1.2.3