git-annex 7.20181205 → 7.20181211
raw patch · 19 files changed
+166/−99 lines, 19 files
Files
- Annex/Direct.hs +4/−1
- Annex/FileMatcher.hs +1/−1
- Annex/WorkTree.hs +9/−4
- CHANGELOG +26/−0
- CmdLine/GitAnnex/Options.hs +15/−11
- CmdLine/Seek.hs +7/−16
- Command/Find.hs +13/−2
- Command/FindRef.hs +10/−5
- Creds.hs +4/−4
- Limit.hs +9/−7
- Limit/Wanted.hs +1/−1
- Remote/S3.hs +54/−37
- Remote/WebDAV.hs +0/−1
- Types/FileMatcher.hs +2/−2
- Upgrade/V5.hs +1/−1
- doc/git-annex-find.mdwn +4/−0
- doc/git-annex-findref.mdwn +4/−4
- doc/git-annex.mdwn +1/−1
- git-annex.cabal +1/−1
Annex/Direct.hs view
@@ -61,7 +61,10 @@ shakey <- catKey sha mstat <- liftIO $ catchMaybeIO $ getSymbolicLinkStatus file mcache <- liftIO $ maybe (pure Nothing) (toInodeCache delta file) mstat- filekey <- isAnnexLink file+ filekey <- isAnnexLink file >>= \case+ Just k -> return (Just k)+ -- v7 unlocked pointer file+ Nothing -> liftIO (isPointerFile file) case (shakey, filekey, mstat, mcache) of (_, Just key, _, _) | shakey == filekey -> noop
Annex/FileMatcher.hs view
@@ -60,7 +60,7 @@ | isEmpty matcher = notconfigured | otherwise = case (mkey, afile) of (_, AssociatedFile (Just file)) -> go =<< fileMatchInfo file- (Just key, _) -> go (MatchingKey key)+ (Just key, _) -> go (MatchingKey key afile) _ -> d where go mi = matchMrun matcher $ \a -> a notpresent mi
Annex/WorkTree.hs view
@@ -14,6 +14,8 @@ import Annex.Content import Annex.ReplaceFile import Annex.CurrentBranch+import Annex.InodeSentinal+import Utility.InodeCache import Config import Git.FilePath import qualified Git.Ref@@ -84,9 +86,12 @@ whenM (inAnnex k) $ do f <- fromRepo $ fromTopFilePath tf destmode <- liftIO $ catchMaybeIO $ fileMode <$> getFileStatus f- replaceFile f $ \tmp ->+ ic <- replaceFile f $ \tmp -> linkFromAnnex k tmp destmode >>= \case- LinkAnnexOk -> return ()- LinkAnnexNoop -> return ()- LinkAnnexFailed -> liftIO $+ LinkAnnexOk -> + withTSDelta (liftIO . genInodeCache tmp)+ LinkAnnexNoop -> return Nothing+ LinkAnnexFailed -> liftIO $ do writePointerFile tmp k destmode+ return Nothing+ maybe noop (restagePointerFile (Restage True) f) ic
CHANGELOG view
@@ -1,3 +1,29 @@+git-annex (7.20181211) upstream; urgency=medium++ * S3: Improve diagnostics when a remote is configured with exporttree and+ versioning, but no S3 version id has been recorded for a key.+ * findref: Support file matching options: --include, --exclude,+ --want-get, --want-drop, --largerthan, --smallerthan, --accessedwithin+ * Commands supporting --branch now apply file matching options --include,+ --exclude, --want-get, --want-drop to filenames from the branch.+ Previously, combining --branch with those would fail to match anything.+ * add, import, findref: Support --time-limit.+ * Add --branch option to git-annex find and mildly deprecate findref in+ favor of it.+ * webdav: When initializing, avoid trying to make a directory at the top of+ the webdav server, which could never accomplish anything and failed on+ nextcloud servers. (Reversion introduced in version 6.20170925.)+ * Fix a case where upgrade to v7 caused git to think that unlocked files+ were modified.+ * Fix bug upgrading from direct mode to v7: when files in the repository+ were already committed as v7 unlocked files elsewhere, and the+ content was present in the direct mode repository, the annexed files+ got their full content checked into git.+ * Fix bug that caused v7 unlocked files in a direct mode repository+ to get locked when committing.++ -- Joey Hess <id@joeyh.name> Tue, 11 Dec 2018 16:33:10 -0400+ git-annex (7.20181205) upstream; urgency=medium * Make bittorrent special remote work w/o btshowmetainfo installed
CmdLine/GitAnnex/Options.hs view
@@ -174,10 +174,7 @@ parseKeyOptions :: Parser KeyOptions parseKeyOptions = parseAllOption- <|> WantBranchKeys <$> some (option (str >>= pure . Ref)- ( long "branch" <> metavar paramRef- <> help "operate on files in the specified branch or treeish"- ))+ <|> parseBranchKeysOption <|> flag' WantUnusedKeys ( long "unused" <> short 'U' <> help "operate on files found by last run of git-annex unused"@@ -187,6 +184,13 @@ <> help "operate on specified key" )) +parseBranchKeysOption :: Parser KeyOptions+parseBranchKeysOption =+ WantBranchKeys <$> some (option (str >>= pure . Ref)+ ( long "branch" <> metavar paramRef+ <> help "operate on files in the specified branch or treeish"+ ))+ parseFailedTransfersOption :: Parser KeyOptions parseFailedTransfersOption = flag' WantFailedTransfers ( long "failed"@@ -211,18 +215,18 @@ -- Options to match properties of annexed files. annexedMatchingOptions :: [GlobalOption] annexedMatchingOptions = concat- [ nonWorkTreeMatchingOptions'+ [ keyMatchingOptions' , fileMatchingOptions' , combiningOptions , timeLimitOption ] --- Matching options that don't need to examine work tree files.-nonWorkTreeMatchingOptions :: [GlobalOption]-nonWorkTreeMatchingOptions = nonWorkTreeMatchingOptions' ++ combiningOptions+-- Matching options that can operate on keys as well as files.+keyMatchingOptions :: [GlobalOption]+keyMatchingOptions = keyMatchingOptions' ++ combiningOptions ++ timeLimitOption -nonWorkTreeMatchingOptions' :: [GlobalOption]-nonWorkTreeMatchingOptions' = +keyMatchingOptions' :: [GlobalOption]+keyMatchingOptions' = [ globalSetter Limit.addIn $ strOption ( long "in" <> short 'i' <> metavar paramRemote <> help "match files present in a remote"@@ -285,7 +289,7 @@ -- Options to match files which may not yet be annexed. fileMatchingOptions :: [GlobalOption]-fileMatchingOptions = fileMatchingOptions' ++ combiningOptions+fileMatchingOptions = fileMatchingOptions' ++ combiningOptions ++ timeLimitOption fileMatchingOptions' :: [GlobalOption] fileMatchingOptions' =
CmdLine/Seek.hs view
@@ -24,6 +24,7 @@ import CmdLine.GitAnnex.Options import Logs.Location import Logs.Unused+import Types.ActionItem import Types.Transfer import Logs.Transfer import Remote.List@@ -78,20 +79,6 @@ go fs = seekActions $ prepFiltered a $ return $ concat $ segmentPaths (map (\(WorkTreeItem f) -> f) l) fs -withFilesInRefs :: ((FilePath, Key) -> CommandSeek) -> [Git.Ref] -> CommandSeek-withFilesInRefs a = mapM_ go- where- go r = do - matcher <- Limit.getMatcher- (l, cleanup) <- inRepo $ LsTree.lsTree r- forM_ l $ \i -> do- let f = getTopFilePath $ LsTree.file i- catKey (LsTree.sha i) >>= \case- Nothing -> noop- Just k -> whenM (matcher $ MatchingKey k) $- a (f, k)- liftIO $ void cleanup- withPathContents :: ((FilePath, FilePath) -> CommandSeek) -> CmdParams -> CommandSeek withPathContents a params = do matcher <- Limit.getMatcher@@ -197,8 +184,12 @@ where mkkeyaction = do matcher <- Limit.getMatcher- return $ \v ->- whenM (matcher $ MatchingKey $ fst v) $+ return $ \v@(k, ai) ->+ let i = case ai of+ ActionItemBranchFilePath (BranchFilePath _ topf) ->+ MatchingKey k (AssociatedFile $ Just $ getTopFilePath topf)+ _ -> MatchingKey k (AssociatedFile Nothing)+ in whenM (matcher i) $ keyaction v withKeyOptions'
Command/Find.hs view
@@ -1,6 +1,6 @@ {- git-annex command -- - Copyright 2010-2012 Joey Hess <id@joeyh.name>+ - Copyright 2010-2018 Joey Hess <id@joeyh.name> - - Licensed under the GNU GPL version 3 or higher. -}@@ -14,6 +14,8 @@ import Annex.Content import Limit import Types.Key+import Types.ActionItem+import Git.FilePath import qualified Utility.Format import Utility.DataUnits @@ -28,6 +30,7 @@ data FindOptions = FindOptions { findThese :: CmdParams , formatOption :: Maybe Utility.Format.Format+ , keyOptions :: Maybe KeyOptions , batchOption :: BatchMode } @@ -35,6 +38,7 @@ optParser desc = FindOptions <$> cmdParams desc <*> optional parseFormatOption+ <*> optional parseBranchKeysOption <*> parseBatchOption parseFormatOption :: Parser Utility.Format.Format@@ -50,7 +54,9 @@ seek :: FindOptions -> CommandSeek seek o = case batchOption o of- NoBatch -> withFilesInGit (commandAction . go)+ NoBatch -> withKeyOptions (keyOptions o) False+ (commandAction . startKeys o)+ (withFilesInGit (commandAction . go)) =<< workTreeItems (findThese o) Batch fmt -> batchFilesMatching fmt go where@@ -65,6 +71,11 @@ next $ next $ return True , stop )++startKeys :: FindOptions -> (Key, ActionItem) -> CommandStart+startKeys o (key, ActionItemBranchFilePath (BranchFilePath _ topf)) = + start o (getTopFilePath topf) key+startKeys _ _ = stop showFormatted :: Maybe Utility.Format.Format -> String -> [(String, String)] -> Annex () showFormatted format unformatted vars =
Command/FindRef.hs view
@@ -1,6 +1,6 @@ {- git-annex command -- - Copyright 2014 Joey Hess <id@joeyh.name>+ - Copyright 2014-2018 Joey Hess <id@joeyh.name> - - Licensed under the GNU GPL version 3 or higher. -}@@ -12,11 +12,16 @@ import qualified Git cmd :: Command-cmd = withGlobalOptions [nonWorkTreeMatchingOptions] $ Find.mkCommand $ +cmd = withGlobalOptions [annexedMatchingOptions] $ Find.mkCommand $ command "findref" SectionPlumbing- "lists files in a git ref"+ "lists files in a git ref (deprecated)" paramRef (seek <$$> Find.optParser) seek :: Find.FindOptions -> CommandSeek-seek o = (commandAction . uncurry (Find.start o))- `withFilesInRefs` (map Git.Ref $ Find.findThese o)+seek o = Find.seek o'+ where+ o' = o + { Find.keyOptions = Just $ WantBranchKeys $+ map Git.Ref (Find.findThese o)+ , Find.findThese = []+ }
Creds.hs view
@@ -11,7 +11,7 @@ setRemoteCredPair, getRemoteCredPair, getRemoteCredPairFor,- warnMissingCredPairFor,+ missingCredPairFor, getEnvCredPair, writeCreds, readCreds,@@ -118,12 +118,12 @@ getRemoteCredPairFor this c gc storage = go =<< getRemoteCredPair c gc storage where go Nothing = do- warnMissingCredPairFor this storage+ warning $ missingCredPairFor this storage return Nothing go (Just credpair) = return $ Just credpair -warnMissingCredPairFor :: String -> CredPairStorage -> Annex ()-warnMissingCredPairFor this storage = warning $ unwords+missingCredPairFor :: String -> CredPairStorage -> String+missingCredPairFor this storage = unwords [ "Set both", loginvar , "and", passwordvar , "to use", this
Limit.hs view
@@ -94,16 +94,17 @@ matchGlobFile glob = go where cglob = compileGlob glob CaseSensative -- memoized- go (MatchingKey _) = pure False go (MatchingFile fi) = pure $ matchGlob cglob (matchFile fi) go (MatchingInfo af _ _ _) = matchGlob cglob <$> getInfo af+ go (MatchingKey _ (AssociatedFile Nothing)) = pure False+ go (MatchingKey _ (AssociatedFile (Just af))) = pure $ matchGlob cglob af #ifdef WITH_MAGICMIME matchMagic :: Maybe Magic -> MkLimit Annex matchMagic (Just magic) glob = Right $ const go where cglob = compileGlob glob CaseSensative -- memoized- go (MatchingKey _) = pure False+ go (MatchingKey _ _) = pure False go (MatchingFile fi) = liftIO $ catchBoolIO $ matchGlob cglob <$> magicFile magic (currFile fi) go (MatchingInfo _ _ _ mimeval) = matchGlob cglob <$> getInfo mimeval@@ -152,7 +153,8 @@ limitInDir dir = const go where go (MatchingFile fi) = checkf $ matchFile fi- go (MatchingKey _) = return False+ go (MatchingKey _ (AssociatedFile Nothing)) = return False+ go (MatchingKey _ (AssociatedFile (Just af))) = checkf af go (MatchingInfo af _ _ _) = checkf =<< getInfo af checkf = return . elem dir . splitPath . takeDirectory @@ -200,7 +202,7 @@ then approxNumCopies else case mi of MatchingFile fi -> getGlobalFileNumCopies $ matchFile fi- MatchingKey _ -> approxNumCopies+ MatchingKey _ _ -> approxNumCopies MatchingInfo _ _ _ _ -> approxNumCopies us <- filter (`S.notMember` notpresent) <$> (trustExclude UnTrusted =<< Remote.keyLocations key)@@ -214,7 +216,7 @@ -} limitUnused :: MatchFiles Annex limitUnused _ (MatchingFile _) = return False-limitUnused _ (MatchingKey k) = S.member k <$> unusedKeys+limitUnused _ (MatchingKey k _) = S.member k <$> unusedKeys limitUnused _ (MatchingInfo _ ak _ _) = do k <- getInfo ak S.member k <$> unusedKeys@@ -277,7 +279,7 @@ Just sz -> Right $ go sz where go sz _ (MatchingFile fi) = lookupFileKey fi >>= check fi sz- go sz _ (MatchingKey key) = checkkey sz key+ go sz _ (MatchingKey key _) = checkkey sz key go sz _ (MatchingInfo _ _ as _) = getInfo as >>= \sz' -> return (Just sz' `vs` Just sz) checkkey sz key = return $ keySize key `vs` Just sz@@ -329,5 +331,5 @@ checkKey :: (Key -> Annex Bool) -> MatchInfo -> Annex Bool checkKey a (MatchingFile fi) = lookupFileKey fi >>= maybe (return False) a-checkKey a (MatchingKey k) = a k+checkKey a (MatchingKey k _) = a k checkKey a (MatchingInfo _ ak _ _) = a =<< getInfo ak
Limit/Wanted.hs view
@@ -22,5 +22,5 @@ checkWant :: (AssociatedFile -> Annex Bool) -> MatchInfo -> Annex Bool checkWant a (MatchingFile fi) = a (AssociatedFile (Just $ matchFile fi))-checkWant _ (MatchingKey _) = return False+checkWant a (MatchingKey _ af) = a af checkWant _ (MatchingInfo {}) = return False
Remote/S3.hs view
@@ -259,15 +259,18 @@ - out to the file. Would be better to implement a byteRetriever, but - that is difficult. -} retrieve :: Remote -> RemoteConfig -> S3Info -> Maybe S3Handle -> Retriever-retrieve r _ info (Just h) = fileRetriever $ \f k p -> do- loc <- eitherS3VersionID info (uuid r) k (T.pack $ bucketObject info k)- retrieveHelper info h loc f p+retrieve r c info (Just h) = fileRetriever $ \f k p ->+ eitherS3VersionID info (uuid r) c k (T.pack $ bucketObject info k) >>= \case+ Left failreason -> do+ warning failreason+ giveup "cannot download content"+ Right loc -> retrieveHelper info h loc f p retrieve r c info Nothing = fileRetriever $ \f k p ->- getPublicWebUrls (uuid r) info c k >>= \case- [] -> do- needS3Creds (uuid r)- giveup "No S3 credentials configured"- us -> unlessM (downloadUrl k p us f) $+ getPublicWebUrls' (uuid r) info c k >>= \case+ Left failreason -> do+ warning failreason+ giveup "cannot download content"+ Right us -> unlessM (downloadUrl k p us f) $ giveup "failed to download content" retrieveHelper :: S3Info -> S3Handle -> (Either S3.Object S3VersionID) -> FilePath -> MeterUpdate -> Annex ()@@ -292,16 +295,19 @@ return $ either (const False) (const True) res checkKey :: Remote -> RemoteConfig -> S3Info -> Maybe S3Handle -> CheckPresent-checkKey r _ info (Just h) k = do+checkKey r c info (Just h) k = do showChecking r- loc <- eitherS3VersionID info (uuid r) k (T.pack $ bucketObject info k)- checkKeyHelper info h loc+ eitherS3VersionID info (uuid r) c k (T.pack $ bucketObject info k) >>= \case+ Left failreason -> do+ warning failreason+ giveup "cannot check content"+ Right loc -> checkKeyHelper info h loc checkKey r c info Nothing k = - getPublicWebUrls (uuid r) info c k >>= \case- [] -> do- needS3Creds (uuid r)- giveup "No S3 credentials configured"- us -> do+ getPublicWebUrls' (uuid r) info c k >>= \case+ Left failreason -> do+ warning failreason+ giveup "cannot check content"+ Right us -> do showChecking r let check u = withUrlOptions $ liftIO . checkBoth u (keySize k)@@ -347,7 +353,7 @@ >>= setS3VersionID info u k return True storeExportS3 u _ Nothing _ _ _ _ = do- needS3Creds u+ warning $ needS3Creds u return False retrieveExportS3 :: UUID -> S3Info -> Maybe S3Handle -> Key -> ExportLocation -> FilePath -> MeterUpdate -> Annex Bool@@ -360,7 +366,7 @@ return True Nothing -> case getPublicUrlMaker info of Nothing -> do- needS3Creds u+ warning $ needS3Creds u return False Just geturl -> Url.withUrlOptions $ liftIO . Url.download p (geturl exporturl) f@@ -375,7 +381,7 @@ S3.DeleteObject (T.pack $ bucketExportLocation info loc) (bucket info) return $ either (const False) (const True) res removeExportS3 u _ Nothing _ _ = do- needS3Creds u+ warning $ needS3Creds u return False checkPresentExportS3 :: UUID -> S3Info -> Maybe S3Handle -> Key -> ExportLocation -> Annex Bool@@ -383,7 +389,7 @@ checkKeyHelper info h (Left (T.pack $ bucketExportLocation info loc)) checkPresentExportS3 u info Nothing k loc = case getPublicUrlMaker info of Nothing -> do- needS3Creds u+ warning $ needS3Creds u giveup "No S3 credentials configured" Just geturl -> withUrlOptions $ liftIO . checkBoth (geturl $ bucketExportLocation info loc) (keySize k)@@ -403,7 +409,7 @@ srcobject = T.pack $ bucketExportLocation info src dstobject = T.pack $ bucketExportLocation info dest renameExportS3 u _ Nothing _ _ _ = do- needS3Creds u+ warning $ needS3Creds u return False {- Generate the bucket if it does not already exist, including creating the@@ -523,7 +529,7 @@ withS3Handle c gc u a = withS3HandleMaybe c gc u $ \mh -> case mh of Just h -> a h Nothing -> do- needS3Creds u+ warning $ needS3Creds u giveup "No S3 credentials configured" withS3HandleMaybe :: RemoteConfig -> RemoteGitConfig -> UUID -> (Maybe S3Handle -> Annex a) -> Annex a@@ -542,8 +548,8 @@ where s3cfg = s3Configuration c -needS3Creds :: UUID -> Annex ()-needS3Creds u = warnMissingCredPairFor "S3" (AWS.creds u)+needS3Creds :: UUID -> String+needS3Creds u = missingCredPairFor "S3" (AWS.creds u) s3Configuration :: RemoteConfig -> S3.S3Configuration AWS.NormalQuery s3Configuration c = cfg@@ -734,19 +740,28 @@ showstorageclass sc = show sc getPublicWebUrls :: UUID -> S3Info -> RemoteConfig -> Key -> Annex [URLString]-getPublicWebUrls u info c k- | not (public info) = return []+getPublicWebUrls u info c k = either (const []) id <$> getPublicWebUrls' u info c k++getPublicWebUrls' :: UUID -> S3Info -> RemoteConfig -> Key -> Annex (Either String [URLString])+getPublicWebUrls' u info c k+ | not (public info) = return $ Left $ + "S3 bucket does not allow public access; " ++ needS3Creds u | exportTree c = if versioning info then case publicurl info of- Just url -> getS3VersionIDPublicUrls (const $ genericPublicUrl url) info u k+ Just url -> getversionid (const $ genericPublicUrl url) Nothing -> case host info of Just h | h == AWS.s3DefaultHost ->- getS3VersionIDPublicUrls awsPublicUrl info u k- _ -> return []- else return []+ getversionid awsPublicUrl+ _ -> return nopublicurl+ else return (Left "exporttree used without versioning") | otherwise = case getPublicUrlMaker info of- Just geturl -> return [geturl $ bucketObject info k]- Nothing -> return []+ Just geturl -> return (Right [geturl $ bucketObject info k])+ Nothing -> return nopublicurl+ where+ nopublicurl = Left "No publicurl is configured for this remote"+ getversionid url = getS3VersionIDPublicUrls url info u k >>= \case+ [] -> return (Left "Remote is configured to use versioning, but no S3 version ID is recorded for this key")+ l -> return (Right l) getPublicUrlMaker :: S3Info -> Maybe (BucketObject -> URLString) getPublicUrlMaker info = case publicurl info of@@ -813,14 +828,16 @@ s3VersionField :: MetaField s3VersionField = mkMetaFieldUnchecked "V" -eitherS3VersionID :: S3Info -> UUID -> Key -> S3.Object -> Annex (Either S3.Object S3VersionID)-eitherS3VersionID info u k fallback+eitherS3VersionID :: S3Info -> UUID -> RemoteConfig -> Key -> S3.Object -> Annex (Either String (Either S3.Object S3VersionID))+eitherS3VersionID info u c k fallback | versioning info = getS3VersionID u k >>= return . \case- [] -> Left fallback+ [] -> if exportTree c+ then Left "Remote is configured to use versioning, but no S3 version ID is recorded for this key"+ else Right (Left fallback) -- It's possible for a key to be stored multiple timees in -- a bucket with different version IDs; only use one of them.- (v:_) -> Right v- | otherwise = return (Left fallback)+ (v:_) -> Right (Right v)+ | otherwise = return (Right (Left fallback)) s3VersionIDPublicUrl :: (S3Info -> BucketObject -> URLString) -> S3Info -> S3VersionID -> URLString s3VersionIDPublicUrl mk info (S3VersionID obj vid) = mk info $ concat
Remote/WebDAV.hs view
@@ -274,7 +274,6 @@ test $ liftIO $ evalDAVT url $ do prepDAV user pass makeParentDirs- void $ mkColRecursive "/" inLocation (tmpLocation "test") $ do putContentM (Nothing, L8.fromString "test") delContentM
Types/FileMatcher.hs view
@@ -8,7 +8,7 @@ module Types.FileMatcher where import Types.UUID (UUID)-import Types.Key (Key)+import Types.Key (Key, AssociatedFile) import Utility.Matcher (Matcher, Token) import Utility.FileSize @@ -18,7 +18,7 @@ data MatchInfo = MatchingFile FileInfo- | MatchingKey Key+ | MatchingKey Key AssociatedFile | MatchingInfo (OptInfo FilePath) (OptInfo Key) (OptInfo FileSize) (OptInfo MimeType) type MimeType = String
Upgrade/V5.hs view
@@ -33,7 +33,6 @@ upgrade automatic = do unless automatic $ showAction "v5 to v6"- scanUnlockedFiles whenM isDirect $ do {- Direct mode makes the same tradeoff of using less disk - space, with less preservation of old versions of files@@ -62,6 +61,7 @@ - contents too, don't use git checkout to check out the - adjust branch. Instead, update HEAD manually. -} inRepo $ setHeadRef b+ scanUnlockedFiles configureSmudgeFilter -- Inode sentinal file was only used in direct mode and when -- locking down files as they were added. In v6, it's used more
doc/git-annex-find.mdwn view
@@ -26,6 +26,10 @@ To list annexed files whose content is not present, specify `--not --in=here` +* `--branch=ref`++ List files in the specified branch or treeish.+ * `--print0` Output filenames terminated with nulls, for use with `xargs -0`
doc/git-annex-findref.mdwn view
@@ -1,6 +1,6 @@ # NAME -git-annex findref - lists files in a git ref+git-annex findref - lists files in a git ref (deprecated) # SYNOPSIS @@ -8,9 +8,9 @@ # DESCRIPTION -This is very similar to the `git-annex find` command, but instead of-finding files in the current work tree, it finds files in the-specified git ref.+This is the same as `git annex find` with the --branch option, and you're+encouraged to use that instead unless you need to support older versions of+git-annex. # OPTIONS
doc/git-annex.mdwn view
@@ -660,7 +660,7 @@ * `findref [ref]` - Lists files in a git ref.+ Lists files in a git ref. (deprecated) See [[git-annex-findref]](1) for details.
git-annex.cabal view
@@ -1,5 +1,5 @@ Name: git-annex-Version: 7.20181205+Version: 7.20181211 Cabal-Version: >= 1.8 License: GPL-3 Maintainer: Joey Hess <id@joeyh.name>