metadata: When setting metadata, do not recurse into directories by default, since that can be surprising behavior and difficult to recover from. The old behavior is available by using --force.

This commit is contained in:
Joey Hess 2015-02-10 16:06:53 -04:00
parent 36f7e5cfdf
commit f153079152
4 changed files with 30 additions and 1 deletions

View file

@ -32,6 +32,27 @@ withFilesInGit :: (FilePath -> CommandStart) -> CommandSeek
withFilesInGit a params = seekActions $ prepFiltered a $
seekHelper LsFiles.inRepo params
withFilesInGitNonRecursive :: (FilePath -> CommandStart) -> CommandSeek
withFilesInGitNonRecursive a params = ifM (Annex.getState Annex.force)
( withFilesInGit a params
, if null params
then needforce
else seekActions $ prepFiltered a (getfiles [] params)
)
where
getfiles c [] = return (reverse c)
getfiles c (p:ps) = do
(fs, cleanup) <- inRepo $ LsFiles.inRepo [p]
case fs of
[f] -> do
void $ liftIO $ cleanup
getfiles (f:c) ps
[] -> do
void $ liftIO $ cleanup
getfiles c ps
_ -> needforce
needforce = error "Not recursively setting metadata. Use --force to do that."
withFilesNotInGit :: Bool -> (FilePath -> CommandStart) -> CommandSeek
withFilesNotInGit skipdotfiles a params
| skipdotfiles = do

View file

@ -58,9 +58,12 @@ seek ps = do
getfield <- getOptionField getOption $ \ms ->
return $ either error id . mkMetaField <$> ms
now <- liftIO getPOSIXTime
let seeker = if null modmeta
then withFilesInGit
else withFilesInGitNonRecursive
withKeyOptions
(startKeys now getfield modmeta)
(withFilesInGit (whenAnnexed $ start now getfield modmeta))
(seeker $ whenAnnexed $ start now getfield modmeta)
ps
start :: POSIXTime -> Maybe MetaField -> [ModMeta] -> FilePath -> Key -> CommandStart

3
debian/changelog vendored
View file

@ -22,6 +22,9 @@ git-annex (5.20150206) UNRELEASED; urgency=medium
built with process-1.2
* bittorrent: Fix mojibake introduced in parsing arai2c progress output.
* fsck --from: If a download from a remote fails, propigate the failure.
* metadata: When setting metadata, do not recurse into directories by
default, since that can be surprising behavior and difficult to recover
from. The old behavior is available by using --force.
-- Joey Hess <id@joeyh.name> Fri, 06 Feb 2015 13:57:08 -0400

View file

@ -22,3 +22,5 @@ congrats, your old values of field are (kinda) gone.
# End of transcript or log.
"""]]
> agreed; [[fixed|done]] --[[Joey]]