diff options
40 files changed, 168 insertions, 97 deletions
diff --git a/Annex/View.hs b/Annex/View.hs index 7c187befd..5cf21cdfe 100644 --- a/Annex/View.hs +++ b/Annex/View.hs @@ -348,7 +348,7 @@ applyView' mkviewedfile getfilemetadata view = do void clean where genviewedfiles = viewedFiles view mkviewedfile -- enables memoization - go uh hasher f (Just (k, _)) = do + go uh hasher f (Just k) = do metadata <- getCurrentMetaData k let metadata' = getfilemetadata f `unionMetaData` metadata forM_ (genviewedfiles f metadata') $ \fv -> do diff --git a/Assistant/Threads/TransferScanner.hs b/Assistant/Threads/TransferScanner.hs index 6df9b1e18..daced8d21 100644 --- a/Assistant/Threads/TransferScanner.hs +++ b/Assistant/Threads/TransferScanner.hs @@ -151,7 +151,7 @@ expensiveScan urlrenderer rs = unless onlyweb $ batch <~> do enqueue f (r, t) = queueTransferWhenSmall "expensive scan found missing object" (Just f) t r - findtransfers f unwanted (key, _) = do + findtransfers f unwanted key = do {- The syncable remotes may have changed since this - scan began. -} syncrs <- syncDataRemotes <$> getDaemonStatus diff --git a/Assistant/Threads/Watcher.hs b/Assistant/Threads/Watcher.hs index 97ccf083e..0ed1bd22f 100644 --- a/Assistant/Threads/Watcher.hs +++ b/Assistant/Threads/Watcher.hs @@ -271,7 +271,7 @@ onAddSymlink :: Bool -> Handler onAddSymlink isdirect file filestatus = unlessIgnored file $ do linktarget <- liftIO (catchMaybeIO $ readSymbolicLink file) kv <- liftAnnex (Backend.lookupFile file) - onAddSymlink' linktarget (fmap fst kv) isdirect file filestatus + onAddSymlink' linktarget kv isdirect file filestatus onAddSymlink' :: Maybe String -> Maybe Key -> Bool -> Handler onAddSymlink' linktarget mk isdirect file filestatus = go mk diff --git a/Backend.hs b/Backend.hs index 38314687a..dded0d005 100644 --- a/Backend.hs +++ b/Backend.hs @@ -1,6 +1,6 @@ {- git-annex key/value backends - - - Copyright 2010,2013 Joey Hess <joey@kitenet.net> + - Copyright 2010-2014 Joey Hess <joey@kitenet.net> - - Licensed under the GNU GPL version 3 or higher. -} @@ -10,6 +10,7 @@ module Backend ( orderedList, genKey, lookupFile, + getBackend, isAnnexLink, chooseBackend, lookupBackendName, @@ -74,7 +75,7 @@ genKey' (b:bs) source = do | c == '\n' = '_' | otherwise = c -{- Looks up the key and backend corresponding to an annexed file, +{- Looks up the key corresponding to an annexed file, - by examining what the file links to. - - In direct mode, there is often no link on disk, in which case @@ -82,7 +83,7 @@ genKey' (b:bs) source = do - on disk still takes precedence over what was committed to git in direct - mode. -} -lookupFile :: FilePath -> Annex (Maybe (Key, Backend)) +lookupFile :: FilePath -> Annex (Maybe Key) lookupFile file = do mkey <- isAnnexLink file case mkey of @@ -92,14 +93,15 @@ lookupFile file = do , return Nothing ) where - makeret k = let bname = keyBackendName k in - case maybeLookupBackendName bname of - Just backend -> return $ Just (k, backend) - Nothing -> do - warning $ - "skipping " ++ file ++ - " (unknown backend " ++ bname ++ ")" - return Nothing + makeret k = return $ Just k + +getBackend :: FilePath -> Key -> Annex (Maybe Backend) +getBackend file k = let bname = keyBackendName k in + case maybeLookupBackendName bname of + Just backend -> return $ Just backend + Nothing -> do + warning $ "skipping " ++ file ++ " (unknown backend " ++ bname ++ ")" + return Nothing {- Looks up the backend that should be used for a file. - That can be configured on a per-file basis in the gitattributes file. -} diff --git a/CmdLine/GitAnnex.hs b/CmdLine/GitAnnex.hs index 523c3f055..c37e44a2d 100644 --- a/CmdLine/GitAnnex.hs +++ b/CmdLine/GitAnnex.hs @@ -49,6 +49,7 @@ import qualified Command.Unlock import qualified Command.Lock import qualified Command.PreCommit import qualified Command.Find +import qualified Command.FindRef import qualified Command.Whereis import qualified Command.List import qualified Command.Log @@ -158,6 +159,7 @@ cmds = concat , Command.DropUnused.def , Command.AddUnused.def , Command.Find.def + , Command.FindRef.def , Command.Whereis.def , Command.List.def , Command.Log.def diff --git a/CmdLine/Seek.hs b/CmdLine/Seek.hs index abbe52af8..431b2e118 100644 --- a/CmdLine/Seek.hs +++ b/CmdLine/Seek.hs @@ -19,6 +19,8 @@ import qualified Annex import qualified Git import qualified Git.Command import qualified Git.LsFiles as LsFiles +import qualified Git.LsTree as LsTree +import Git.FilePath import qualified Limit import CmdLine.Option import CmdLine.Action @@ -49,6 +51,20 @@ withFilesNotInGit skipdotfiles a params go l = seekActions $ prepFiltered a $ return $ concat $ segmentPaths params l +withFilesInRefs :: (FilePath -> Key -> CommandStart) -> CommandSeek +withFilesInRefs a = mapM_ go + where + go r = do + matcher <- Limit.getMatcher + l <- inRepo $ LsTree.lsTree (Git.Ref r) + forM_ l $ \i -> do + let f = getTopFilePath $ LsTree.file i + v <- catKey (Git.Ref $ LsTree.sha i) (LsTree.mode i) + case v of + Nothing -> noop + Just k -> whenM (matcher $ MatchingKey k) $ + void $ commandAction $ a f k + withPathContents :: ((FilePath, FilePath) -> CommandStart) -> CommandSeek withPathContents a params = seekActions $ map a . concat <$> liftIO (mapM get params) diff --git a/CmdLine/Usage.hs b/CmdLine/Usage.hs index 1d0bba954..6e0a1ca80 100644 --- a/CmdLine/Usage.hs +++ b/CmdLine/Usage.hs @@ -93,6 +93,8 @@ paramFormat :: String paramFormat = "FORMAT" paramFile :: String paramFile = "FILE" +paramRef :: String +paramRef = "REF" paramGroup :: String paramGroup = "GROUP" paramExpression :: String diff --git a/Command.hs b/Command.hs index 3faa4053c..fc440f291 100644 --- a/Command.hs +++ b/Command.hs @@ -70,11 +70,11 @@ stopUnless :: Annex Bool -> Annex (Maybe a) -> Annex (Maybe a) stopUnless c a = ifM c ( a , stop ) {- Modifies an action to only act on files that are already annexed, - - and passes the key and backend on to it. -} -whenAnnexed :: (FilePath -> (Key, Backend) -> Annex (Maybe a)) -> FilePath -> Annex (Maybe a) + - and passes the key on to it. -} +whenAnnexed :: (FilePath -> Key -> Annex (Maybe a)) -> FilePath -> Annex (Maybe a) whenAnnexed a file = ifAnnexed file (a file) (return Nothing) -ifAnnexed :: FilePath -> ((Key, Backend) -> Annex a) -> Annex a -> Annex a +ifAnnexed :: FilePath -> (Key -> Annex a) -> Annex a -> Annex a ifAnnexed file yes no = maybe no yes =<< Backend.lookupFile file isBareRepo :: Annex Bool diff --git a/Command/Add.hs b/Command/Add.hs index f9e2b3342..46a873151 100644 --- a/Command/Add.hs +++ b/Command/Add.hs @@ -73,7 +73,7 @@ start file = ifAnnexed file addpresent add | otherwise -> do showStart "add" file next $ perform file - addpresent (key, _) = ifM isDirect + addpresent key = ifM isDirect ( ifM (goodContent key file) ( stop , add ) , fixup key ) diff --git a/Command/AddUrl.hs b/Command/AddUrl.hs index b108be507..7ffb86997 100644 --- a/Command/AddUrl.hs +++ b/Command/AddUrl.hs @@ -96,7 +96,7 @@ performQuvi :: Bool -> URLString -> URLString -> FilePath -> CommandPerform performQuvi relaxed pageurl videourl file = ifAnnexed file addurl geturl where quviurl = setDownloader pageurl QuviDownloader - addurl (key, _backend) = next $ cleanup quviurl file key Nothing + addurl key = next $ cleanup quviurl file key Nothing geturl = next $ addUrlFileQuvi relaxed quviurl videourl file #endif @@ -130,7 +130,7 @@ perform :: Bool -> URLString -> FilePath -> CommandPerform perform relaxed url file = ifAnnexed file addurl geturl where geturl = next $ addUrlFile relaxed url file - addurl (key, _backend) + addurl key | relaxed = do setUrlPresent key url next $ return True diff --git a/Command/Copy.hs b/Command/Copy.hs index 29606061d..ae254aae2 100644 --- a/Command/Copy.hs +++ b/Command/Copy.hs @@ -30,9 +30,9 @@ seek ps = do {- A copy is just a move that does not delete the source file. - However, --auto mode avoids unnecessary copies, and avoids getting or - sending non-preferred content. -} -start :: Maybe Remote -> Maybe Remote -> FilePath -> (Key, Backend) -> CommandStart -start to from file (key, backend) = stopUnless shouldCopy $ - Command.Move.start to from False file (key, backend) +start :: Maybe Remote -> Maybe Remote -> FilePath -> Key -> CommandStart +start to from file key = stopUnless shouldCopy $ + Command.Move.start to from False file key where shouldCopy = checkAuto (check <||> numCopiesCheck file key (<)) check = case to of diff --git a/Command/Direct.hs b/Command/Direct.hs index 47f622a81..9727549b6 100644 --- a/Command/Direct.hs +++ b/Command/Direct.hs @@ -47,7 +47,7 @@ perform = do void $ liftIO clean next cleanup where - go = whenAnnexed $ \f (k, _) -> do + go = whenAnnexed $ \f k -> do r <- toDirectGen k f case r of Nothing -> noop diff --git a/Command/Drop.hs b/Command/Drop.hs index 71f19a828..4bac07a53 100644 --- a/Command/Drop.hs +++ b/Command/Drop.hs @@ -34,8 +34,8 @@ seek ps = do from <- getOptionField dropFromOption Remote.byNameWithUUID withFilesInGit (whenAnnexed $ start from) ps -start :: Maybe Remote -> FilePath -> (Key, Backend) -> CommandStart -start from file (key, _) = checkDropAuto from file key $ \numcopies -> +start :: Maybe Remote -> FilePath -> Key -> CommandStart +start from file key = checkDropAuto from file key $ \numcopies -> stopUnless (checkAuto $ wantDrop False (Remote.uuid <$> from) (Just key) (Just file)) $ case from of Nothing -> startLocal (Just file) numcopies key Nothing diff --git a/Command/Find.hs b/Command/Find.hs index c6a32a944..c800933f9 100644 --- a/Command/Find.hs +++ b/Command/Find.hs @@ -19,8 +19,10 @@ import Utility.DataUnits import Types.Key def :: [Command] -def = [noCommit $ noMessages $ withOptions [formatOption, print0Option, jsonOption] $ - command "find" paramPaths seek SectionQuery "lists available files"] +def = [mkCommand $ command "find" paramPaths seek SectionQuery "lists available files"] + +mkCommand :: Command -> Command +mkCommand = noCommit . noMessages . withOptions [formatOption, print0Option, jsonOption] formatOption :: Option formatOption = fieldOption [] "format" paramFormat "control format of output" @@ -39,8 +41,8 @@ seek ps = do format <- getFormat withFilesInGit (whenAnnexed $ start format) ps -start :: Maybe Utility.Format.Format -> FilePath -> (Key, Backend) -> CommandStart -start format file (key, _) = do +start :: Maybe Utility.Format.Format -> FilePath -> Key -> CommandStart +start format file key = do -- only files inAnnex are shown, unless the user has requested -- others via a limit whenM (limited <||> inAnnex key) $ diff --git a/Command/FindRef.hs b/Command/FindRef.hs new file mode 100644 index 000000000..26007f7c0 --- /dev/null +++ b/Command/FindRef.hs @@ -0,0 +1,20 @@ +{- git-annex command + - + - Copyright 2014 Joey Hess <joey@kitenet.net> + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Command.FindRef where + +import Command +import qualified Command.Find as Find + +def :: [Command] +def = [Find.mkCommand $ command "findref" paramRef seek SectionPlumbing + "lists files in a git ref"] + +seek :: CommandSeek +seek refs = do + format <- Find.getFormat + Find.start format `withFilesInRefs` refs diff --git a/Command/Fix.hs b/Command/Fix.hs index f730226e3..0c2bf5942 100644 --- a/Command/Fix.hs +++ b/Command/Fix.hs @@ -26,8 +26,8 @@ seek :: CommandSeek seek = withFilesInGit $ whenAnnexed start {- Fixes the symlink to an annexed file. -} -start :: FilePath -> (Key, Backend) -> CommandStart -start file (key, _) = do +start :: FilePath -> Key -> CommandStart +start file key = do link <- inRepo $ gitAnnexLink file key stopUnless ((/=) (Just link) <$> liftIO (catchMaybeIO $ readSymbolicLink file)) $ do showStart "fix" file diff --git a/Command/Fsck.hs b/Command/Fsck.hs index 88a9915c4..a17662d62 100644 --- a/Command/Fsck.hs +++ b/Command/Fsck.hs @@ -104,12 +104,16 @@ getIncremental = do resetStartTime return True -start :: Maybe Remote -> Incremental -> FilePath -> (Key, Backend) -> CommandStart -start from inc file (key, backend) = do - numcopies <- getFileNumCopies file - case from of - Nothing -> go $ perform key file backend numcopies - Just r -> go $ performRemote key file backend numcopies r +start :: Maybe Remote -> Incremental -> FilePath -> Key -> CommandStart +start from inc file key = do + v <- Backend.getBackend file key + case v of + Nothing -> stop + Just backend -> do + numcopies <- getFileNumCopies file + case from of + Nothing -> go $ perform key file backend numcopies + Just r -> go $ performRemote key file backend numcopies r where go = runFsck inc file key diff --git a/Command/Get.hs b/Command/Get.hs index bef466724..d0be20018 100644 --- a/Command/Get.hs +++ b/Command/Get.hs @@ -31,8 +31,8 @@ seek ps = do (withFilesInGit $ whenAnnexed $ start from) ps -start :: Maybe Remote -> FilePath -> (Key, Backend) -> CommandStart -start from file (key, _) = start' expensivecheck from key (Just file) +start :: Maybe Remote -> FilePath -> Key -> CommandStart +start from file key = start' expensivecheck from key (Just file) where expensivecheck = checkAuto (numCopiesCheck file key (<) <||> wantGet False (Just key) (Just file)) diff --git a/Command/ImportFeed.hs b/Command/ImportFeed.hs index 3f629af6e..80e59b739 100644 --- a/Command/ImportFeed.hs +++ b/Command/ImportFeed.hs @@ -194,7 +194,7 @@ performDownload relaxed cache todownload = case location todownload of in d </> show n ++ "_" ++ base tryanother = makeunique url (n + 1) file alreadyexists = liftIO $ isJust <$> catchMaybeIO (getSymbolicLinkStatus f) - checksameurl (k, _) = ifM (elem url <$> getUrls k) + checksameurl k = ifM (elem url <$> getUrls k) ( return Nothing , tryanother ) diff --git a/Command/Indirect.hs b/Command/Indirect.hs index c0dd57959..acf40c974 100644 --- a/Command/Indirect.hs +++ b/Command/Indirect.hs @@ -74,7 +74,7 @@ perform = do case r of Just s | isSymbolicLink s -> void $ flip whenAnnexed f $ - \_ (k, _) -> do + \_ k -> do removeInodeCache k removeAssociatedFiles k return Nothing diff --git a/Command/List.hs b/Command/List.hs index 1fa206405..d038d6deb 100644 --- a/Command/List.hs +++ b/Command/List.hs @@ -60,8 +60,8 @@ getList = ifM (Annex.getFlag $ optionName allrepos) printHeader :: [(UUID, RemoteName, TrustLevel)] -> Annex () printHeader l = liftIO $ putStrLn $ header $ map (\(_, n, t) -> (n, t)) l -start :: [(UUID, RemoteName, TrustLevel)] -> FilePath -> (Key, Backend) -> CommandStart -start l file (key, _) = do +start :: [(UUID, RemoteName, TrustLevel)] -> FilePath -> Key -> CommandStart +start l file key = do ls <- S.fromList <$> keyLocations key liftIO $ putStrLn $ format (map (\(u, _, t) -> (t, S.member u ls)) l) file stop diff --git a/Command/Log.hs b/Command/Log.hs index 84583a93a..b0109f117 100644 --- a/Command/Log.hs +++ b/Command/Log.hs @@ -64,9 +64,15 @@ seek ps = do Annex.getField (optionName o) use o v = [Param ("--" ++ optionName o), Param v] -start :: M.Map UUID String -> TimeZone -> [CommandParam] -> Bool -> - FilePath -> (Key, Backend) -> CommandStart -start m zone os gource file (key, _) = do +start + :: M.Map UUID String + -> TimeZone + -> [CommandParam] + -> Bool + -> FilePath + -> Key + -> CommandStart +start m zone os gource file key = do showLog output =<< readLog <$> getLog key os -- getLog produces a zombie; reap it liftIO reapZombies diff --git a/Command/MetaData.hs b/Command/MetaData.hs index d932315ab..38f9b8522 100644 --- a/Command/MetaData.hs +++ b/Command/MetaData.hs @@ -63,8 +63,8 @@ seek ps = do (withFilesInGit (whenAnnexed $ start now getfield modmeta)) ps -start :: POSIXTime -> Maybe MetaField -> [ModMeta] -> FilePath -> (Key, Backend) -> CommandStart -start now f ms file (k, _) = start' (Just file) now f ms k +start :: POSIXTime -> Maybe MetaField -> [ModMeta] -> FilePath -> Key -> CommandStart +start now f ms file = start' (Just file) now f ms startKeys :: POSIXTime -> Maybe MetaField -> [ModMeta] -> Key -> CommandStart startKeys = start' Nothing diff --git a/Command/Migrate.hs b/Command/Migrate.hs index c14c07bdd..18e6e0748 100644 --- a/Command/Migrate.hs +++ b/Command/Migrate.hs @@ -25,15 +25,19 @@ def = [notDirect $ seek :: CommandSeek seek = withFilesInGit $ whenAnnexed start -start :: FilePath -> (Key, Backend) -> CommandStart -start file (key, oldbackend) = do - exists <- inAnnex key - newbackend <- choosebackend =<< chooseBackend file - if (newbackend /= oldbackend || upgradableKey oldbackend key) && exists - then do - showStart "migrate" file - next $ perform file key oldbackend newbackend - else stop +start :: FilePath -> Key -> CommandStart +start file key = do + v <- Backend.getBackend file key + case v of + Nothing -> stop + Just oldbackend -> do + exists <- inAnnex key + newbackend <- choosebackend =<< chooseBackend file + if (newbackend /= oldbackend || upgradableKey oldbackend key) && exists + then do + showStart "migrate" file + next $ perform file key oldbackend newbackend + else stop where choosebackend Nothing = Prelude.head <$> orderedList choosebackend (Just backend) = return backend diff --git a/Command/Mirror.hs b/Command/Mirror.hs index 4a7a8dd99..4e9a85009 100644 --- a/Command/Mirror.hs +++ b/Command/Mirror.hs @@ -31,8 +31,8 @@ seek ps = do (withFilesInGit $ whenAnnexed $ start to from) ps -start :: Maybe Remote -> Maybe Remote -> FilePath -> (Key, Backend) -> CommandStart -start to from file (key, _backend) = startKey to from (Just file) key +start :: Maybe Remote -> Maybe Remote -> FilePath -> Key -> CommandStart +start to from file key = startKey to from (Just file) key startKey :: Maybe Remote -> Maybe Remote -> Maybe FilePath -> Key -> CommandStart startKey to from afile key = do diff --git a/Command/Move.hs b/Command/Move.hs index 206a875b7..396ea4afc 100644 --- a/Command/Move.hs +++ b/Command/Move.hs @@ -33,8 +33,8 @@ seek ps = do (withFilesInGit $ whenAnnexed $ start to from True) ps -start :: Maybe Remote -> Maybe Remote -> Bool -> FilePath -> (Key, Backend) -> CommandStart -start to from move file (key, _) = start' to from move (Just file) key +start :: Maybe Remote -> Maybe Remote -> Bool -> FilePath -> Key -> CommandStart +start to from move file key = start' to from move (Just file) key startKey :: Maybe Remote -> Maybe Remote -> Bool -> Key -> CommandStart startKey to from move = start' to from move Nothing diff --git a/Command/ReKey.hs b/Command/ReKey.hs index 805300f9f..2919a09e9 100644 --- a/Command/ReKey.hs +++ b/Command/ReKey.hs @@ -29,7 +29,7 @@ start :: (FilePath, String) -> CommandStart start (file, keyname) = ifAnnexed file go stop where newkey = fromMaybe (error "bad key") $ file2key keyname - go (oldkey, _) + go oldkey | oldkey == newkey = stop | otherwise = do showStart "rekey" file diff --git a/Command/Reinject.hs b/Command/Reinject.hs index 1609c6097..a516fe93c 100644 --- a/Command/Reinject.hs +++ b/Command/Reinject.hs @@ -12,6 +12,7 @@ import Command import Logs.Location import Annex.Content import qualified Command.Fsck +import qualified Backend def :: [Command] def = [command "reinject" (paramPair "SRC" "DEST") seek @@ -33,16 +34,20 @@ start (src:dest:[]) next $ whenAnnexed (perform src) dest start _ = error "specify a src file and a dest file" -perform :: FilePath -> FilePath -> (Key, Backend) -> CommandPerform -perform src _dest (key, backend) = +perform :: FilePath -> FilePath -> Key -> CommandPerform +perform src dest key = do {- Check the content before accepting it. -} - ifM (Command.Fsck.checkKeySizeOr reject key src - <&&> Command.Fsck.checkBackendOr reject backend key src) - ( do - unlessM move $ error "mv failed!" - next $ cleanup key - , error "not reinjecting" - ) + v <- Backend.getBackend dest key + case v of + Nothing -> stop + Just backend -> + ifM (Command.Fsck.checkKeySizeOr reject key src + <&&> Command.Fsck.checkBackendOr reject backend key src) + ( do + unlessM move $ error "mv failed!" + next $ cleanup key + , error "not reinjecting" + ) where -- the file might be on a different filesystem, -- so mv is used rather than simply calling diff --git a/Command/RmUrl.hs b/Command/RmUrl.hs index 3f304b76e..e961575a3 100644 --- a/Command/RmUrl.hs +++ b/Command/RmUrl.hs @@ -20,7 +20,7 @@ seek :: CommandSeek seek = withPairs start start :: (FilePath, String) -> CommandStart -start (file, url) = flip whenAnnexed file $ \_ (key, _) -> do +start (file, url) = flip whenAnnexed file $ \_ key -> do showStart "rmurl" file next $ next $ cleanup url key diff --git a/Command/Sync.hs b/Command/Sync.hs index dfcb0d22a..a5d6d46f1 100644 --- a/Command/Sync.hs +++ b/Command/Sync.hs @@ -338,8 +338,8 @@ seekSyncContent rs = do (\v -> void (liftIO (tryPutMVar mvar ())) >> syncFile rs f v) noop -syncFile :: [Remote] -> FilePath -> (Key, Backend) -> Annex () -syncFile rs f (k, _) = do +syncFile :: [Remote] -> FilePath -> Key -> Annex () +syncFile rs f k = do locs <- loggedLocations k let (have, lack) = partition (\r -> Remote.uuid r `elem` locs) rs diff --git a/Command/Unannex.hs b/Command/Unannex.hs index ca9788ddb..daa14ce85 100644 --- a/Command/Unannex.hs +++ b/Command/Unannex.hs @@ -58,8 +58,8 @@ wrapUnannex a = ifM isDirect then void (liftIO cleanup) >> return True else void (liftIO cleanup) >> return False -start :: FilePath -> (Key, Backend) -> CommandStart -start file (key, _) = stopUnless (inAnnex key) $ do +start :: FilePath -> Key -> CommandStart +start file key = stopUnless (inAnnex key) $ do showStart "unannex" file next $ ifM isDirect ( performDirect file key diff --git a/Command/Uninit.hs b/Command/Uninit.hs index dccf4a614..0f0628156 100644 --- a/Command/Uninit.hs +++ b/Command/Uninit.hs @@ -44,7 +44,7 @@ seek ps = do {- git annex symlinks that are not checked into git could be left by an - interrupted add. -} -startCheckIncomplete :: FilePath -> (Key, Backend) -> CommandStart +startCheckIncomplete :: FilePath -> Key -> CommandStart startCheckIncomplete file _ = error $ unlines [ file ++ " points to annexed content, but is not checked into git." , "Perhaps this was left behind by an interrupted git annex add?" diff --git a/Command/Unlock.hs b/Command/Unlock.hs index 4cfe39307..0070410a6 100644 --- a/Command/Unlock.hs +++ b/Command/Unlock.hs @@ -25,8 +25,8 @@ seek = withFilesInGit $ whenAnnexed start {- The unlock subcommand replaces the symlink with a copy of the file's - content. -} -start :: FilePath -> (Key, Backend) -> CommandStart -start file (key, _) = do +start :: FilePath -> Key -> CommandStart +start file key = do showStart "unlock" file next $ perform file key diff --git a/Command/Unused.hs b/Command/Unused.hs index 3e844e5a8..5815bbf29 100644 --- a/Command/Unused.hs +++ b/Command/Unused.hs @@ -250,7 +250,7 @@ withKeysReferenced' mdir initial a = do x <- Backend.lookupFile f case x of Nothing -> go v fs - Just (k, _) -> do + Just k -> do !v' <- a k f v go v' fs @@ -294,7 +294,7 @@ withKeysReferencedInGitRef a ref = do forM_ ts $ tKey lookAtWorkingTree >=> maybe noop a liftIO $ void clean where - tKey True = fmap fst <$$> Backend.lookupFile . getTopFilePath . DiffTree.file + tKey True = Backend.lookupFile . getTopFilePath . DiffTree.file tKey False = fileKey . takeFileName . decodeBS <$$> catFile ref . getTopFilePath . DiffTree.file diff --git a/Command/Whereis.hs b/Command/Whereis.hs index 387ffebc9..d2c27eb9b 100644 --- a/Command/Whereis.hs +++ b/Command/Whereis.hs @@ -27,8 +27,8 @@ seek ps = do (withFilesInGit $ whenAnnexed $ start m) ps -start :: M.Map UUID Remote -> FilePath -> (Key, Backend) -> CommandStart -start remotemap file (key, _) = start' remotemap key (Just file) +start :: M.Map UUID Remote -> FilePath -> Key -> CommandStart +start remotemap file key = start' remotemap key (Just file) startKeys :: M.Map UUID Remote -> Key -> CommandStart startKeys remotemap key = start' remotemap key Nothing @@ -234,10 +234,10 @@ limitSize vs s = case readSize dataUnits s of Nothing -> Left "bad size" Just sz -> Right $ go sz where - go sz _ (MatchingFile fi) = lookupFile fi >>= check fi sz + go sz _ (MatchingFile fi) = lookupFileKey fi >>= check fi sz go sz _ (MatchingKey key) = checkkey sz key checkkey sz key = return $ keySize key `vs` Just sz - check _ sz (Just (key, _)) = checkkey sz key + check _ sz (Just key) = checkkey sz key check fi sz Nothing = do filesize <- liftIO $ catchMaybeIO $ fromIntegral . fileSize @@ -272,11 +272,8 @@ addTimeLimit s = do liftIO $ exitWith $ ExitFailure 101 else return True -lookupFile :: FileInfo -> Annex (Maybe (Key, Backend)) -lookupFile = Backend.lookupFile . relFile - lookupFileKey :: FileInfo -> Annex (Maybe Key) -lookupFileKey = (fst <$>) <$$> Backend.lookupFile . relFile +lookupFileKey = Backend.lookupFile . relFile checkKey :: (Key -> Annex Bool) -> MatchInfo -> Annex Bool checkKey a (MatchingFile fi) = lookupFileKey fi >>= maybe (return False) a @@ -712,7 +712,7 @@ test_unused env = intmpclonerepoInDirect env $ do (sort expectedkeys) (sort unusedkeys) findkey f = do r <- Backend.lookupFile f - return $ fst $ fromJust r + return $ fromJust r test_describe :: TestEnv -> Assertion test_describe env = intmpclonerepo env $ do @@ -1233,7 +1233,7 @@ test_crypto env = do (c,k) <- annexeval $ do uuid <- Remote.nameToUUID "foo" rs <- Logs.Remote.readRemoteLog - Just (k,_) <- Backend.lookupFile annexedfile + Just k <- Backend.lookupFile annexedfile return (fromJust $ M.lookup uuid rs, k) let key = if scheme `elem` ["hybrid","pubkey"] then Just $ Utility.Gpg.KeyIds [Utility.Gpg.testKeyId] @@ -1500,7 +1500,7 @@ checklocationlog f expected = do thisuuid <- annexeval Annex.UUID.getUUID r <- annexeval $ Backend.lookupFile f case r of - Just (k, _) -> do + Just k -> do uuids <- annexeval $ Remote.keyLocations k assertEqual ("bad content in location log for " ++ f ++ " key " ++ Types.Key.key2file k ++ " uuid " ++ show thisuuid) expected (thisuuid `elem` uuids) @@ -1508,9 +1508,9 @@ checklocationlog f expected = do checkbackend :: FilePath -> Types.Backend -> Assertion checkbackend file expected = do - r <- annexeval $ Backend.lookupFile file - let b = snd $ fromJust r - assertEqual ("backend for " ++ file) expected b + b <- annexeval $ maybe (return Nothing) (Backend.getBackend file) + =<< Backend.lookupFile file + assertEqual ("backend for " ++ file) (Just expected) b inlocationlog :: FilePath -> Assertion inlocationlog f = checklocationlog f True diff --git a/debian/changelog b/debian/changelog index 443fc8796..cefdca193 100644 --- a/debian/changelog +++ b/debian/changelog @@ -17,7 +17,7 @@ git-annex (5.20140413) UNRELEASED; urgency=medium * Avoid depending on shakespeare except for when building the webapp. * uninit: Avoid making unncessary copies of files. * info: Allow use in a repository where annex.uuid is not set. - * reinit: New command that can initialize a new reposotory using + * reinit: New command that can initialize a new repository using the configuration of a previously known repository. Useful if a repository got deleted and you want to clone it back the way it was. @@ -28,6 +28,7 @@ git-annex (5.20140413) UNRELEASED; urgency=medium unncessarily losing file permissions on non-crippled systems. * webapp: Start even if the current directory is listed in ~/.config/git-annex/autostart but no longer has a git repository in it. + * findref: New command, like find but shows files in a specified git ref. -- Joey Hess <joeyh@debian.org> Fri, 11 Apr 2014 21:33:35 -0400 diff --git a/doc/git-annex.mdwn b/doc/git-annex.mdwn index 32680b32c..d5408a2ae 100644 --- a/doc/git-annex.mdwn +++ b/doc/git-annex.mdwn @@ -927,6 +927,14 @@ subdirectories). With `--force`, even files whose content is not currently available will be rekeyed. Use with caution. +* `findref [ref]` + + This is similar to the find command, but instead of finding files in the + current work tree, it finds files in the specified git ref. + + Most MATCHING OPTIONS can be used with findref, to limit the files it + finds. However, the --include and --exclude options will not work. + * `test` This runs git-annex's built-in test suite. diff --git a/doc/todo/Time_Stamping_of_Events_in_Webapp.mdwn b/doc/todo/Time_Stamping_of_Events_in_Webapp.mdwn index a1f3fe6ea..0762f47ba 100644 --- a/doc/todo/Time_Stamping_of_Events_in_Webapp.mdwn +++ b/doc/todo/Time_Stamping_of_Events_in_Webapp.mdwn @@ -1 +1,3 @@ Currently events happening in the webapp (sync upload etc. on the right) has no time stamp thus user has no way to tell when was the last sync happened. Which is problematic when not using XMPP and repos lag behind. + +> [[dup|done]] of <http://git-annex.branchable.com/todo/wishlist__91__minor__93__:_add_time_stamps_to_annex_log_popups_in_webapp/> --[[Joey]] |