Release 4.20130827 for sid [dgit]
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.14 (GNU/Linux) iQIVAwUAUh0JyckQ2SIlEuPHAQihEQ/+Ix0nlizcigYfHqmqea8DQTE4mlIlGEng IkUX5e1dir1JqqHk+4jjSdrjuopAnZ5wsf+bWnMEC7yOYftq/59OGowDIy9jWqqf oN0BQDNIwgR8+5WETewM9ZWc+I5yCcj6sEyf0/BrJJY5QUMENDsRKLF79ADPHWuU 5EGezOHTD0m+KBqSw+s+Cj+XUmZHJgPq2j6kFqlrFMc7qv7rLnj3bI3Mc7aHfWua g0oHMyXA2jMiP2UwjMU/hAPq6dqt0fjeJ7vyYyIsETQ1jZsdZQtRjaSSxNAEBEJ1 eGD0zYJ6GdusD0IpI+UVp6Wkw3y0kKA0WsYXtu3vVqyEjO7uHBGcWPePiGISd7nd GPW7KBftKFBa7DQe56d/Ztk05Aze0eeek50DGMovzKfOj/FysNn3ystUy43RBSF8 40kCb8S/Rs2VPVOWNrcccYo2Hx5SFaYG+YBHJTxYNdwsx4DyMB1iGowe3fASJgnF VMhqkKWn55i/CdJG2jlWr4wSiW44iY3b/na/f3Ktb1FamveYCxJIH+trFBAv3qn3 EWh0wuFeg8VF/WDK/IRcuH12jup784JhIEjTeTvURd4/TJXkNtxO1xHV7BG1VuhR rSr9AUNfdiPwRZViK4jQUd6x9OF+Qil8pSe3XbvIsJLfpWkiK80kcbFCFmXaJIrQ 5cspJ23ALTI= =gpx9 -----END PGP SIGNATURE----- Merge tag 'debian/4.20130827' into debian-wheezy-backport Release 4.20130827 for sid [dgit] # gpg: Signature made Tue Aug 27 20:19:21 2013 UTC using RSA key ID 2512E3C7 # gpg: Good signature from "Joey Hess <joeyh@debian.org>" # gpg: aka "Joey Hess <joey@kitenet.net>" # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: E85A 5F63 B31D 24C1 EBF0 D81C C910 D922 2512 E3C7
This commit is contained in:
commit
35cedd6457
226 changed files with 3637 additions and 364 deletions
|
@ -12,6 +12,7 @@ module Annex.CatFile (
|
|||
catFileHandle,
|
||||
catKey,
|
||||
catKeyFile,
|
||||
catKeyFileHEAD,
|
||||
) where
|
||||
|
||||
import qualified Data.ByteString.Lazy as L
|
||||
|
@ -87,6 +88,9 @@ catKey ref = do
|
|||
-}
|
||||
catKeyFile :: FilePath -> Annex (Maybe Key)
|
||||
catKeyFile f = ifM (Annex.getState Annex.daemon)
|
||||
( catKey $ Ref $ "HEAD:./" ++ f
|
||||
( catKeyFileHEAD f
|
||||
, catKey $ Ref $ ":./" ++ f
|
||||
)
|
||||
|
||||
catKeyFileHEAD :: FilePath -> Annex (Maybe Key)
|
||||
catKeyFileHEAD f = catKey $ Ref $ "HEAD:./" ++ f
|
||||
|
|
20
Annex/Quvi.hs
Normal file
20
Annex/Quvi.hs
Normal file
|
@ -0,0 +1,20 @@
|
|||
{- quvi options for git-annex
|
||||
-
|
||||
- Copyright 2013 Joey Hess <joey@kitenet.net>
|
||||
-
|
||||
- Licensed under the GNU GPL version 3 or higher.
|
||||
-}
|
||||
|
||||
{-# LANGUAGE Rank2Types #-}
|
||||
|
||||
module Annex.Quvi where
|
||||
|
||||
import Common.Annex
|
||||
import qualified Annex
|
||||
import Utility.Quvi
|
||||
import Utility.Url
|
||||
|
||||
withQuviOptions :: forall a. (Query a) -> [CommandParam] -> URLString -> Annex a
|
||||
withQuviOptions a ps url = do
|
||||
opts <- map Param . annexQuviOptions <$> Annex.getGitConfig
|
||||
liftIO $ a (ps++opts) url
|
|
@ -29,6 +29,10 @@ notifyNetMessagerRestart :: Assistant ()
|
|||
notifyNetMessagerRestart =
|
||||
flip writeSV () <<~ (netMessagerRestart . netMessager)
|
||||
|
||||
{- This can be used to get an early indication if the network has
|
||||
- changed, to immediately restart a connection. However, that is not
|
||||
- available on all systems, so clients also need to deal with
|
||||
- restarting dropped connections in the usual way. -}
|
||||
waitNetMessagerRestart :: Assistant ()
|
||||
waitNetMessagerRestart = readSV <<~ (netMessagerRestart . netMessager)
|
||||
|
||||
|
|
|
@ -39,7 +39,11 @@ netWatcherThread = thread noop
|
|||
- network connection changes, but it also ensures that
|
||||
- any networked remotes that may have not been routable for a
|
||||
- while (despite the local network staying up), are synced with
|
||||
- periodically. -}
|
||||
- periodically.
|
||||
-
|
||||
- Note that it does not call notifyNetMessagerRestart, because
|
||||
- it doesn't know that the network has changed.
|
||||
-}
|
||||
netWatcherFallbackThread :: NamedThread
|
||||
netWatcherFallbackThread = namedThread "NetWatcherFallback" $
|
||||
runEvery (Seconds 3600) <~> handleConnection
|
||||
|
|
|
@ -27,7 +27,7 @@ pairListenerThread :: UrlRenderer -> NamedThread
|
|||
pairListenerThread urlrenderer = namedThread "PairListener" $ do
|
||||
listener <- asIO1 $ go [] []
|
||||
liftIO $ withSocketsDo $
|
||||
runEvery (Seconds 1) $ void $ tryIO $
|
||||
runEvery (Seconds 60) $ void $ tryIO $
|
||||
listener =<< getsock
|
||||
where
|
||||
{- Note this can crash if there's no network interface,
|
||||
|
|
|
@ -32,6 +32,7 @@ tests =
|
|||
, TestCase "curl" $ testCmd "curl" "curl --version >/dev/null"
|
||||
, TestCase "wget" $ testCmd "wget" "wget --version >/dev/null"
|
||||
, TestCase "bup" $ testCmd "bup" "bup --version >/dev/null"
|
||||
, TestCase "quvi" $ testCmd "quvi" "quvi --version >/dev/null"
|
||||
, TestCase "ionice" $ testCmd "ionice" "ionice -c3 true >/dev/null"
|
||||
, TestCase "gpg" $ maybeSelectCmd "gpg"
|
||||
[ ("gpg", "--version >/dev/null")
|
||||
|
|
|
@ -27,6 +27,8 @@ import Annex.Content.Direct
|
|||
import Logs.Location
|
||||
import qualified Logs.Transfer as Transfer
|
||||
import Utility.Daemon (checkDaemon)
|
||||
import Annex.Quvi
|
||||
import qualified Utility.Quvi as Quvi
|
||||
|
||||
def :: [Command]
|
||||
def = [notBareRepo $ withOptions [fileOption, pathdepthOption, relaxedOption] $
|
||||
|
@ -51,15 +53,51 @@ seek = [withField fileOption return $ \f ->
|
|||
start :: Bool -> Maybe FilePath -> Maybe Int -> String -> CommandStart
|
||||
start relaxed optfile pathdepth s = go $ fromMaybe bad $ parseURI s
|
||||
where
|
||||
bad = fromMaybe (error $ "bad url " ++ s) $
|
||||
parseURI $ escapeURIString isUnescapedInURI s
|
||||
go url = do
|
||||
pathmax <- liftIO $ fileNameLengthLimit "."
|
||||
let file = fromMaybe (url2file url pathdepth pathmax) optfile
|
||||
(s', downloader) = getDownloader s
|
||||
bad = fromMaybe (error $ "bad url " ++ s') $
|
||||
parseURI $ escapeURIString isUnescapedInURI s'
|
||||
badquvi = error $ "quvi does not know how to download url " ++ s'
|
||||
choosefile = flip fromMaybe optfile
|
||||
go url = case downloader of
|
||||
QuviDownloader -> usequvi
|
||||
DefaultDownloader -> ifM (liftIO $ Quvi.supported s')
|
||||
( usequvi
|
||||
, do
|
||||
pathmax <- liftIO $ fileNameLengthLimit "."
|
||||
let file = choosefile $ url2file url pathdepth pathmax
|
||||
showStart "addurl" file
|
||||
next $ perform relaxed s' file
|
||||
)
|
||||
usequvi = do
|
||||
page <- fromMaybe badquvi
|
||||
<$> withQuviOptions Quvi.forceQuery [Quvi.quiet, Quvi.httponly] s'
|
||||
let link = fromMaybe badquvi $ headMaybe $ Quvi.pageLinks page
|
||||
let file = choosefile $ sanitizeFilePath $
|
||||
Quvi.pageTitle page ++ "." ++ Quvi.linkSuffix link
|
||||
showStart "addurl" file
|
||||
next $ perform relaxed s file
|
||||
next $ performQuvi relaxed s' (Quvi.linkUrl link) file
|
||||
|
||||
perform :: Bool -> String -> FilePath -> CommandPerform
|
||||
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
|
||||
geturl = do
|
||||
key <- Backend.URL.fromUrl quviurl Nothing
|
||||
ifM (pure relaxed <||> Annex.getState Annex.fast)
|
||||
( next $ cleanup quviurl file key Nothing
|
||||
, do
|
||||
tmp <- fromRepo $ gitAnnexTmpLocation key
|
||||
showOutput
|
||||
ok <- Transfer.download webUUID key (Just file) Transfer.forwardRetry $ const $ do
|
||||
liftIO $ createDirectoryIfMissing True (parentDir tmp)
|
||||
downloadUrl [videourl] tmp
|
||||
if ok
|
||||
then next $ cleanup quviurl file key (Just tmp)
|
||||
else stop
|
||||
)
|
||||
|
||||
perform :: Bool -> URLString -> FilePath -> CommandPerform
|
||||
perform relaxed url file = ifAnnexed file addurl geturl
|
||||
where
|
||||
geturl = next $ addUrlFile relaxed url file
|
||||
|
@ -78,7 +116,7 @@ perform relaxed url file = ifAnnexed file addurl geturl
|
|||
stop
|
||||
)
|
||||
|
||||
addUrlFile :: Bool -> String -> FilePath -> Annex Bool
|
||||
addUrlFile :: Bool -> URLString -> FilePath -> Annex Bool
|
||||
addUrlFile relaxed url file = do
|
||||
liftIO $ createDirectoryIfMissing True (parentDir file)
|
||||
ifM (Annex.getState Annex.fast <||> pure relaxed)
|
||||
|
@ -88,7 +126,7 @@ addUrlFile relaxed url file = do
|
|||
download url file
|
||||
)
|
||||
|
||||
download :: String -> FilePath -> Annex Bool
|
||||
download :: URLString -> FilePath -> Annex Bool
|
||||
download url file = do
|
||||
dummykey <- genkey
|
||||
tmp <- fromRepo $ gitAnnexTmpLocation dummykey
|
||||
|
@ -130,7 +168,7 @@ download url file = do
|
|||
downloadUrl [url] tmp
|
||||
|
||||
|
||||
cleanup :: String -> FilePath -> Key -> Maybe FilePath -> Annex Bool
|
||||
cleanup :: URLString -> FilePath -> Key -> Maybe FilePath -> Annex Bool
|
||||
cleanup url file key mtmp = do
|
||||
when (isJust mtmp) $
|
||||
logStatus key InfoPresent
|
||||
|
@ -144,7 +182,7 @@ cleanup url file key mtmp = do
|
|||
maybe noop (moveAnnex key) mtmp
|
||||
return True
|
||||
|
||||
nodownload :: Bool -> String -> FilePath -> Annex Bool
|
||||
nodownload :: Bool -> URLString -> FilePath -> Annex Bool
|
||||
nodownload relaxed url file = do
|
||||
headers <- getHttpHeaders
|
||||
(exists, size) <- if relaxed
|
||||
|
|
|
@ -9,6 +9,7 @@ module Command.Copy where
|
|||
|
||||
import Common.Annex
|
||||
import Command
|
||||
import GitAnnex.Options
|
||||
import qualified Command.Move
|
||||
import qualified Remote
|
||||
import Annex.Wanted
|
||||
|
@ -19,8 +20,8 @@ def = [withOptions Command.Move.moveOptions $ command "copy" paramPaths seek
|
|||
|
||||
seek :: [CommandSeek]
|
||||
seek =
|
||||
[ withField Command.Move.toOption Remote.byNameWithUUID $ \to ->
|
||||
withField Command.Move.fromOption Remote.byNameWithUUID $ \from ->
|
||||
[ withField toOption Remote.byNameWithUUID $ \to ->
|
||||
withField fromOption Remote.byNameWithUUID $ \from ->
|
||||
withKeyOptions (Command.Move.startKey to from False) $
|
||||
withFilesInGit $ whenAnnexed $ start to from
|
||||
]
|
||||
|
|
|
@ -33,7 +33,7 @@ import qualified Option
|
|||
import Types.Key
|
||||
import Utility.HumanTime
|
||||
import Git.FilePath
|
||||
import GitAnnex.Options
|
||||
import GitAnnex.Options hiding (fromOption)
|
||||
|
||||
#ifndef mingw32_HOST_OS
|
||||
import System.Posix.Process (getProcessID)
|
||||
|
|
|
@ -11,10 +11,10 @@ import Common.Annex
|
|||
import Command
|
||||
import qualified Remote
|
||||
import Annex.Content
|
||||
import qualified Command.Move
|
||||
import Logs.Transfer
|
||||
import Annex.Wanted
|
||||
import GitAnnex.Options
|
||||
import qualified Command.Move
|
||||
import Types.Key
|
||||
|
||||
def :: [Command]
|
||||
|
@ -22,11 +22,11 @@ def = [withOptions getOptions $ command "get" paramPaths seek
|
|||
SectionCommon "make content of annexed files available"]
|
||||
|
||||
getOptions :: [Option]
|
||||
getOptions = [Command.Move.fromOption] ++ keyOptions
|
||||
getOptions = fromOption : keyOptions
|
||||
|
||||
seek :: [CommandSeek]
|
||||
seek =
|
||||
[ withField Command.Move.fromOption Remote.byNameWithUUID $ \from ->
|
||||
[ withField fromOption Remote.byNameWithUUID $ \from ->
|
||||
withKeyOptions (startKeys from) $
|
||||
withFilesInGit $ whenAnnexed $ start from
|
||||
]
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{- git-annex command
|
||||
-
|
||||
- Copyright 2012 Joey Hess <joey@kitenet.net>
|
||||
- Copyright 2012-2013 Joey Hess <joey@kitenet.net>
|
||||
-
|
||||
- Licensed under the GNU GPL version 3 or higher.
|
||||
-}
|
||||
|
@ -13,30 +13,92 @@ import Common.Annex
|
|||
import Command
|
||||
import qualified Annex
|
||||
import qualified Command.Add
|
||||
import qualified Option
|
||||
import Utility.CopyFile
|
||||
import Backend
|
||||
import Remote
|
||||
import Types.KeySource
|
||||
|
||||
def :: [Command]
|
||||
def = [notBareRepo $ command "import" paramPaths seek
|
||||
def = [withOptions opts $ notBareRepo $ command "import" paramPaths seek
|
||||
SectionCommon "move and add files from outside git working copy"]
|
||||
|
||||
seek :: [CommandSeek]
|
||||
seek = [withPathContents start]
|
||||
opts :: [Option]
|
||||
opts =
|
||||
[ duplicateOption
|
||||
, deduplicateOption
|
||||
, cleanDuplicatesOption
|
||||
]
|
||||
|
||||
start :: (FilePath, FilePath) -> CommandStart
|
||||
start (srcfile, destfile) =
|
||||
duplicateOption :: Option
|
||||
duplicateOption = Option.flag [] "duplicate" "do not delete outside files"
|
||||
|
||||
deduplicateOption :: Option
|
||||
deduplicateOption = Option.flag [] "deduplicate" "do not add files whose content has been seen"
|
||||
|
||||
cleanDuplicatesOption :: Option
|
||||
cleanDuplicatesOption = Option.flag [] "clean-duplicates" "delete outside duplicate files (import nothing)"
|
||||
|
||||
data DuplicateMode = Default | Duplicate | DeDuplicate | CleanDuplicates
|
||||
deriving (Eq)
|
||||
|
||||
getDuplicateMode :: Annex DuplicateMode
|
||||
getDuplicateMode = gen
|
||||
<$> getflag duplicateOption
|
||||
<*> getflag deduplicateOption
|
||||
<*> getflag cleanDuplicatesOption
|
||||
where
|
||||
getflag = Annex.getFlag . Option.name
|
||||
gen False False False = Default
|
||||
gen True False False = Duplicate
|
||||
gen False True False = DeDuplicate
|
||||
gen False False True = CleanDuplicates
|
||||
gen _ _ _ = error "bad combination of --duplicate, --deduplicate, --clean-duplicates"
|
||||
|
||||
seek :: [CommandSeek]
|
||||
seek = [withValue getDuplicateMode $ \mode -> withPathContents $ start mode]
|
||||
|
||||
start :: DuplicateMode -> (FilePath, FilePath) -> CommandStart
|
||||
start mode (srcfile, destfile) =
|
||||
ifM (liftIO $ isRegularFile <$> getSymbolicLinkStatus srcfile)
|
||||
( do
|
||||
showStart "import" destfile
|
||||
next $ perform srcfile destfile
|
||||
next $ perform mode srcfile destfile
|
||||
, stop
|
||||
)
|
||||
|
||||
perform :: FilePath -> FilePath -> CommandPerform
|
||||
perform srcfile destfile = do
|
||||
whenM (liftIO $ doesFileExist destfile) $
|
||||
unlessM (Annex.getState Annex.force) $
|
||||
error $ "not overwriting existing " ++ destfile ++
|
||||
" (use --force to override)"
|
||||
|
||||
liftIO $ createDirectoryIfMissing True (parentDir destfile)
|
||||
liftIO $ moveFile srcfile destfile
|
||||
Command.Add.perform destfile
|
||||
perform :: DuplicateMode -> FilePath -> FilePath -> CommandPerform
|
||||
perform mode srcfile destfile =
|
||||
case mode of
|
||||
DeDuplicate -> ifM isdup
|
||||
( deletedup
|
||||
, go
|
||||
)
|
||||
CleanDuplicates -> ifM isdup
|
||||
( deletedup
|
||||
, next $ return True
|
||||
)
|
||||
_ -> go
|
||||
where
|
||||
isdup = do
|
||||
backend <- chooseBackend destfile
|
||||
let ks = KeySource srcfile srcfile Nothing
|
||||
v <- genKey ks backend
|
||||
case v of
|
||||
Just (k, _) -> not . null <$> keyLocations k
|
||||
_ -> return False
|
||||
deletedup = do
|
||||
showNote "duplicate"
|
||||
liftIO $ removeFile srcfile
|
||||
next $ return True
|
||||
go = do
|
||||
whenM (liftIO $ doesFileExist destfile) $
|
||||
unlessM (Annex.getState Annex.force) $
|
||||
error $ "not overwriting existing " ++ destfile ++
|
||||
" (use --force to override)"
|
||||
|
||||
liftIO $ createDirectoryIfMissing True (parentDir destfile)
|
||||
liftIO $ if mode == Duplicate
|
||||
then void $ copyFileExternal srcfile destfile
|
||||
else moveFile srcfile destfile
|
||||
Command.Add.perform destfile
|
||||
|
|
|
@ -12,7 +12,6 @@ import Text.Feed.Query
|
|||
import Text.Feed.Types
|
||||
import qualified Data.Set as S
|
||||
import qualified Data.Map as M
|
||||
import Data.Char
|
||||
import Data.Time.Clock
|
||||
|
||||
import Common.Annex
|
||||
|
@ -172,20 +171,15 @@ feedFile tmpl i = Utility.Format.format tmpl $ M.fromList
|
|||
, fieldMaybe "itemdescription" $ getItemDescription $ item i
|
||||
, fieldMaybe "itemrights" $ getItemRights $ item i
|
||||
, fieldMaybe "itemid" $ snd <$> getItemId (item i)
|
||||
, ("extension", map sanitize $ takeExtension $ location i)
|
||||
, ("extension", sanitizeFilePath $ takeExtension $ location i)
|
||||
]
|
||||
where
|
||||
field k v =
|
||||
let s = map sanitize v in
|
||||
let s = sanitizeFilePath v in
|
||||
if null s then (k, "none") else (k, s)
|
||||
fieldMaybe k Nothing = (k, "none")
|
||||
fieldMaybe k (Just v) = field k v
|
||||
|
||||
sanitize c
|
||||
| c == '.' = c
|
||||
| isSpace c || isPunctuation c || c == '/' = '_'
|
||||
| otherwise = c
|
||||
|
||||
{- Called when there is a problem with a feed.
|
||||
- Throws an error if the feed is broken, otherwise shows a warning. -}
|
||||
feedProblem :: URLString -> String -> Annex ()
|
||||
|
|
58
Command/Mirror.hs
Normal file
58
Command/Mirror.hs
Normal file
|
@ -0,0 +1,58 @@
|
|||
{- git-annex command
|
||||
-
|
||||
- Copyright 2013 Joey Hess <joey@kitenet.net>
|
||||
-
|
||||
- Licensed under the GNU GPL version 3 or higher.
|
||||
-}
|
||||
|
||||
module Command.Mirror where
|
||||
|
||||
import Common.Annex
|
||||
import Command
|
||||
import GitAnnex.Options
|
||||
import qualified Command.Move
|
||||
import qualified Command.Drop
|
||||
import qualified Command.Get
|
||||
import qualified Remote
|
||||
import Annex.Content
|
||||
import qualified Annex
|
||||
|
||||
def :: [Command]
|
||||
def = [withOptions fromToOptions $ command "mirror" paramPaths seek
|
||||
SectionCommon "mirror content of files to/from another repository"]
|
||||
|
||||
seek :: [CommandSeek]
|
||||
seek =
|
||||
[ withField toOption Remote.byNameWithUUID $ \to ->
|
||||
withField fromOption Remote.byNameWithUUID $ \from ->
|
||||
withFilesInGit $ whenAnnexed $ start to from
|
||||
]
|
||||
|
||||
start :: Maybe Remote -> Maybe Remote -> FilePath -> (Key, Backend) -> CommandStart
|
||||
start to from file (key, _backend) = do
|
||||
noAuto
|
||||
case (from, to) of
|
||||
(Nothing, Nothing) -> error "specify either --from or --to"
|
||||
(Nothing, Just r) -> mirrorto r
|
||||
(Just r, Nothing) -> mirrorfrom r
|
||||
_ -> error "only one of --from or --to can be specified"
|
||||
where
|
||||
noAuto = whenM (Annex.getState Annex.auto) $
|
||||
error "--auto is not supported for mirror"
|
||||
mirrorto r = ifM (inAnnex key)
|
||||
( Command.Move.toStart r False (Just file) key
|
||||
, do
|
||||
numcopies <- numCopies file
|
||||
Command.Drop.startRemote file numcopies key r
|
||||
)
|
||||
mirrorfrom r = do
|
||||
haskey <- Remote.hasKey r key
|
||||
case haskey of
|
||||
Left _ -> stop
|
||||
Right True -> Command.Get.start' (return True) Nothing key (Just file)
|
||||
Right False -> ifM (inAnnex key)
|
||||
( do
|
||||
numcopies <- numCopies file
|
||||
Command.Drop.startLocal file numcopies key Nothing
|
||||
, stop
|
||||
)
|
|
@ -14,7 +14,6 @@ import qualified Annex
|
|||
import Annex.Content
|
||||
import qualified Remote
|
||||
import Annex.UUID
|
||||
import qualified Option
|
||||
import Logs.Presence
|
||||
import Logs.Transfer
|
||||
import GitAnnex.Options
|
||||
|
@ -24,14 +23,8 @@ def :: [Command]
|
|||
def = [withOptions moveOptions $ command "move" paramPaths seek
|
||||
SectionCommon "move content of files to/from another repository"]
|
||||
|
||||
fromOption :: Option
|
||||
fromOption = Option.field ['f'] "from" paramRemote "source remote"
|
||||
|
||||
toOption :: Option
|
||||
toOption = Option.field ['t'] "to" paramRemote "destination remote"
|
||||
|
||||
moveOptions :: [Option]
|
||||
moveOptions = [fromOption, toOption] ++ keyOptions
|
||||
moveOptions = fromToOptions ++ keyOptions
|
||||
|
||||
seek :: [CommandSeek]
|
||||
seek =
|
||||
|
@ -54,7 +47,7 @@ start' to from move afile key = do
|
|||
(Nothing, Nothing) -> error "specify either --from or --to"
|
||||
(Nothing, Just dest) -> toStart dest move afile key
|
||||
(Just src, Nothing) -> fromStart src move afile key
|
||||
(_ , _) -> error "only one of --from or --to can be specified"
|
||||
_ -> error "only one of --from or --to can be specified"
|
||||
where
|
||||
noAuto = when move $ whenM (Annex.getState Annex.auto) $ error
|
||||
"--auto is not supported for move"
|
||||
|
|
|
@ -12,6 +12,7 @@ import Command
|
|||
import qualified Command.Add
|
||||
import qualified Command.Fix
|
||||
import qualified Git.DiffTree
|
||||
import qualified Git.Ref
|
||||
import Annex.CatFile
|
||||
import Annex.Content.Direct
|
||||
import Git.Sha
|
||||
|
@ -38,7 +39,7 @@ startIndirect file = next $ do
|
|||
|
||||
startDirect :: [String] -> CommandStart
|
||||
startDirect _ = next $ do
|
||||
(diffs, clean) <- inRepo $ Git.DiffTree.diffIndex
|
||||
(diffs, clean) <- inRepo $ Git.DiffTree.diffIndex Git.Ref.headRef
|
||||
forM_ diffs go
|
||||
next $ liftIO clean
|
||||
where
|
||||
|
|
|
@ -101,10 +101,13 @@ mergeLocal :: Git.Ref -> CommandStart
|
|||
mergeLocal branch = go =<< needmerge
|
||||
where
|
||||
syncbranch = syncBranch branch
|
||||
needmerge = do
|
||||
unlessM (inRepo $ Git.Ref.exists syncbranch) $
|
||||
inRepo $ updateBranch syncbranch
|
||||
inRepo $ Git.Branch.changed branch syncbranch
|
||||
needmerge = ifM isBareRepo
|
||||
( return False
|
||||
, do
|
||||
unlessM (inRepo $ Git.Ref.exists syncbranch) $
|
||||
inRepo $ updateBranch syncbranch
|
||||
inRepo $ Git.Branch.changed branch syncbranch
|
||||
)
|
||||
go False = stop
|
||||
go True = do
|
||||
showStart "merge" $ Git.Ref.describe syncbranch
|
||||
|
|
|
@ -15,23 +15,23 @@ import Logs.Location
|
|||
import Logs.Transfer
|
||||
import qualified Remote
|
||||
import Types.Remote
|
||||
import qualified Command.Move
|
||||
import GitAnnex.Options
|
||||
import qualified Option
|
||||
|
||||
def :: [Command]
|
||||
def = [withOptions options $
|
||||
def = [withOptions transferKeyOptions $
|
||||
noCommit $ command "transferkey" paramKey seek SectionPlumbing
|
||||
"transfers a key from or to a remote"]
|
||||
|
||||
options :: [Option]
|
||||
options = [fileOption, Command.Move.fromOption, Command.Move.toOption]
|
||||
transferKeyOptions :: [Option]
|
||||
transferKeyOptions = fileOption : fromToOptions
|
||||
|
||||
fileOption :: Option
|
||||
fileOption = Option.field [] "file" paramFile "the associated file"
|
||||
|
||||
seek :: [CommandSeek]
|
||||
seek = [withField Command.Move.toOption Remote.byNameWithUUID $ \to ->
|
||||
withField Command.Move.fromOption Remote.byNameWithUUID $ \from ->
|
||||
seek = [withField toOption Remote.byNameWithUUID $ \to ->
|
||||
withField fromOption Remote.byNameWithUUID $ \from ->
|
||||
withField fileOption return $ \file ->
|
||||
withKeys $ start to from file]
|
||||
|
||||
|
|
|
@ -21,15 +21,15 @@ import Common.Annex
|
|||
import Command
|
||||
import Logs.Unused
|
||||
import Annex.Content
|
||||
import Utility.FileMode
|
||||
import Logs.Location
|
||||
import Logs.Transfer
|
||||
import qualified Annex
|
||||
import qualified Git
|
||||
import qualified Git.Command
|
||||
import qualified Git.Ref
|
||||
import qualified Git.Branch
|
||||
import qualified Git.LsFiles as LsFiles
|
||||
import qualified Git.LsTree as LsTree
|
||||
import qualified Git.DiffTree as DiffTree
|
||||
import qualified Backend
|
||||
import qualified Remote
|
||||
import qualified Annex.Branch
|
||||
|
@ -241,7 +241,7 @@ withKeysReferenced' mdir initial a = do
|
|||
( return ([], return True)
|
||||
, do
|
||||
top <- fromRepo Git.repoPath
|
||||
inRepo $ LsFiles.inRepo [top]
|
||||
inRepo $ LsFiles.allFiles [top]
|
||||
)
|
||||
Just dir -> inRepo $ LsFiles.inRepo [dir]
|
||||
go v [] = return v
|
||||
|
@ -255,35 +255,48 @@ withKeysReferenced' mdir initial a = do
|
|||
|
||||
withKeysReferencedInGit :: (Key -> Annex ()) -> Annex ()
|
||||
withKeysReferencedInGit a = do
|
||||
rs <- relevantrefs <$> showref
|
||||
forM_ rs (withKeysReferencedInGitRef a)
|
||||
current <- inRepo Git.Branch.currentUnsafe
|
||||
shaHead <- maybe (return Nothing) (inRepo . Git.Ref.sha) current
|
||||
showref >>= mapM_ (withKeysReferencedInGitRef a) .
|
||||
relevantrefs (shaHead, current)
|
||||
where
|
||||
showref = inRepo $ Git.Command.pipeReadStrict [Param "show-ref"]
|
||||
relevantrefs = map (Git.Ref . snd) .
|
||||
nubBy uniqref .
|
||||
relevantrefs headRef = addHead headRef .
|
||||
filter ourbranches .
|
||||
map (separate (== ' ')) . lines
|
||||
uniqref (x, _) (y, _) = x == y
|
||||
map (separate (== ' ')) .
|
||||
lines
|
||||
nubRefs = map (Git.Ref . snd) . nubBy (\(x, _) (y, _) -> x == y)
|
||||
ourbranchend = '/' : show Annex.Branch.name
|
||||
ourbranches (_, b) = not (ourbranchend `isSuffixOf` b)
|
||||
&& not ("refs/synced/" `isPrefixOf` b)
|
||||
addHead headRef refs = case headRef of
|
||||
-- if HEAD diverges from all branches (except the branch it
|
||||
-- points to), run the actions on staged keys (and keys
|
||||
-- that are only present in the work tree if the repo is
|
||||
-- non bare)
|
||||
(Just (Git.Ref x), Just (Git.Ref b))
|
||||
| all (\(x',b') -> x /= x' || b == b') refs ->
|
||||
Git.Ref.headRef
|
||||
: nubRefs (filter ((/= x) . fst) refs)
|
||||
_ -> nubRefs refs
|
||||
|
||||
{- Runs an action on keys referenced in the given Git reference which
|
||||
- differ from those referenced in the index. -}
|
||||
withKeysReferencedInGitRef :: (Key -> Annex ()) -> Git.Ref -> Annex ()
|
||||
withKeysReferencedInGitRef a ref = do
|
||||
showAction $ "checking " ++ Git.Ref.describe ref
|
||||
go <=< inRepo $ LsTree.lsTree ref
|
||||
bare <- isBareRepo
|
||||
(ts,clean) <- inRepo $ if bare
|
||||
then DiffTree.diffIndex ref
|
||||
else DiffTree.diffWorkTree ref
|
||||
let lookAtWorkingTree = not bare && ref == Git.Ref.headRef
|
||||
forM_ ts $ tKey lookAtWorkingTree >=> maybe noop a
|
||||
liftIO $ void clean
|
||||
where
|
||||
go [] = noop
|
||||
go (l:ls)
|
||||
| isSymLink (LsTree.mode l) = do
|
||||
content <- encodeW8 . L.unpack
|
||||
<$> catFile ref (LsTree.file l)
|
||||
case fileKey (takeFileName content) of
|
||||
Nothing -> go ls
|
||||
Just k -> do
|
||||
a k
|
||||
go ls
|
||||
| otherwise = go ls
|
||||
tKey True = Backend.lookupFile . DiffTree.file >=*>
|
||||
fmap fst
|
||||
tKey False = catFile ref . DiffTree.file >=*>
|
||||
fileKey . takeFileName . encodeW8 . L.unpack
|
||||
|
||||
{- Looks in the specified directory for bad/tmp keys, and returns a list
|
||||
- of those that might still have value, or might be stale and removable.
|
||||
|
|
|
@ -18,6 +18,9 @@ import Config.Cost
|
|||
type UnqualifiedConfigKey = String
|
||||
data ConfigKey = ConfigKey String
|
||||
|
||||
instance Show ConfigKey where
|
||||
show (ConfigKey s) = s
|
||||
|
||||
{- Looks up a setting in git config. -}
|
||||
getConfig :: ConfigKey -> String -> Annex String
|
||||
getConfig (ConfigKey key) def = fromRepo $ Git.Config.get key def
|
||||
|
|
|
@ -91,7 +91,7 @@ fromUrl url
|
|||
|
||||
fromUrlStrict :: String -> IO Repo
|
||||
fromUrlStrict url
|
||||
| startswith "file://" url = fromAbsPath $ uriPath u
|
||||
| startswith "file://" url = fromAbsPath $ unEscapeString $ uriPath u
|
||||
| otherwise = newFrom $ Url u
|
||||
where
|
||||
u = fromMaybe bad $ parseURI url
|
||||
|
|
|
@ -10,6 +10,7 @@ module Git.DiffTree (
|
|||
diffTree,
|
||||
diffTreeRecursive,
|
||||
diffIndex,
|
||||
diffWorkTree,
|
||||
) where
|
||||
|
||||
import Numeric
|
||||
|
@ -41,15 +42,26 @@ diffTreeRecursive :: Ref -> Ref -> Repo -> IO ([DiffTreeItem], IO Bool)
|
|||
diffTreeRecursive src dst = getdiff (Param "diff-tree")
|
||||
[Param "-r", Param (show src), Param (show dst)]
|
||||
|
||||
{- Diffs between the repository and index. Does nothing if there is not
|
||||
- yet a commit in the repository. -}
|
||||
diffIndex :: Repo -> IO ([DiffTreeItem], IO Bool)
|
||||
diffIndex repo = do
|
||||
{- Diffs between a tree and the index. Does nothing if there is not yet a
|
||||
- commit in the repository. -}
|
||||
diffIndex :: Ref -> Repo -> IO ([DiffTreeItem], IO Bool)
|
||||
diffIndex ref = diffIndex' ref [Param "--cached"]
|
||||
|
||||
{- Diffs between a tree and the working tree. Does nothing if there is not
|
||||
- yet a commit in the repository, of if the repository is bare. -}
|
||||
diffWorkTree :: Ref -> Repo -> IO ([DiffTreeItem], IO Bool)
|
||||
diffWorkTree ref repo =
|
||||
ifM (Git.Ref.headExists repo)
|
||||
( diffIndex' ref [] repo
|
||||
, return ([], return True)
|
||||
)
|
||||
|
||||
diffIndex' :: Ref -> [CommandParam] -> Repo -> IO ([DiffTreeItem], IO Bool)
|
||||
diffIndex' ref params repo =
|
||||
ifM (Git.Ref.headExists repo)
|
||||
( getdiff (Param "diff-index")
|
||||
[ Param "--cached"
|
||||
, Param $ show Git.Ref.headRef
|
||||
] repo
|
||||
( params ++ [Param $ show ref] )
|
||||
repo
|
||||
, return ([], return True)
|
||||
)
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
module Git.LsFiles (
|
||||
inRepo,
|
||||
notInRepo,
|
||||
allFiles,
|
||||
deleted,
|
||||
modified,
|
||||
staged,
|
||||
|
@ -41,6 +42,11 @@ notInRepo include_ignored l repo = pipeNullSplit params repo
|
|||
| include_ignored = []
|
||||
| otherwise = [Param "--exclude-standard"]
|
||||
|
||||
{- Finds all files in the specified locations, whether checked into git or
|
||||
- not. -}
|
||||
allFiles :: [FilePath] -> Repo -> IO ([FilePath], IO Bool)
|
||||
allFiles l = pipeNullSplit $ Params "ls-files --cached --others -z --" : map File l
|
||||
|
||||
{- Returns a list of files in the specified locations that have been
|
||||
- deleted. -}
|
||||
deleted :: [FilePath] -> Repo -> IO ([FilePath], IO Bool)
|
||||
|
|
|
@ -56,6 +56,7 @@ import qualified Command.Content
|
|||
import qualified Command.Ungroup
|
||||
import qualified Command.Vicfg
|
||||
import qualified Command.Sync
|
||||
import qualified Command.Mirror
|
||||
import qualified Command.AddUrl
|
||||
#ifdef WITH_FEED
|
||||
import qualified Command.ImportFeed
|
||||
|
@ -93,6 +94,7 @@ cmds = concat
|
|||
, Command.Unlock.def
|
||||
, Command.Lock.def
|
||||
, Command.Sync.def
|
||||
, Command.Mirror.def
|
||||
, Command.AddUrl.def
|
||||
#ifdef WITH_FEED
|
||||
, Command.ImportFeed.def
|
||||
|
|
|
@ -65,3 +65,12 @@ keyOptions =
|
|||
, Option ['U'] ["unused"] (NoArg (Annex.setFlag "unused"))
|
||||
"operate on files found by last run of git-annex unused"
|
||||
]
|
||||
|
||||
fromOption :: Option
|
||||
fromOption = Option.field ['f'] "from" paramRemote "source remote"
|
||||
|
||||
toOption :: Option
|
||||
toOption = Option.field ['t'] "to" paramRemote "destination remote"
|
||||
|
||||
fromToOptions :: [Option]
|
||||
fromToOptions = [fromOption, toOption]
|
||||
|
|
21
Logs/Web.hs
21
Logs/Web.hs
|
@ -13,7 +13,10 @@ module Logs.Web (
|
|||
setUrlMissing,
|
||||
urlLog,
|
||||
urlLogKey,
|
||||
knownUrls
|
||||
knownUrls,
|
||||
Downloader(..),
|
||||
getDownloader,
|
||||
setDownloader,
|
||||
) where
|
||||
|
||||
import qualified Data.ByteString.Lazy.Char8 as L
|
||||
|
@ -101,3 +104,19 @@ knownUrls = do
|
|||
where
|
||||
geturls Nothing = return []
|
||||
geturls (Just logsha) = getLog . L.unpack <$> catObject logsha
|
||||
|
||||
data Downloader = DefaultDownloader | QuviDownloader
|
||||
|
||||
{- Determines the downloader for an URL.
|
||||
-
|
||||
- Some URLs are not downloaded by normal means, and this is indicated
|
||||
- by prefixing them with downloader: when they are recorded in the url
|
||||
- logs. -}
|
||||
getDownloader :: URLString -> (URLString, Downloader)
|
||||
getDownloader u = case separate (== ':') u of
|
||||
("quvi", u') -> (u', QuviDownloader)
|
||||
_ -> (u, DefaultDownloader)
|
||||
|
||||
setDownloader :: URLString -> Downloader -> URLString
|
||||
setDownloader u DefaultDownloader = u
|
||||
setDownloader u QuviDownloader = "quvi:" ++ u
|
||||
|
|
16
Remote.hs
16
Remote.hs
|
@ -55,6 +55,7 @@ import Logs.UUID
|
|||
import Logs.Trust
|
||||
import Logs.Location hiding (logStatus)
|
||||
import Remote.List
|
||||
import Config
|
||||
|
||||
{- Map from UUIDs of Remotes to a calculated value. -}
|
||||
remoteMap :: (Remote -> a) -> Annex (M.Map UUID a)
|
||||
|
@ -81,13 +82,16 @@ byName (Just n) = either error Just <$> byName' n
|
|||
|
||||
{- Like byName, but the remote must have a configured UUID. -}
|
||||
byNameWithUUID :: Maybe String -> Annex (Maybe Remote)
|
||||
byNameWithUUID n = do
|
||||
v <- byName n
|
||||
return $ checkuuid <$> v
|
||||
byNameWithUUID = checkuuid <=< byName
|
||||
where
|
||||
checkuuid r
|
||||
| uuid r == NoUUID = error $ "cannot determine uuid for " ++ name r
|
||||
| otherwise = r
|
||||
checkuuid Nothing = return Nothing
|
||||
checkuuid (Just r)
|
||||
| uuid r == NoUUID = do
|
||||
let e = "cannot determine uuid for " ++ name r
|
||||
if remoteAnnexIgnore (gitconfig r)
|
||||
then error $ e ++ " (" ++ show (remoteConfig (repo r) "ignore") ++ " is set)"
|
||||
else error e
|
||||
| otherwise = return $ Just r
|
||||
|
||||
byName' :: String -> Annex (Either String Remote)
|
||||
byName' "" = return $ Left "no remote specified"
|
||||
|
|
|
@ -15,9 +15,11 @@ import Annex.Content
|
|||
import Config
|
||||
import Config.Cost
|
||||
import Logs.Web
|
||||
import qualified Utility.Url as Url
|
||||
import Types.Key
|
||||
import Utility.Metered
|
||||
import qualified Utility.Url as Url
|
||||
import Annex.Quvi
|
||||
import qualified Utility.Quvi as Quvi
|
||||
|
||||
import qualified Data.Map as M
|
||||
|
||||
|
@ -67,7 +69,12 @@ downloadKey key _file dest _p = get =<< getUrls key
|
|||
return False
|
||||
get urls = do
|
||||
showOutput -- make way for download progress bar
|
||||
downloadUrl urls dest
|
||||
untilTrue urls $ \u -> do
|
||||
let (u', downloader) = getDownloader u
|
||||
case downloader of
|
||||
QuviDownloader -> flip downloadUrl dest
|
||||
=<< withQuviOptions Quvi.queryLinks [Quvi.httponly, Quvi.quiet] u'
|
||||
DefaultDownloader -> downloadUrl [u'] dest
|
||||
|
||||
downloadKeyCheap :: Key -> FilePath -> Annex Bool
|
||||
downloadKeyCheap _ _ = return False
|
||||
|
@ -90,6 +97,11 @@ checkKey key = do
|
|||
else return . Right =<< checkKey' key us
|
||||
checkKey' :: Key -> [URLString] -> Annex Bool
|
||||
checkKey' key us = untilTrue us $ \u -> do
|
||||
showAction $ "checking " ++ u
|
||||
headers <- getHttpHeaders
|
||||
liftIO $ Url.check u headers (keySize key)
|
||||
let (u', downloader) = getDownloader u
|
||||
showAction $ "checking " ++ u'
|
||||
case downloader of
|
||||
QuviDownloader ->
|
||||
withQuviOptions Quvi.check [Quvi.httponly, Quvi.quiet] u'
|
||||
DefaultDownloader -> do
|
||||
headers <- getHttpHeaders
|
||||
liftIO $ Url.check u' headers (keySize key)
|
||||
|
|
15
Seek.hs
15
Seek.hs
|
@ -26,6 +26,7 @@ import qualified Option
|
|||
import Config
|
||||
import Logs.Location
|
||||
import Logs.Unused
|
||||
import Annex.CatFile
|
||||
|
||||
seekHelper :: ([FilePath] -> Git.Repo -> IO ([FilePath], IO Bool)) -> [FilePath] -> Annex [FilePath]
|
||||
seekHelper a params = do
|
||||
|
@ -86,12 +87,16 @@ withFilesUnlocked = withFilesUnlocked' LsFiles.typeChanged
|
|||
withFilesUnlockedToBeCommitted :: (FilePath -> CommandStart) -> CommandSeek
|
||||
withFilesUnlockedToBeCommitted = withFilesUnlocked' LsFiles.typeChangedStaged
|
||||
|
||||
{- Unlocked files have changed type from a symlink to a regular file.
|
||||
-
|
||||
- Furthermore, unlocked files used to be a git-annex symlink,
|
||||
- not some other sort of symlink.
|
||||
-}
|
||||
withFilesUnlocked' :: ([FilePath] -> Git.Repo -> IO ([FilePath], IO Bool)) -> (FilePath -> CommandStart) -> CommandSeek
|
||||
withFilesUnlocked' typechanged a params = do
|
||||
-- unlocked files have changed type from a symlink to a regular file
|
||||
typechangedfiles <- seekHelper typechanged params
|
||||
let unlockedfiles = liftIO $ filterM notSymlink typechangedfiles
|
||||
prepFiltered a unlockedfiles
|
||||
withFilesUnlocked' typechanged a params = prepFiltered a unlockedfiles
|
||||
where
|
||||
check f = liftIO (notSymlink f) <&&> isJust <$> catKeyFileHEAD f
|
||||
unlockedfiles = filterM check =<< seekHelper typechanged params
|
||||
|
||||
{- Finds files that may be modified. -}
|
||||
withFilesMaybeModified :: (FilePath -> CommandStart) -> CommandSeek
|
||||
|
|
31
Test.hs
31
Test.hs
|
@ -587,6 +587,37 @@ test_unused env = "git-annex unused/dropunused" ~: intmpclonerepoInDirect env $
|
|||
checkunused [] "after dropunused"
|
||||
not <$> git_annex env "dropunused" ["--force", "10", "501"] @? "dropunused failed to fail on bogus numbers"
|
||||
|
||||
-- unused used to miss symlinks that were not staged and pointed
|
||||
-- at annexed content, and think that content was unused
|
||||
writeFile "unusedfile" "unusedcontent"
|
||||
git_annex env "add" ["unusedfile"] @? "add of unusedfile failed"
|
||||
unusedfilekey <- annexeval $ findkey "unusedfile"
|
||||
renameFile "unusedfile" "unusedunstagedfile"
|
||||
boolSystem "git" [Params "rm -qf", File "unusedfile"] @? "git rm failed"
|
||||
checkunused [] "with unstaged link"
|
||||
removeFile "unusedunstagedfile"
|
||||
checkunused [unusedfilekey] "with unstaged link deleted"
|
||||
|
||||
-- unused used to miss symlinks that were deleted or modified
|
||||
-- manually, but commited as such.
|
||||
writeFile "unusedfile" "unusedcontent"
|
||||
git_annex env "add" ["unusedfile"] @? "add of unusedfile failed"
|
||||
boolSystem "git" [Param "add", File "unusedfile"] @? "git add failed"
|
||||
unusedfilekey' <- annexeval $ findkey "unusedfile"
|
||||
checkunused [] "with staged deleted link"
|
||||
boolSystem "git" [Params "rm -qf", File "unusedfile"] @? "git rm failed"
|
||||
checkunused [unusedfilekey'] "with staged link deleted"
|
||||
|
||||
-- unused used to miss symlinks that were deleted or modified
|
||||
-- manually, but not staged as such.
|
||||
writeFile "unusedfile" "unusedcontent"
|
||||
git_annex env "add" ["unusedfile"] @? "add of unusedfile failed"
|
||||
boolSystem "git" [Param "add", File "unusedfile"] @? "git add failed"
|
||||
unusedfilekey'' <- annexeval $ findkey "unusedfile"
|
||||
checkunused [] "with unstaged deleted link"
|
||||
removeFile "unusedfile"
|
||||
checkunused [unusedfilekey''] "with unstaged link deleted"
|
||||
|
||||
where
|
||||
checkunused expectedkeys desc = do
|
||||
git_annex env "unused" [] @? "unused failed"
|
||||
|
|
|
@ -37,6 +37,7 @@ data GitConfig = GitConfig
|
|||
, annexAutoCommit :: Bool
|
||||
, annexDebug :: Bool
|
||||
, annexWebOptions :: [String]
|
||||
, annexQuviOptions :: [String]
|
||||
, annexWebDownloadCommand :: Maybe String
|
||||
, annexCrippledFileSystem :: Bool
|
||||
, annexLargeFiles :: Maybe String
|
||||
|
@ -62,6 +63,7 @@ extractGitConfig r = GitConfig
|
|||
, annexAutoCommit = getbool (annex "autocommit") True
|
||||
, annexDebug = getbool (annex "debug") False
|
||||
, annexWebOptions = getwords (annex "web-options")
|
||||
, annexQuviOptions = getwords (annex "quvi-options")
|
||||
, annexWebDownloadCommand = getmaybe (annex "web-download-command")
|
||||
, annexCrippledFileSystem = getbool (annex "crippledfilesystem") False
|
||||
, annexLargeFiles = getmaybe (annex "largefiles")
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
module Utility.Monad where
|
||||
|
||||
import Data.Maybe
|
||||
import Control.Monad (liftM)
|
||||
import Control.Monad
|
||||
|
||||
{- Return the first value from a list, if any, satisfying the given
|
||||
- predicate -}
|
||||
|
@ -53,6 +53,16 @@ ma <&&> mb = ifM ma ( mb , return False )
|
|||
infixr 3 <&&>
|
||||
infixr 2 <||>
|
||||
|
||||
{- Left-to-right Kleisli composition with a pure left/right hand side. -}
|
||||
(*>=>) :: Monad m => (a -> b) -> (b -> m c) -> (a -> m c)
|
||||
f *>=> g = return . f >=> g
|
||||
|
||||
(>=*>) :: Monad m => (a -> m b) -> (b -> c) -> (a -> m c)
|
||||
f >=*> g = f >=> return . g
|
||||
|
||||
{- Same fixity as >=> and <=< -}
|
||||
infixr 1 *>=>, >=*>
|
||||
|
||||
{- Runs an action, passing its value to an observer before returning it. -}
|
||||
observe :: Monad m => (a -> m b) -> m a -> m a
|
||||
observe observer a = do
|
||||
|
|
|
@ -14,6 +14,7 @@ import System.FilePath
|
|||
import System.Directory
|
||||
import Data.List
|
||||
import Data.Maybe
|
||||
import Data.Char
|
||||
import Control.Applicative
|
||||
|
||||
#ifdef mingw32_HOST_OS
|
||||
|
@ -236,3 +237,18 @@ fileNameLengthLimit dir = do
|
|||
else return $ minimum [l, 255]
|
||||
where
|
||||
#endif
|
||||
|
||||
{- Given a string that we'd like to use as the basis for FilePath, but that
|
||||
- was provided by a third party and is not to be trusted, returns the closest
|
||||
- sane FilePath.
|
||||
-
|
||||
- All spaces and punctuation are replaced with '_', except for '.'
|
||||
- "../" will thus turn into ".._", which is safe.
|
||||
-}
|
||||
sanitizeFilePath :: String -> FilePath
|
||||
sanitizeFilePath = map sanitize
|
||||
where
|
||||
sanitize c
|
||||
| c == '.' = c
|
||||
| isSpace c || isPunctuation c || c == '/' = '_'
|
||||
| otherwise = c
|
||||
|
|
81
Utility/Quvi.hs
Normal file
81
Utility/Quvi.hs
Normal file
|
@ -0,0 +1,81 @@
|
|||
{- querying quvi (import qualified)
|
||||
-
|
||||
- Copyright 2013 Joey Hess <joey@kitenet.net>
|
||||
-
|
||||
- Licensed under the GNU GPL version 3 or higher.
|
||||
-}
|
||||
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
|
||||
module Utility.Quvi where
|
||||
|
||||
import Common
|
||||
import Utility.Url
|
||||
|
||||
import Data.Aeson
|
||||
import Data.ByteString.Lazy.UTF8 (fromString)
|
||||
|
||||
data Page = Page
|
||||
{ pageTitle :: String
|
||||
, pageLinks :: [Link]
|
||||
} deriving (Show)
|
||||
|
||||
data Link = Link
|
||||
{ linkSuffix :: String
|
||||
, linkUrl :: URLString
|
||||
} deriving (Show)
|
||||
|
||||
instance FromJSON Page where
|
||||
parseJSON (Object v) = Page
|
||||
<$> v .: "page_title"
|
||||
<*> v .: "link"
|
||||
parseJSON _ = mzero
|
||||
|
||||
instance FromJSON Link where
|
||||
parseJSON (Object v) = Link
|
||||
<$> v .: "file_suffix"
|
||||
<*> v .: "url"
|
||||
parseJSON _ = mzero
|
||||
|
||||
type Query a = [CommandParam] -> URLString -> IO a
|
||||
|
||||
{- Throws an error when quvi is not installed. -}
|
||||
forceQuery :: Query (Maybe Page)
|
||||
forceQuery ps url = query' ps url `catchNonAsync` onerr
|
||||
where
|
||||
onerr _ = ifM (inPath "quvi")
|
||||
( error "quvi failed"
|
||||
, error "quvi is not installed"
|
||||
)
|
||||
|
||||
{- Returns Nothing if the page is not a video page, or quvi is not
|
||||
- installed. -}
|
||||
query :: Query (Maybe Page)
|
||||
query ps url = flip catchNonAsync (const $ return Nothing) (query' ps url)
|
||||
|
||||
query' :: Query (Maybe Page)
|
||||
query' ps url = decode . fromString
|
||||
<$> readProcess "quvi" (toCommand $ ps ++ [Param url])
|
||||
|
||||
queryLinks :: Query [URLString]
|
||||
queryLinks ps url = maybe [] (map linkUrl . pageLinks) <$> query ps url
|
||||
|
||||
{- Checks if quvi can still find a download link for an url.
|
||||
- If quvi is not installed, returns False. -}
|
||||
check :: Query Bool
|
||||
check ps url = maybe False (not . null . pageLinks) <$> query ps url
|
||||
|
||||
{- Checks if an url is supported by quvi, without hitting it, or outputting
|
||||
- anything. Also returns False if quvi is not installed. -}
|
||||
supported :: URLString -> IO Bool
|
||||
supported url = boolSystem "quvi" [Params "-v mute --support", Param url]
|
||||
|
||||
quiet :: CommandParam
|
||||
quiet = Params "-v quiet"
|
||||
|
||||
noredir :: CommandParam
|
||||
noredir = Params "-e -resolve"
|
||||
|
||||
{- Only return http results, not streaming protocols. -}
|
||||
httponly :: CommandParam
|
||||
httponly = Params "-c http"
|
|
@ -110,7 +110,7 @@ download' quiet url headers options file =
|
|||
_ -> return False
|
||||
where
|
||||
headerparams = map (\h -> Param $ "--header=" ++ h) headers
|
||||
wget = go "wget" $ headerparams ++ quietopt "-q" ++ [Params "-c -O"]
|
||||
wget = go "wget" $ headerparams ++ quietopt "-q" ++ [Params "--clobber -c -O"]
|
||||
{- Uses the -# progress display, because the normal
|
||||
- one is very confusing when resuming, showing
|
||||
- the remainder to download as the whole file,
|
||||
|
|
30
debian/changelog
vendored
30
debian/changelog
vendored
|
@ -1,3 +1,33 @@
|
|||
git-annex (4.20130827) unstable; urgency=low
|
||||
|
||||
* Youtube support! (And 53 other video hosts). When quvi is installed,
|
||||
git-annex addurl automatically uses it to detect when an page is
|
||||
a video, and downloads the video file.
|
||||
* web special remote: Also support using quvi, for getting files,
|
||||
or checking if files exist in the web.
|
||||
* unused: Is now a minimum of 30 times faster, and typically many
|
||||
more times than that (when a repository has several branches).
|
||||
(Thanks, guilhem for the patch.)
|
||||
* unused: Fix bugs in two edge cases involving manually staged changes.
|
||||
(Thanks, guilhem for the patch.)
|
||||
* Android: Fix bug in terminal app that caused it to spin using much
|
||||
CPU and battery. This problem was introduced in version 4.20130601.
|
||||
* sync, merge: Bug fix: Don't try to merge into master when in a bare repo.
|
||||
* import: Add options to control handling of duplicate files:
|
||||
--duplicate, --deduplicate, and --clean-duplicates
|
||||
* mirror: New command, makes two repositories contain the same set of files.
|
||||
* Set --clobber when running wget to ensure resuming works properly.
|
||||
* Unescape characters in 'file://...' URIs. (Thanks, guilhem for the patch.)
|
||||
* Better error message when trying to use a git remote that has annex.ignore
|
||||
set.
|
||||
* Fix bug that caused typechanged symlinks to be assumed to be unlocked
|
||||
files, so they were added to the annex by the pre-commit hook.
|
||||
* Debian: Run the builtin test suite as an autopkgtest.
|
||||
* Debian: Recommend ssh-askpass, which ssh will use when the assistant
|
||||
is run w/o a tty. Closes: #719832
|
||||
|
||||
-- Joey Hess <joeyh@debian.org> Tue, 27 Aug 2013 11:03:00 -0400
|
||||
|
||||
git-annex (4.20130815~bpo70+1) wheezy-backports; urgency=low
|
||||
|
||||
* assistant, watcher: .gitignore files and other git ignores are now
|
||||
|
|
4
debian/control
vendored
4
debian/control
vendored
|
@ -20,6 +20,7 @@ Build-Depends:
|
|||
libghc-dlist-dev,
|
||||
libghc-uuid-dev,
|
||||
libghc-json-dev,
|
||||
libghc-aeson-dev,
|
||||
libghc-ifelse-dev,
|
||||
libghc-bloomfilter-dev,
|
||||
libghc-edit-distance-dev,
|
||||
|
@ -59,6 +60,7 @@ Maintainer: Joey Hess <joeyh@debian.org>
|
|||
Standards-Version: 3.9.4
|
||||
Vcs-Git: git://git.kitenet.net/git-annex
|
||||
Homepage: http://git-annex.branchable.com/
|
||||
XS-Testsuite: autopkgtest
|
||||
|
||||
Package: git-annex
|
||||
Architecture: any
|
||||
|
@ -69,7 +71,7 @@ Depends: ${misc:Depends}, ${shlibs:Depends},
|
|||
wget,
|
||||
curl,
|
||||
openssh-client (>= 1:5.6p1)
|
||||
Recommends: lsof, gnupg, bind9-host
|
||||
Recommends: lsof, gnupg, bind9-host, ssh-askpass, quvi
|
||||
Suggests: graphviz, bup, libnss-mdns
|
||||
Description: manage files with git, without checking their contents into git
|
||||
git-annex allows managing files with git, without checking the file
|
||||
|
|
4
debian/tests/basics
vendored
Normal file
4
debian/tests/basics
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
#!/bin/sh
|
||||
testdir="$(mktemp -d)"
|
||||
cd "$testdir"
|
||||
exec git-annex test
|
4
debian/tests/control
vendored
Normal file
4
debian/tests/control
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
Tests: basics
|
||||
Depends: @, git, rsync, gnupg
|
||||
Restrictions: allow-stderr
|
||||
|
|
@ -14,7 +14,7 @@ can use different ones for different files.
|
|||
lead to better deduplication but can confuse some programs.
|
||||
* `WORM` ("Write Once, Read Many") This assumes that any file with
|
||||
the same basename, size, and modification time has the same content.
|
||||
This is the the least expensive backend, recommended for really large
|
||||
This is the least expensive backend, recommended for really large
|
||||
files or slow systems.
|
||||
* `SHA512`, `SHA512E` -- Best currently available hash, for the very paranoid.
|
||||
* `SHA1`, `SHA1E` -- Smaller hash than `SHA256` for those who want a checksum
|
||||
|
|
17
doc/bugs/400_mode_leakage.mdwn
Normal file
17
doc/bugs/400_mode_leakage.mdwn
Normal file
|
@ -0,0 +1,17 @@
|
|||
git-annex tends to preserve files that are added to an annex with
|
||||
a mode such as 400. (Happens to me sometimes with email attachments.)
|
||||
As these files are rsynced around, and end up on eg, a
|
||||
publically visible repo with a webserver frontend, or a repo that is
|
||||
acessible to a whole group of users, they will not be readable.
|
||||
|
||||
I think it would make sense for git-annex to normalize file permissions
|
||||
when adding them. Of course, there's some tension here with generally
|
||||
storing file metadata when possible. Perhaps the normalization should only
|
||||
ensure that group and other have read access?
|
||||
|
||||
(Security: We can assume that a repo that is not intended to be public is
|
||||
in a 700 directory. And since git-annex cannot preserve file modes when
|
||||
files transit through a special remote, using modes to limit access to
|
||||
individual files is not wise.)
|
||||
|
||||
--[[Joey]]
|
|
@ -0,0 +1,12 @@
|
|||
[[!comment format=mdwn
|
||||
username="http://joeyh.name/"
|
||||
ip="4.154.0.63"
|
||||
subject="comment 3"
|
||||
date="2013-08-24T19:27:57Z"
|
||||
content="""
|
||||
Leonardo, you made me boot up my windows machine just to check if cygwin git truncated files at the colon. It does not.
|
||||
|
||||
AFAIK, Cygwin transliterates colons to another unicode character or something like that. I would be highly surprised if the Cygwin people consider this feature to be a bug.
|
||||
|
||||
Since you need Cygwin to build git-annex on Windows anyway (though not to run it!), this remains WONTFIX.
|
||||
"""]]
|
158
doc/bugs/Can__39__t_start_on_Cyanogenmod_10.2_nightly.mdwn
Normal file
158
doc/bugs/Can__39__t_start_on_Cyanogenmod_10.2_nightly.mdwn
Normal file
|
@ -0,0 +1,158 @@
|
|||
### Please describe the problem.
|
||||
The android app won't start on Cyanogenmod 10.2. Not sure if this is cyanogenmod specific or if it is because the underlying android is now version 4.3
|
||||
|
||||
### What steps will reproduce the problem?
|
||||
Install the apk and start the program
|
||||
|
||||
### What version of git-annex are you using? On what operating system?
|
||||
A 7 day old nightly as of this post(can't get specific number since it won't run)
|
||||
|
||||
### Please provide any additional information below.
|
||||
|
||||
Tested this on both a samsung galaxy S and a samsung galaxy note 2. With different nightlies of cyanogenmod 10.2
|
||||
|
||||
[[!format sh """
|
||||
# If you can, paste a complete transcript of the problem occurring here.
|
||||
# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
|
||||
|
||||
Falling back to hardcoded app location; cannot find expected files in /data/app-lib
|
||||
git annex webapp
|
||||
u0_a115@android:/sdcard/git-annex.home $ git annex webapp
|
||||
CANNOT LINK EXECUTABLE: git-annex invalid R_ARM_COPY relocation against DT_SYMBOLIC shared library libc.so (built with -Bsymbolic?)
|
||||
1|u0_a115@android:/sdcard/git-annex.home $
|
||||
|
||||
---
|
||||
|
||||
|
||||
cat git-annex-install.log
|
||||
|
||||
Installation starting to /data/data/ga.androidterm
|
||||
34c88243533e9b0a725ebe33533d990e628dc44b
|
||||
installing busybox
|
||||
installing git-annex
|
||||
installing git-shell
|
||||
installing git-upload-pack
|
||||
installing git
|
||||
installing gpg
|
||||
installing rsync
|
||||
installing ssh
|
||||
installing ssh-keygen
|
||||
linking ./libexec/git-core/git-config to git
|
||||
linking ./libexec/git-core/git-fetch to git
|
||||
linking ./libexec/git-core/git-fsck to git
|
||||
linking ./libexec/git-core/git-unpack-file to git
|
||||
linking ./libexec/git-core/git-get-tar-commit-id to git
|
||||
linking ./libexec/git-core/git-fmt-merge-msg to git
|
||||
linking ./libexec/git-core/git-push to git
|
||||
linking ./libexec/git-core/git-for-each-ref to git
|
||||
linking ./libexec/git-core/git-pack-redundant to git
|
||||
linking ./libexec/git-core/git-mv to git
|
||||
linking ./libexec/git-core/git-ls-remote to git
|
||||
linking ./libexec/git-core/git-prune-packed to git
|
||||
linking ./libexec/git-core/git-apply to git
|
||||
linking ./libexec/git-core/git-check-ignore to git
|
||||
linking ./libexec/git-core/git-log to git
|
||||
linking ./libexec/git-core/git-cherry-pick to git
|
||||
linking ./libexec/git-core/git-diff-files to git
|
||||
linking ./libexec/git-core/git-commit-tree to git
|
||||
linking ./libexec/git-core/git-index-pack to git
|
||||
linking ./libexec/git-core/git-reflog to git
|
||||
linking ./libexec/git-core/git-merge-index to git
|
||||
linking ./libexec/git-core/git-column to git
|
||||
linking ./libexec/git-core/git-checkout-index to git
|
||||
linking ./libexec/git-core/git-diff-index to git
|
||||
linking ./libexec/git-core/git-count-objects to git
|
||||
linking ./libexec/git-core/git-fast-export to git
|
||||
linking ./libexec/git-core/git-fetch-pack to git
|
||||
linking ./libexec/git-core/git-merge-file to git
|
||||
linking ./libexec/git-core/git-init to git
|
||||
linking ./libexec/git-core/git-remote to git
|
||||
linking ./libexec/git-core/git-init-db to git
|
||||
linking ./libexec/git-core/git-ls-tree to git
|
||||
linking ./libexec/git-core/git-merge-subtree to git
|
||||
linking ./libexec/git-core/git-rev-parse to git
|
||||
linking ./libexec/git-core/git-bundle to git
|
||||
linking ./libexec/git-core/git-prune to git
|
||||
linking ./libexec/git-core/git-peek-remote to git
|
||||
linking ./libexec/git-core/git-tar-tree to git
|
||||
linking ./libexec/git-core/git-describe to git
|
||||
linking ./libexec/git-core/git-update-index to git
|
||||
linking ./libexec/git-core/git to git
|
||||
linking ./libexec/git-core/git-revert to git
|
||||
linking ./libexec/git-core/git-show-ref to git
|
||||
linking ./libexec/git-core/git-upload-archive to git
|
||||
linking ./libexec/git-core/git-add to git
|
||||
linking ./libexec/git-core/git-verify-tag to git
|
||||
linking ./libexec/git-core/git-format-patch to git
|
||||
linking ./libexec/git-core/git-show-branch to git
|
||||
linking ./libexec/git-core/git-remote-fd to git
|
||||
linking ./libexec/git-core/git-pack-refs to git
|
||||
linking ./libexec/git-core/git-replace to git
|
||||
linking ./libexec/git-core/git-pack-objects to git
|
||||
linking ./libexec/git-core/git-notes to git
|
||||
linking ./libexec/git-core/git-tag to git
|
||||
linking ./libexec/git-core/git-var to git
|
||||
linking ./libexec/git-core/git-help to git
|
||||
linking ./libexec/git-core/git-gc to git
|
||||
linking ./libexec/git-core/git-check-ref-format to git
|
||||
linking ./libexec/git-core/git-shortlog to git
|
||||
linking ./libexec/git-core/git-stage to git
|
||||
linking ./libexec/git-core/git-mktree to git
|
||||
linking ./libexec/git-core/git-merge-recursive to git
|
||||
linking ./libexec/git-core/git-grep to git
|
||||
linking ./libexec/git-core/git-clean to git
|
||||
linking ./libexec/git-core/git-merge-base to git
|
||||
linking ./libexec/git-core/git-repo-config to git
|
||||
linking ./libexec/git-core/git-hash-object to git
|
||||
linking ./libexec/git-core/git-read-tree to git
|
||||
linking ./libexec/git-core/git-rm to git
|
||||
linking ./libexec/git-core/git-fsck-objects to git
|
||||
linking ./libexec/git-core/git-ls-files to git
|
||||
linking ./libexec/git-core/git-mktag to git
|
||||
linking ./libexec/git-core/git-stripspace to git
|
||||
linking ./libexec/git-core/git-mailsplit to git
|
||||
linking ./libexec/git-core/git-diff-tree to git
|
||||
linking ./libexec/git-core/git-merge-ours to git
|
||||
linking ./libexec/git-core/git-cherry to git
|
||||
linking ./libexec/git-core/git-checkout to git
|
||||
linking ./libexec/git-core/git-rev-list to git
|
||||
linking ./libexec/git-core/git-write-tree to git
|
||||
linking ./libexec/git-core/git-update-ref to git
|
||||
linking ./libexec/git-core/git-blame to git
|
||||
linking ./libexec/git-core/git-archive to git
|
||||
linking ./libexec/git-core/git-update-server-info to git
|
||||
linking ./libexec/git-core/git-merge-tree to git
|
||||
linking ./libexec/git-core/git-show to git
|
||||
linking ./libexec/git-core/git-remote-ext to git
|
||||
linking ./libexec/git-core/git-merge to git
|
||||
linking ./libexec/git-core/git-name-rev to git
|
||||
linking ./libexec/git-core/git-bisect--helper to git
|
||||
linking ./libexec/git-core/git-clone to git
|
||||
linking ./libexec/git-core/git-symbolic-ref to git
|
||||
linking ./libexec/git-core/git-send-pack to git
|
||||
linking ./libexec/git-core/git-commit to git
|
||||
linking ./libexec/git-core/git-mailinfo to git
|
||||
linking ./libexec/git-core/git-credential to git
|
||||
linking ./libexec/git-core/git-diff to git
|
||||
linking ./libexec/git-core/git-patch-id to git
|
||||
linking ./libexec/git-core/git-rerere to git
|
||||
linking ./libexec/git-core/git-branch to git
|
||||
linking ./libexec/git-core/git-reset to git
|
||||
linking ./libexec/git-core/git-receive-pack to git
|
||||
linking ./libexec/git-core/git-verify-pack to git
|
||||
linking ./libexec/git-core/git-unpack-objects to git
|
||||
linking ./libexec/git-core/git-check-attr to git
|
||||
linking ./libexec/git-core/git-whatchanged to git
|
||||
linking ./libexec/git-core/git-status to git
|
||||
linking ./libexec/git-core/git-cat-file to git
|
||||
linking ./libexec/git-core/git-annotate to git
|
||||
linking ./bin/git-upload-archive to git
|
||||
linking ./bin/git-receive-pack to git
|
||||
linking ./libexec/git-core/git-shell to git-shell
|
||||
linking ./libexec/git-core/git-upload-pack to git-upload-pack
|
||||
Installation complete
|
||||
|
||||
# End of transcript or log.
|
||||
"""]]
|
||||
|
||||
> [[dup|done]] of [[git-annex_broken_on_Android_4.3]].--[[Joey]]
|
|
@ -31,3 +31,5 @@ Linux nas 3.8.0-27-generic #40-Ubuntu SMP Tue Jul 9 00:19:35 UTC 2013 i686 i686
|
|||
|
||||
# End of transcript or log.
|
||||
"""]]
|
||||
|
||||
> This is a different effect of the same bug in [[Hangs on creating repository when using --listen]]. Closing as [[dup|done]] --[[Joey]]
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
[[!comment format=mdwn
|
||||
username="http://joeyh.name/"
|
||||
ip="4.154.0.63"
|
||||
subject="comment 1"
|
||||
date="2013-08-24T18:49:18Z"
|
||||
content="""
|
||||
git-annex assumes that it can make a stable symlink from a file in the working tree to a file in the .git directory. There are several ways to break this. One, as noted, is sometimes using a repository as a submodule, and sometimes not. Another would be to play around with `GIT_DIR`.
|
||||
|
||||
I don't see a way git-annex can support those use cases, at least in indirect mode.
|
||||
|
||||
It does seem like, in direct mode, it should just work. git-annex will commit various symlinks to git, but these symlinks will never be followed to get at the content of a file, since direct mode arranges for the content to be directly present in the working tree.
|
||||
"""]]
|
|
@ -0,0 +1,10 @@
|
|||
[[!comment format=mdwn
|
||||
username="konubinix"
|
||||
ip="82.243.233.186"
|
||||
subject="Thanks"
|
||||
date="2013-08-26T06:25:19Z"
|
||||
content="""
|
||||
Thanks for the reply.
|
||||
|
||||
Also thanks for this great tool (Though I am not sure I truelly realize the true power of git annex yet).
|
||||
"""]]
|
|
@ -0,0 +1,8 @@
|
|||
[[!comment format=mdwn
|
||||
username="http://joeyh.name/"
|
||||
ip="4.154.0.63"
|
||||
subject="comment 2"
|
||||
date="2013-08-24T18:52:11Z"
|
||||
content="""
|
||||
This also affects creating a second repository in the webapp, not just the repository creation at first startup.
|
||||
"""]]
|
|
@ -0,0 +1,52 @@
|
|||
### Please describe the problem.
|
||||
|
||||
(small) identical files fail to unannex, leaving broken symlinks, except for the first copy.
|
||||
|
||||
### What steps will reproduce the problem?
|
||||
|
||||
* Have multiple identical files. For example, run this, which creates four 6-byte files:
|
||||
|
||||
> echo Hello>file1.txt && cp file1.txt file2.txt && cp file1.txt file3.txt && cp file1.txt file4.txt
|
||||
|
||||
* Run this (git init needs credentials to have been specified though)
|
||||
|
||||
> git init && git-annex init && git-annex add
|
||||
|
||||
Now there are 4 symlinks, pointing to the same object:
|
||||
|
||||
> lrwxrwxrwx 1 186 Aug 16 15:54 file1.txt -> .git/annex/objects/31/XV/SHA256E-s6--66a045b452102c59d840ec097d59d9467e13a3f34f6494e539ffd32c1bb35f18.txt/SHA256E-s6--66a045b452102c59d840ec097d59d9467e13a3f34f6494e539ffd32c1bb35f18.txt
|
||||
|
||||
* Optionally run "git commit -a". It doesn't affect the outcome.
|
||||
|
||||
* Run git-annex unannex
|
||||
|
||||
> $ git annex unannex
|
||||
> unannex file1.txt ok
|
||||
> (Recording state in git...)
|
||||
> $
|
||||
|
||||
Now file1.txt is a normal 6-byte file again, but 2, 3, and 4 are broken symlinks:
|
||||
|
||||
-rw-r----- 1 6 Aug 16 15:54 file1.txt
|
||||
lrwxrwxrwx 1 186 Aug 16 15:54 file2.txt -> .git/annex/objects/31/XV/SHA256E-s6--66a045b452102c59d840ec097d59d9467e13a3f34f6494e539ffd32c1bb35f18.txt/SHA256E-s6--66a045b452102c59d840ec097d59d9467e13a3f34f6494e539ffd32c1bb35f18.txt
|
||||
lrwxrwxrwx 1 186 Aug 16 15:54 file3.txt -> .git/annex/objects/31/XV/SHA256E-s6--66a045b452102c59d840ec097d59d9467e13a3f34f6494e539ffd32c1bb35f18.txt/SHA256E-s6--66a045b452102c59d840ec097d59d9467e13a3f34f6494e539ffd32c1bb35f18.txt
|
||||
lrwxrwxrwx 1 186 Aug 16 15:54 file4.txt -> .git/annex/objects/31/XV/SHA256E-s6--66a045b452102c59d840ec097d59d9467e13a3f34f6494e539ffd32c1bb35f18.txt/SHA256E-s6--66a045b452102c59d840ec097d59d9467e13a3f34f6494e539ffd32c1bb35f18.txt
|
||||
|
||||
$ git-annex fsck
|
||||
fsck file2.txt
|
||||
** No known copies exist of file2.txt
|
||||
failed
|
||||
fsck file3.txt
|
||||
** No known copies exist of file3.txt
|
||||
failed
|
||||
fsck file4.txt
|
||||
** No known copies exist of file4.txt
|
||||
failed
|
||||
git-annex: fsck: 3 failed
|
||||
|
||||
|
||||
### What version of git-annex are you using? On what operating system?
|
||||
|
||||
git-annex 4.20130802 package
|
||||
|
||||
on Debian GNU/Linux jessie/sid (testing), amd64.
|
|
@ -0,0 +1,15 @@
|
|||
[[!comment format=mdwn
|
||||
username="http://openid.yandex.ru/deletesoftware/"
|
||||
nickname="deletesoftware"
|
||||
subject="duplicate"
|
||||
date="2013-08-16T14:52:23Z"
|
||||
content="""
|
||||
It's the same as these:
|
||||
|
||||
* [Large unannex operations result in stale symlinks and data loss](http://git-annex.branchable.com/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/)
|
||||
* [unannex removes object even if referred to by others](http://git-annex.branchable.com/bugs/unannex_removes_object_even_if_referred_to_by_others/)
|
||||
* [annex unannex/uninit should handle copies](http://git-annex.branchable.com/bugs/annex_unannex__47__uninit_should_handle_copies/)
|
||||
|
||||
and (as gernot mentioned) according to those, has a workaround of \"git annex unannex --fast\". Of course, it's not convenient to need to find a workaround, and to notice a potential dataloss issue…
|
||||
|
||||
"""]]
|
|
@ -59,4 +59,6 @@ My .gitconfig is as follows:
|
|||
"""]]
|
||||
|
||||
> Closing this because all autobuilders have been upgraded
|
||||
> to a more recent version of git. [[done]] --[[Joey]]
|
||||
> to a more recent version of git. done --[[Joey]]
|
||||
>> Reopened, because the Linux autobuilds have been downgraded to Debian
|
||||
>> stable and have this problem again. --[[Joey]]
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
[[!comment format=mdwn
|
||||
username="https://www.google.com/accounts/o8/id?id=AItOawmTNrhkVQ26GBLaLD5-zNuEiR8syTj4mI8"
|
||||
nickname="Juan"
|
||||
subject="Still happening in the linux autobuild (08/22/2013)"
|
||||
date="2013-08-23T02:04:42Z"
|
||||
content="""
|
||||
I've seen that git-annex for linux is still coming with git 1.7, which causes problems with my installed git (1.8.1.2).
|
||||
Wasn't that corrected in autobuilds?
|
||||
Thanks in advance.
|
||||
Keep up the good work.
|
||||
Regards,
|
||||
Juan
|
||||
"""]]
|
|
@ -0,0 +1,8 @@
|
|||
[[!comment format=mdwn
|
||||
username="http://joeyh.name/"
|
||||
ip="4.154.0.63"
|
||||
subject="comment 4"
|
||||
date="2013-08-23T17:41:32Z"
|
||||
content="""
|
||||
It was done for the autobuilds, but then I switched them to build using Debian stable, which still has git 1.7, and there is not currently a backport of a newer git to stable for me to use.
|
||||
"""]]
|
17
doc/bugs/Problem_when_dropping_unused_files.mdwn
Normal file
17
doc/bugs/Problem_when_dropping_unused_files.mdwn
Normal file
|
@ -0,0 +1,17 @@
|
|||
### Please describe the problem.
|
||||
|
||||
While dropping 19 unused files from an annex, I got this error:
|
||||
|
||||
error: invalid object 100644 c873416e78db4dd94b6ab40470d6fe99b2ecb8bd for '002/0a6/SHA256E-s427690--03aeabcde841b66168b72de80098d74e047f3ffc832d4bbefa1f2f70ee6c92f8.jpg.log'
|
||||
fatal: git-write-tree: error building trees
|
||||
git-annex: failed to read sha from git write-tree
|
||||
|
||||
I've actually seen this before, a few months ago.
|
||||
|
||||
### What steps will reproduce the problem?
|
||||
|
||||
I have no idea, but once it happens I can't interact with unused files anymore. Also, `git annex fsck` now reports this same problem as well.
|
||||
|
||||
### What version of git-annex are you using? On what operating system?
|
||||
|
||||
git-annex version: 4.20130815, OS X 10.8.4
|
|
@ -0,0 +1,10 @@
|
|||
[[!comment format=mdwn
|
||||
username="https://me.yahoo.com/a/2grhJvAC049fJnvALDXek.6MRZMTlg--#eec89"
|
||||
nickname="John"
|
||||
subject="comment 1"
|
||||
date="2013-08-24T05:01:37Z"
|
||||
content="""
|
||||
The following command restored some sanity:
|
||||
|
||||
find .git/annex/ -name '*.log' -delete
|
||||
"""]]
|
|
@ -0,0 +1,8 @@
|
|||
[[!comment format=mdwn
|
||||
username="arand"
|
||||
ip="130.243.226.21"
|
||||
subject="comment 2"
|
||||
date="2013-08-24T11:40:54Z"
|
||||
content="""
|
||||
If I recall, such files being stored in the annex object store is a result of using direct mode?
|
||||
"""]]
|
|
@ -0,0 +1,12 @@
|
|||
[[!comment format=mdwn
|
||||
username="http://joeyh.name/"
|
||||
ip="4.154.0.63"
|
||||
subject="comment 3"
|
||||
date="2013-08-24T16:04:21Z"
|
||||
content="""
|
||||
Unfortunately, the git error message you pasted suggests very strongly that your git repository has gotten corrupted. You can probably verify that by running `git annex fsck`. Assuming it is corrupted, the best thing to do is to make a new clone and move .git/annex and .git/config over from the corrupted repository to it, and finally run `git annex fsck`
|
||||
|
||||
You then seem to have some reason decided to go delete git-annex's .git/annex/journal/*.log files, which are just files that have not yet been committed to the git-annex branch. The only reason this \"restored some sanity\" is that git-annex was trying to commit that data to git, and failing because your git repository is corrupted.
|
||||
|
||||
(This has nothing at all to do with direct mode.)
|
||||
"""]]
|
|
@ -0,0 +1,8 @@
|
|||
[[!comment format=mdwn
|
||||
username="https://me.yahoo.com/a/2grhJvAC049fJnvALDXek.6MRZMTlg--#eec89"
|
||||
nickname="John"
|
||||
subject="comment 4"
|
||||
date="2013-08-25T05:27:57Z"
|
||||
content="""
|
||||
Do you have any thoughts on why it may have gotten corrupted, or why it seems to happen so commonly with large git-annex repositories? I've seen this exact same sort of error while processing log files maybe 5 or 6 times now.
|
||||
"""]]
|
|
@ -0,0 +1,8 @@
|
|||
[[!comment format=mdwn
|
||||
username="https://me.yahoo.com/a/2grhJvAC049fJnvALDXek.6MRZMTlg--#eec89"
|
||||
nickname="John"
|
||||
subject="comment 5"
|
||||
date="2013-08-25T05:50:35Z"
|
||||
content="""
|
||||
I meant to say, in 5 or 6 different repositories. Further, when I see it happen the next time, how do you recommend I track down the real problem, instead of always just cloning and starting over?
|
||||
"""]]
|
|
@ -41,5 +41,5 @@ I'm interested in your thoughts.
|
|||
Best,
|
||||
Laszlo
|
||||
|
||||
[[!tag /design/assistant moreinfo]]
|
||||
[[!tag /design/assistant]]
|
||||
[[!meta title="assistant can try to add too many files at once in batch add mode"]]
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
[[!comment format=mdwn
|
||||
username="https://www.google.com/accounts/o8/id?id=AItOawln3ckqKx0x_xDZMYwa9Q1bn4I06oWjkog"
|
||||
nickname="Michael"
|
||||
subject="comment 10"
|
||||
date="2013-08-26T18:33:40Z"
|
||||
content="""
|
||||
@Joey: it was a \"pretty large\" transfer, several hundred gigabytes in perhaps ~100000 files. The copying was going to a GPG-encrypted directory remote.
|
||||
The error only happened once or twice so far. Point taken about find in /proc; I'll do that if it happens next time.
|
||||
|
||||
"""]]
|
|
@ -0,0 +1,15 @@
|
|||
[[!comment format=mdwn
|
||||
username="http://joeyh.name/"
|
||||
ip="4.154.0.63"
|
||||
subject="comment 9"
|
||||
date="2013-08-24T19:10:21Z"
|
||||
content="""
|
||||
@Michael how large a copy are you doing? And what kind of remote are you copying the files to?
|
||||
It would be helpful if you could be more specific about something I could do to reproduce the problem. Without a test case, I am unlikely to fix the bug. With a test case, I'd be surprised if it took long to fix it.
|
||||
|
||||
If you have a process running that is experiencing the problem, you can also narrow it down a *lot* by looking at what these leaking pipe file descriptors are pipes to. For example, if you have:
|
||||
|
||||
lr-x------ 1 michael michael 64 Aug 10 20:14 895 -> pipe:[2251602]
|
||||
|
||||
You can run `find /proc/ -ls 2251602` and find the process at other end of the pipe, and look its pid up in ps to see what command it is.
|
||||
"""]]
|
27
doc/bugs/Unable_to_import_feed.mdwn
Normal file
27
doc/bugs/Unable_to_import_feed.mdwn
Normal file
|
@ -0,0 +1,27 @@
|
|||
Using `git-annex version: 4.20130802` on Debian unstable, when trying to add the feed at <http://www.ndr.de/fernsehen/sendungen/extra_3/videos/zum_mitnehmen/extradrei196_version-hq.xml>, I get:
|
||||
|
||||
[[!format sh """
|
||||
importfeed http://www.ndr.de/fernsehen/sendungen/extra_3/videos/zum_mitnehmen/extradrei196_version-hq.xml
|
||||
--2013-08-16 09:14:13-- http://www.ndr.de/fernsehen/sendungen/extra_3/videos/zum_mitnehmen/extradrei196_version-hq.xml
|
||||
Auflösen des Hostnamen »www.ndr.de (www.ndr.de)«... 212.201.100.171, 212.201.100.187
|
||||
Verbindungsaufbau zu www.ndr.de (www.ndr.de)|212.201.100.171|:80... verbunden.
|
||||
HTTP-Anforderung gesendet, warte auf Antwort... 200 OK
|
||||
Länge: 61809 (60K) [application/xml]
|
||||
In »»/tmp/feed4404«« speichern.
|
||||
|
||||
100%[============================================>] 61.809 --.-K/s in 0,03s
|
||||
|
||||
2013-08-16 09:14:13 (2,20 MB/s) - »»/tmp/feed4404«« gespeichert [61809/61809]
|
||||
|
||||
failed
|
||||
git-annex: importfeed: 1 failed
|
||||
"""]]
|
||||
|
||||
(Oh, and using `format` with nono-ASCII seems to break down., at least in the preview.)
|
||||
|
||||
> I'm going to close this since I've narrowed it down to a bug in the
|
||||
> upstream feed library. [[done]]. Of course, if we get a lot of reports of
|
||||
> the library not working, I may need to revisit using it, but for now this
|
||||
> seems an isolated problem. Also, I tried validating the feed, and it is
|
||||
> not 100% valid, and one of the validity problems is a missing enclosure
|
||||
> length. --[[Joey]]
|
|
@ -0,0 +1,45 @@
|
|||
[[!comment format=mdwn
|
||||
username="http://joeyh.name/"
|
||||
ip="4.154.0.63"
|
||||
subject="comment 1"
|
||||
date="2013-08-23T18:09:27Z"
|
||||
content="""
|
||||
When I try this, without the German translation, I get:
|
||||
|
||||
<pre>
|
||||
joey@gnu:~/tmp/newrepo>git annex importfeed 'http://www.ndr.de/fernsehen/sendungen/extra_3/videos/zum_mitnehmen/extradrei196_version-hq.xml'
|
||||
(checking known urls...)
|
||||
importfeed http://www.ndr.de/fernsehen/sendungen/extra_3/videos/zum_mitnehmen/extradrei196_version-hq.xml
|
||||
--2013-08-23 13:58:19-- http://www.ndr.de/fernsehen/sendungen/extra_3/videos/zum_mitnehmen/extradrei196_version-hq.xml
|
||||
Resolving www.ndr.de (www.ndr.de)... 23.73.180.154, 23.73.180.115
|
||||
Connecting to www.ndr.de (www.ndr.de)|23.73.180.154|:80... connected.
|
||||
HTTP request sent, awaiting response... 200 OK
|
||||
Length: 61865 (60K) [application/xml]
|
||||
Saving to: ‘/home/joey/tmp/feed31120’
|
||||
|
||||
100%[======================================>] 61,865 151KB/s in 0.4s
|
||||
|
||||
2013-08-23 13:58:25 (151 KB/s) - ‘/home/joey/tmp/feed31120’ saved [61865/61865]
|
||||
|
||||
|
||||
warning: bad feed content
|
||||
</pre>
|
||||
|
||||
It seems you left out the last line of the error.
|
||||
|
||||
The feed library seems to fail to find any of the enclosures in this feed, although it is able to parse it as far as finding the individual items in the feed:
|
||||
|
||||
<pre>
|
||||
Prelude Text.Feed.Query Text.Feed.Import> f <- parseFeedFromFile \"extradrei196_version-hq.xml\"
|
||||
Prelude Text.Feed.Query Text.Feed.Import> map getItemEnclosure $ feedItems f
|
||||
[Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing]
|
||||
</pre>
|
||||
|
||||
The feed *appears* to contain enclosures, for example:
|
||||
|
||||
<pre>
|
||||
<enclosure url=\"http://media.ndr.de/progressive/2013/0821/TV-20130821-2329-5942.hq.mp4\" type=\"video/mp4\"/>
|
||||
</pre>
|
||||
|
||||
It may not be well-formed, or the feed library may have a bug. Assuming the latter, I have filed a bug report on the feed library: https://github.com/sof/feed/issues/3
|
||||
"""]]
|
|
@ -30,3 +30,6 @@ I'm using debian testing (jessie) on a i386 machine.
|
|||
### Please provide any additional information below.
|
||||
|
||||
I don't use git annex assistant nor the webapp
|
||||
|
||||
> Tested and only file:// and not other urls have this problem.
|
||||
> guilhem provided a fix. [[done]] --[[Joey]]
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
[[!comment format=mdwn
|
||||
username="guilhem"
|
||||
ip="129.16.20.209"
|
||||
subject="comment 4"
|
||||
date="2013-08-16T07:14:12Z"
|
||||
content="""
|
||||
The [[OpenPGP standard|https://tools.ietf.org/html/rfc4880]] specifies that revoked keys/subkeys \"are not to be used\". AFIK GnuPG, as any RFC-compliant implementation, will not let you encrypt to a revoked key no matter what. An extremely dirty workaround is to set up your system clock prior to the revocation date (but that might put your whole system at risk since other applications may rely synced clocks to work properly).
|
||||
|
||||
That said, what you really wanted to do was to revoke access to K1 and add K2 instead. That seems to be a perfectly valid use-case, and it shouldn't be hard to add to git-annex; stay tunned ;-)
|
||||
|
||||
|
||||
Tobias: Not sure what you meant by \"revoke access to my annex\", but if you were thinking of the key owner, note that with the current [[encryption design|http://git-annex.branchable.com/design/encryption]], since that person may simply grab from the git repo and then at any time decrypt the passphrase for the symmetric cipher, it makes little sense to revoke access for that person unless you change that passphrase, and reencrypt all annexed files on the remote, which of course needs to be done locally for the encryption to make sense at all.
|
||||
"""]]
|
|
@ -0,0 +1,8 @@
|
|||
[[!comment format=mdwn
|
||||
username="http://www.rfc1149.net/"
|
||||
nickname="Sam"
|
||||
subject="comment 5"
|
||||
date="2013-08-19T11:35:52Z"
|
||||
content="""
|
||||
Indeed, removing the revoked key and putting the new one would be acceptable, there is no reason to keep the revoked one around.
|
||||
"""]]
|
|
@ -0,0 +1,12 @@
|
|||
[[!comment format=mdwn
|
||||
username="guilhem"
|
||||
ip="129.16.20.209"
|
||||
subject="comment 6"
|
||||
date="2013-08-19T13:22:59Z"
|
||||
content="""
|
||||
All right, what would be a nice user interface, compatible with the current commands? I was thinking of something along the lines of `git annex enableremote +encryption=newKey -encryption=oldKey`, with an alias `+encryption=encryption` to be backward compatible. It's probably not optimal though, feel free to comment :-)
|
||||
|
||||
Of course, `git-annex` should ensure that at any point in time the passphrase is always encrypted using an OpenPGP key. (Otherwise it might be stored clear in the git repository, which would void the encryption.) Also, anyone who can decrypt the passphrase can revoke all existing keys and reencrypt it using another key; this not really a big deal since the cipher is version-controlled anyway, so loosing access to the repo is unlikely.
|
||||
|
||||
By the way, since we're about to amend the arguments for `enableremote`, it'd be nice to take advantage of the situation to allow pure asymmetric encryption. I propose `git annex initremote ... encryption=myKey crypto={none,hybrid,pubkey}` to use respectively no-encryption, an asymmetrically encrypted passphrase (the current design, default), and OpenPGP keys only.
|
||||
"""]]
|
|
@ -0,0 +1,10 @@
|
|||
[[!comment format=mdwn
|
||||
username="guilhem"
|
||||
ip="129.16.20.209"
|
||||
subject="comment 7"
|
||||
date="2013-08-19T16:08:49Z"
|
||||
content="""
|
||||
On second thought, I think it makes more sense to have something like `git annex initremote ... encryption={none,shared,hybrid,pubkey} keyid=whatever` and `git annex enableremote ... [+keyid=newkey] [-keyid=oldkey]`, where `keyid` can only be used when `encryption` is either `hybrid` (default) or `pubkey`.
|
||||
|
||||
This would break compatibility with the current interpretation of `encryption`, but I believe it's not so invasive: People are not creating new remotes every day, and an error message could clarify the new behavior. It's also clearer, since key IDs can be added and deleted at will, whereas the encryption scheme cannot.
|
||||
"""]]
|
|
@ -0,0 +1,15 @@
|
|||
[[!comment format=mdwn
|
||||
username="http://joeyh.name/"
|
||||
ip="4.154.0.63"
|
||||
subject="comment 8"
|
||||
date="2013-08-22T17:05:49Z"
|
||||
content="""
|
||||
Note that the assistant generates initremote parameters so code there also needs to be changed if the syntax changes.
|
||||
|
||||
I think I am ok with changing the syntax. However, it seems that `encryption=-oldkey encryption=newkey` could be used to remove the old revoked key and add a new one. Using `-keyid` as a parameter to initremote is a bit tricky since git-annex's regular option parser would see it, before the parameter could get to initremote. (Unless -keyid was defined as a regular option specific to initremote.) OR, git-annex could just try to detect when a key is revoked and automatically remove it when a new encryption key is specified.
|
||||
|
||||
Hmm, it would be possible to have it just notice, when adding a new key, if one of the existing keys is revoked, and
|
||||
remove the revoked key automatically.
|
||||
|
||||
The above doesn't deal with the case of wanting to add pure asymmetric encryption. It seems to me that from a user's point of view, what they really need to know about asymmetric encryption is that they can't easily give additional keyids access after the fact (without reencrypting and reuploading everything). So I think it would be good if the syntax made that obvious. Perhaps `encryptiononly=key`
|
||||
"""]]
|
|
@ -0,0 +1,42 @@
|
|||
[[!comment format=mdwn
|
||||
username="guilhem"
|
||||
ip="129.16.20.209"
|
||||
subject="comment 9"
|
||||
date="2013-08-22T18:42:28Z"
|
||||
content="""
|
||||
Hehe, I ran into the option parser issue when implementing that change
|
||||
;-) So I moved to `git annex enableremote ... [keyid+=newkey]
|
||||
[keyid-=oldkey]` (where `+` is optional, for consistency) which doesn't
|
||||
prevent users from specifying a key by something starting with a sign.
|
||||
|
||||
While it's certainly possible to tell git-annex to manage the authorized
|
||||
keys itself, users may have other reasons to remove a key so I'm not
|
||||
sure it's a good idea. Also, what if someone forgets to add his/her new
|
||||
key after revocation (it's still possible to decrypt after all)? If
|
||||
another person updates the keyring afterwards, the first user will be
|
||||
denied further access, and will have to retrieve and reencrypt the
|
||||
\"cipher\" manually, which is not so trivial.
|
||||
|
||||
|
||||
I understand that asymmetric encryption needs special care, but Sam's
|
||||
use case could be reproduced with that scheme I believe. For instance a
|
||||
user may superseed and revoke his/her old key; then new files would be
|
||||
uploaded with the new one, but as long as the old key is not
|
||||
compromised, I don't see why s/he should reupload everything instead of
|
||||
using the old key when pulling from the remote. Of course one may argue
|
||||
that the key shouldn't be revoked at the first place, but if it's used
|
||||
for other purposes (e.g., it's publicly available on a key server) it's
|
||||
good practice to revoke it IMHO.
|
||||
|
||||
As for the removal of keys with pure asymmetric encryption, it is just
|
||||
required I think: Otherwise revoking a key would prevent any further
|
||||
content to be encrypted. There I can't see any problem with git-annex
|
||||
managing the keyring itself (beside the extra code to write :-P).
|
||||
|
||||
All in all if we are to allow deletion/addition of keyIDs (and I think
|
||||
we should!), I think it should be done for both `hybrid` and `pubkey`
|
||||
schemes. Do you really want another syntax? I'd say clarify the manage
|
||||
(plus maybe a warning when running the CLI) is enough, but true it's
|
||||
easy to shoot oneself in the foot there...
|
||||
|
||||
"""]]
|
|
@ -0,0 +1,10 @@
|
|||
[[!comment format=mdwn
|
||||
username="http://joeyh.name/"
|
||||
ip="4.154.0.63"
|
||||
subject="bad bug report title 101"
|
||||
date="2013-08-24T19:17:29Z"
|
||||
content="""
|
||||
I don't understand why you think the problem has something to do with Windows drive letters. There are no Windows drive letters in the symlinks you show. The only place I see any Windows drive letter is in the descripton of the remote that `git annex get` displays when it fails to get the file. That description is purely informative, it's not a path that git-annex is trying to use.
|
||||
|
||||
I'd suggest that you run `git annex get --debug` to see if it is doing anything obviously wrong. The mostly likely culprit is your SMB setup, which I am not going to be able to replicate.
|
||||
"""]]
|
|
@ -0,0 +1,8 @@
|
|||
[[!comment format=mdwn
|
||||
username="https://www.google.com/accounts/o8/id?id=AItOawlzWwnBfgJrkhPQakBo6DbPXutJIVDHkj0"
|
||||
nickname="Adam"
|
||||
subject="comment 3"
|
||||
date="2013-08-26T06:56:33Z"
|
||||
content="""
|
||||
You're correct. I can see in .git/config that the remote references z:\ which of course will break on the Linux side. Maybe this is a case of the error messages not quite telling me the right thing?
|
||||
"""]]
|
|
@ -79,3 +79,9 @@ What version of git-annex are you using? On what operating system?
|
|||
git-annex version: 3.20130216
|
||||
|
||||
On current Debian sid/experimental
|
||||
|
||||
> [[Done]], thanks to guilhem. We ended up using a different algorythm
|
||||
> which is faster yet, basically it now does a diff-index between the
|
||||
> index and each branch for its second stage bloom filter.
|
||||
> Speedup is 30x with 0 (or 1?) branch, and then massive for each
|
||||
> additional branch. --[[Joey]]
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
### Please describe the problem.
|
||||
|
||||
I installed git-annex on my android device (Nook HD+, with Cyanogenmod 10.1 installed) for the first time today and was excited to get it working. However, I noticed the device warming alarmingly, and, after installing a CPU usage monitor, it became clear that git annex was the problem, as it was hovering around 30-40% even when idle.
|
||||
|
||||
I tried quitting git-annex using the webapp's "Shutdown Daemon" menu option, and it seemed to shut down successfully, but the CPU monitor still showed that process present and taking up high amounts of CPU (sometimes well over 50%). I used the android app switcher and noticed that the terminal emulator for git annex was still running; I tried to quit this by using the X button and it seemed to close, but the CPU monitor still showed the git-annex process consuming large amounts of CPU. Finally I had to quit the process forcefully from the monitor.
|
||||
|
||||
### What steps will reproduce the problem?
|
||||
|
||||
Install & run; observe CPU. I used a dedicated CPU monitor to stop it the first time; another time, I tried stopping it by going to Preferences, Apps, Running Applications, where it told me it had one process and one service running. I stopped the service without issue; it said the process could not be safely stopped but I stopped it anyway and that successfully stopped the app.
|
||||
|
||||
|
||||
### What version of git-annex are you using? On what operating system?
|
||||
|
||||
the current (4.20130826-g46f422) version on Android.
|
||||
|
||||
### Please provide any additional information below.
|
||||
|
||||
[[!format sh """
|
||||
# If you can, paste a complete transcript of the problem occurring here.
|
||||
# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
|
||||
|
||||
(I'm not sure how to get a log out of the web app to paste here unfortunately.
|
||||
|
||||
# End of transcript or log.
|
||||
"""]]
|
||||
|
||||
> [[done]]; I fixed the bug which turned out to be a stupid
|
||||
> minunderstanding of how a java library worked. --[[Joey]]
|
|
@ -0,0 +1,10 @@
|
|||
[[!comment format=mdwn
|
||||
username="http://joeyh.name/"
|
||||
ip="4.154.0.63"
|
||||
subject="comment 10"
|
||||
date="2013-08-27T01:46:36Z"
|
||||
content="""
|
||||
This seems to be a reversion instroduced in commit a48d340abdaf3296a2ddacd73c18adc9a13a02ef. With that backed out, I get 0% cpu usage for the terminal app. Even if I run top in the terminal, its CPU sits under 1%.
|
||||
|
||||
Clearly the infinite loop in that patch is running faster than expected!
|
||||
"""]]
|
|
@ -0,0 +1,9 @@
|
|||
[[!comment format=mdwn
|
||||
username="http://edheil.wordpress.com/"
|
||||
ip="173.162.44.162"
|
||||
subject="comment 10"
|
||||
date="2013-08-26T20:19:06Z"
|
||||
content="""
|
||||
Yeah, that would definitely explain both what I'm seeing and why you haven't been seeing it.
|
||||
|
||||
"""]]
|
|
@ -0,0 +1,9 @@
|
|||
[[!comment format=mdwn
|
||||
username="http://edheil.wordpress.com/"
|
||||
ip="173.162.44.162"
|
||||
subject="comment 1"
|
||||
date="2013-08-26T18:34:44Z"
|
||||
content="""
|
||||
Just noticed I was using the autobuild instead of the last release version; I'll try the release version and see if that makes any difference.
|
||||
|
||||
"""]]
|
|
@ -0,0 +1,8 @@
|
|||
[[!comment format=mdwn
|
||||
username="http://joeyh.name/"
|
||||
ip="4.154.0.63"
|
||||
subject="comment 2"
|
||||
date="2013-08-26T18:42:02Z"
|
||||
content="""
|
||||
If you shut down the daemon, it seems to me that the process that was still running would probably be `git annex transferkey` which runs in its own process to upload/download file contents. I normally see 0% to 1% cpu use from git-annex when it is running on my android tablet. It's possible that the 1% use is due to it waking up every second, which got fixed in 9dc2373977d583b4c4aa6cf0555dc97309f89991.
|
||||
"""]]
|
|
@ -0,0 +1,11 @@
|
|||
[[!comment format=mdwn
|
||||
username="http://edheil.wordpress.com/"
|
||||
ip="173.162.44.162"
|
||||
subject="comment 3"
|
||||
date="2013-08-26T19:03:45Z"
|
||||
content="""
|
||||
OK, so I might have a rogue transferkey process going on, but one which starts over again when I restart the app?
|
||||
|
||||
I've set this all up purely as a \"can I do this\" experiment right now; there is literally zero important data there to lose, either on the tablet or on the laptop, so maybe I could just write this off as a bad result of my first few shaky attempts to get the device paired with my laptop, wipe out both annexes, and start completely from scratch.
|
||||
|
||||
"""]]
|
|
@ -0,0 +1,9 @@
|
|||
[[!comment format=mdwn
|
||||
username="http://edheil.wordpress.com/"
|
||||
ip="173.162.44.162"
|
||||
subject="comment 6"
|
||||
date="2013-08-26T19:38:12Z"
|
||||
content="""
|
||||
a final note -- according to the process monitor, the process eating CPU is \"ga.androidterm\". There are also a small swarm of about 6 git processes none of which are consuming much CPU time at all.
|
||||
|
||||
"""]]
|
|
@ -0,0 +1,10 @@
|
|||
[[!comment format=mdwn
|
||||
username="http://joeyh.name/"
|
||||
ip="4.154.0.63"
|
||||
subject="comment 7"
|
||||
date="2013-08-26T20:00:39Z"
|
||||
content="""
|
||||
It's certianly possible that the terminal app eats cpu for some reason even when sitting idle. It's hard for me to tell since I've been measuring cpu use by running top inside that terminal, which necessarily seems to use a lot of the CPU just to draw the screen.
|
||||
|
||||
If it's the terminal at fault, it would continue after you shutdown the git-annex daemon, since that doesn't close the terminal.
|
||||
"""]]
|
|
@ -0,0 +1,8 @@
|
|||
[[!comment format=mdwn
|
||||
username="http://joeyh.name/"
|
||||
ip="4.154.0.63"
|
||||
subject="oh yeah, i can run top in adb.."
|
||||
date="2013-08-26T20:14:13Z"
|
||||
content="""
|
||||
So, I can tell that on my tablet, the terminal app is using 82% cpu while idle.
|
||||
"""]]
|
|
@ -0,0 +1,9 @@
|
|||
[[!comment format=mdwn
|
||||
username="http://edheil.wordpress.com/"
|
||||
ip="173.162.44.162"
|
||||
subject="comment 9"
|
||||
date="2013-08-26T20:49:34Z"
|
||||
content="""
|
||||
(removed my earlier comments with debug info, since it wasn't relevant and I'd just as soon not display my gmail id and home machine's address on the web if I don't need to)
|
||||
|
||||
"""]]
|
|
@ -0,0 +1,8 @@
|
|||
[[!comment format=mdwn
|
||||
username="http://joeyh.name/"
|
||||
ip="4.154.0.63"
|
||||
subject="comment 9"
|
||||
date="2013-08-26T20:16:05Z"
|
||||
content="""
|
||||
Strace doesn't show it doing anything. I suppose I should try building the terminal without the several patches I added to it to support git-annex to see if I somehow made it use all this cpu..
|
||||
"""]]
|
|
@ -25,3 +25,6 @@ git-annex version: 4.20130521 on debian linux 7.1.
|
|||
That log is empty.
|
||||
# End of transcript or log.
|
||||
"""]]
|
||||
|
||||
> I added ssh-askpass as a recommends, so I suppose
|
||||
> I can close this. [[done]] --[[Joey]]
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
[[!comment format=mdwn
|
||||
username="https://www.google.com/accounts/o8/id?id=AItOawliqfHEW134uawIUPwyKiyOdoF-oI5TxnQ"
|
||||
nickname="Ethan"
|
||||
subject="Doh. /usr/bin/ssh-askpass needs to be on *local* machine."
|
||||
date="2013-08-15T20:13:31Z"
|
||||
content="""
|
||||
My mistake; the problem was the I was missing /usr/bin/ssh-askpass on my local machine, not the rsync.net host.
|
||||
|
||||
I still think this is a bug. I'm on a debian machine and installed git-annex from its debian package, so seems like the ssh-askpass package should be listed as a dependency. But that's a debian packaging problem, not a git-annex bug per se, so I'll go file it elsewhere.
|
||||
"""]]
|
135
doc/bugs/cannot_determine_uuid_for_origin.mdwn
Normal file
135
doc/bugs/cannot_determine_uuid_for_origin.mdwn
Normal file
|
@ -0,0 +1,135 @@
|
|||
[[!toc]]
|
||||
|
||||
### Please describe the problem.
|
||||
|
||||
I get this error when trying to copy annexed files from my laptop to the bare repository on my server:
|
||||
|
||||
anarcat@angela:ohm2013$ git annex copy -t origin .
|
||||
git-annex: cannot determine uuid for origin
|
||||
|
||||
### What steps will reproduce the problem?
|
||||
|
||||
Here's my setup:
|
||||
|
||||
* `angela`: regular git repository on my laptop (`angela`) where i ran `git annex init` and `git annex add`ed 4 big files (in `~anarcat/presentations/ohm2013`)
|
||||
* `marcos-bare`: a bare git repository where i ran `git annex init` on a different server (`marcos`) (in `~anarcat/repos/presentations/ohm2013.git`)
|
||||
* `marcos-checkout`: a checkout of the above repository on marcos (in `~anarcat/presentations/ohm2013`)
|
||||
|
||||
I ran `git pull/push` everwhere in there, and still get the error.
|
||||
|
||||
Remotes on all repos:
|
||||
|
||||
* `angela`: `origin anarcat.ath.cx:repos/presentations/ohm2013.git`
|
||||
* `marcos-bare`: no remote
|
||||
* `marcos-checkout`: `origin /home/anarcat/repos/presentations/ohm2013.git`
|
||||
|
||||
Note that file added with `git annex addurl` on `marcos-checkout` properly gets propagated on `angela` once i do `git annex get` there.
|
||||
|
||||
### What version of git-annex are you using? On what operating system?
|
||||
|
||||
`angela` runs:
|
||||
|
||||
[[!format txt """
|
||||
git-annex version: 4.20130730-ge59a8c6
|
||||
build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS
|
||||
local repository version: 3
|
||||
default repository version: 3
|
||||
supported repository versions: 3 4
|
||||
upgrade supported from repository versions: 0 1 2
|
||||
"""]]
|
||||
|
||||
I was able to reproduce with the backport version too.
|
||||
|
||||
I compiled it by hand from git.
|
||||
|
||||
`marcos` runs:
|
||||
|
||||
[[!format txt """
|
||||
git-annex version: 3.20120629
|
||||
local repository version: unknown
|
||||
default repository version: 3
|
||||
supported repository versions: 3
|
||||
upgrade supported from repository versions: 0 1 2
|
||||
"""]]
|
||||
|
||||
### Please provide any additional information below.
|
||||
|
||||
In addition, there's this error on `marcos-bare`:
|
||||
|
||||
[[!format sh """
|
||||
anarcat@marcos:ohm2013.git$ git annex status -d
|
||||
supported backends: SHA256 SHA1 SHA512 SHA224 SHA384 SHA256E SHA1E SHA512E SHA224E SHA384E WORM URL
|
||||
supported remote types: git S3 bup directory rsync web hook
|
||||
trusted repositories: git ["--git-dir=/home/anarcat/repos/presentations/ohm2013.git","show-ref","git-annex"]
|
||||
git ["--git-dir=/home/anarcat/repos/presentations/ohm2013.git","show-ref","--hash","refs/heads/git-annex"]
|
||||
git ["--git-dir=/home/anarcat/repos/presentations/ohm2013.git","log","refs/heads/git-annex..6063e958c02259a39b87d0f1dc44c9272c52df3f","--oneline","-n1"]
|
||||
git ["--git-dir=/home/anarcat/repos/presentations/ohm2013.git","cat-file","--batch"]
|
||||
0
|
||||
semitrusted repositories: 4
|
||||
00000000-0000-0000-0000-000000000001 -- web
|
||||
5868f840-02e7-11e3-94e9-9b3701bd28bb -- marcos-checkout
|
||||
aafdd242-02e7-11e3-bb6a-6f16a5c6103e -- here (marcos-bare)
|
||||
befc3057-d23d-4312-843a-0645e93107d8 -- angela
|
||||
untrusted repositories: 0
|
||||
dead repositories: 0
|
||||
available local disk space: 14 gigabytes (+1 megabyte reserved)
|
||||
local annex keys: 0
|
||||
local annex size: 0 bytes
|
||||
known annex keys: git ["--git-dir=/home/anarcat/repos/presentations/ohm2013.git","ls-files","--cached","-z","--","/home/anarcat/repos/presentations/ohm2013.git"]
|
||||
fatal: '/home/anarcat/repos/presentations/ohm2013.git' is outside repository
|
||||
0
|
||||
known annex size: 0 bytes
|
||||
bloom filter size: 16 mebibytes (0% full)
|
||||
backend usage:
|
||||
"""]]
|
||||
|
||||
### Workaround!
|
||||
|
||||
I found that I could succesfully push to the non-bare repo, like this:
|
||||
|
||||
[[!format txt """
|
||||
anarcat@angela:ohm2013$ git remote add marcos-checkout ssh://anarcat.ath.cx/~/presentations/ohm2013
|
||||
anarcat@angela:ohm2013$ git fetch marcos-checkout
|
||||
From ssh://anarcat.ath.cx/~/presentations/ohm2013
|
||||
* [new branch] git-annex -> marcos-checkout/git-annex
|
||||
* [new branch] master -> marcos-checkout/master
|
||||
anarcat@angela:ohm2013$ git annex copy AlerteRouge.webm --to marcos-checkout
|
||||
copy AlerteRouge.webm (checking marcos-checkout...) (to marcos-checkout...)
|
||||
SHA256E-s138903105--a69db8d4c3835b03bdb08cb1cccfde5c76f586f934d63283694e7101b25352a8.webm
|
||||
[...]
|
||||
"""]]
|
||||
|
||||
It seems that git-annex doesn't like bare repos at all...
|
||||
|
||||
### Fix
|
||||
|
||||
It seems that my problem was specifically related to [[bare repositories]], which are not well supported historically. There has been other reports of problems in the past, which I missed in my search because symptoms were different:
|
||||
|
||||
* [[bugs/bare git repos]]
|
||||
* [[forum/get and copy with bare repositories]]
|
||||
|
||||
Yet while I was able to do `git annex get --all` *from* the `marcos-bare` repository, I still get the original error message while trying to `git annex copy -t marcos-bare`, which is pretty annoying considering the original files are on my laptop, which is not publicly accessible. So I basically need to add the `marcos-checkout` as a remote, copy there, then get from the bare repo to make this work, which is a rather convoluted way of doing things. :)
|
||||
|
||||
It seems to me a proper fix would be to be able to `git annex copy --to marcos-bare`. Thanks!
|
||||
|
||||
Update: it seems te problem was that I had the following in my `.git/config`:
|
||||
|
||||
[remote "marcos-bare"]
|
||||
url = ssh://anarcat.ath.cx/~/repos/presentations/ohm2013.git
|
||||
annex-ignore = true
|
||||
fetch = +refs/heads/*:refs/remotes/marcos-bare/*
|
||||
|
||||
I have *no* idea how that `annex-ignore` got there, but that was the root of my problem. Removing it it allowed my to do `git annex copy`. I really don't know how this happened, but I guess this is [[done]], although I believe this error message is really confusing and could be improved.
|
||||
|
||||
> `annex-ignore` is set automatically by git-annex if it fails to query
|
||||
> the uuid of a remote the first time it tries to use it. It will say
|
||||
> when it does that. The assumption
|
||||
> is that a remote whose uuid cannot be looked up is a git remote
|
||||
> on a server w/o git-annex support (like github) and it would be annoying
|
||||
> to constantly be trying and failing to get that uuid.
|
||||
>
|
||||
> So, I've improved the error message. Now when annex-ignore is set
|
||||
> for a remote, the error you got will mention that.
|
||||
>
|
||||
> (Also, there is not currently anything lacking in git-annex's support
|
||||
> for bare repositories.) --[[Joey]]
|
28
doc/bugs/cannot_link_executable_on_android.mdwn
Normal file
28
doc/bugs/cannot_link_executable_on_android.mdwn
Normal file
|
@ -0,0 +1,28 @@
|
|||
### Please describe the problem.
|
||||
Then starting git-annex on my Galaxy Nexus Android device, in the terminal window I get:
|
||||
|
||||
[[!format sh """
|
||||
Falling back to hardcoded app location: cannot find expected files in /data/app-lib
|
||||
git annex webapp
|
||||
u0_a123@maguro:/sdcad/git-annex.home $ git annex webapp
|
||||
CANNOT LINK EXECUTABLE: git-annex invalid R_ARM_COPY relocation against DT_SYMBOLIC shared library libc.so (built with -Bsymbolic?)
|
||||
u0_a123@maguro:/sdcad/git-annex.home $
|
||||
"""]]
|
||||
|
||||
### What steps will reproduce the problem?
|
||||
Start git-annex.
|
||||
|
||||
### What version of git-annex are you using? On what operating system?
|
||||
Nightly build and release from a few days ago - 1.0.52
|
||||
|
||||
### Please provide any additional information below.
|
||||
|
||||
[[!format sh """
|
||||
# If you can, paste a complete transcript of the problem occurring here.
|
||||
# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
|
||||
|
||||
|
||||
# End of transcript or log.
|
||||
"""]]
|
||||
|
||||
> [[dup|done]] of [[git-annex_broken_on_Android_4.3]].--[[Joey]]
|
|
@ -0,0 +1,137 @@
|
|||
[[!comment format=mdwn
|
||||
username="https://www.google.com/accounts/o8/id?id=AItOawlmRpGORNKWimtzqItvwm4I6cn16vx8OvU"
|
||||
nickname="hayden"
|
||||
subject="Many network sockets with associated fds hanging around"
|
||||
date="2013-08-15T18:00:42Z"
|
||||
content="""
|
||||
I see something similar in logs and after roughly 10 mins the web-apps dies.
|
||||
So I think I hit the same as the above user.
|
||||
Sometimes I get thread deaths and restart requests but the root cause appears to match the scenario mentioned over.
|
||||
Often the webapp just hangs. But always when it hits the fd ulimit... 1024 on this system.
|
||||
|
||||
git-annex version is 4.20130802-g1452ac3 and I used the static-linked linux tar.gz linux-binary download.
|
||||
|
||||
Test setup is a from scratch assistant startup on Ubuntu 12.04.
|
||||
Not exactly a clean ubuntu though, so maybe difficult to duplicate troubles at your end.
|
||||
|
||||
I fired up the web-app with a cleaned out config. No signs of leaks until an annex is created.
|
||||
On creation of an empty annex I get fd leaks a about 1 per second after a repository is created.
|
||||
Strace'ing the main process only shows 8-bytes writes (see below) at the same rate as the leak.
|
||||
Sometimes the fd-leak stops before the resource limit, sometimes not.
|
||||
Creating a new annex on top of an existing directory tree with many files is pretty reliable trigger though.
|
||||
Startup scan finishes and fds leak away until the ulimit is hit.
|
||||
|
||||
hayden@orca:~/gamma$ ls /proc/26319/fd
|
||||
0 10 12 14 16 18 2 21 23 25 27 29 30 32 34 36 38 4 41 43 45 6 8
|
||||
1 11 13 15 17 19 20 22 24 26 28 3 31 33 35 37 39 40 42 44 5 7 9
|
||||
hayden@orca:~/gamma$ ls /proc/26319/fd
|
||||
0 10 12 14 16 18 2 21 23 25 27 29 30 32 34 36 38 4 41 43 45 6 8
|
||||
1 11 13 15 17 19 20 22 24 26 28 3 31 33 35 37 39 40 42 44 5 7 9
|
||||
hayden@orca:~/gamma$ ls /proc/26319/fd
|
||||
0 10 12 14 16 18 2 21 23 25 27 29 30 32 34 36 38 4 41 43 45 5 7 9
|
||||
1 11 13 15 17 19 20 22 24 26 28 3 31 33 35 37 39 40 42 44 46 6 8
|
||||
|
||||
hayden@orca:~/gamma$ ls /proc/26319/fd/43
|
||||
/proc/26319/fd/43
|
||||
|
||||
hayden@orca:~/gamma$ ls -l /proc/26319/fd/43
|
||||
ls -l /proc/26319/fd/43
|
||||
lrwx------ 1 hayden hayden 64 Aug 14 21:10 /proc/26319/fd/43 -> socket:[568994]
|
||||
|
||||
hayden@orca:~/gamma$ lsof | grep 568994
|
||||
git-annex 26319 hayden 43u IPv4 568994 0t0 UDP 224.0.0.251:55556
|
||||
|
||||
hayden@orca:~/gamma$ uname -a
|
||||
Linux orca 3.2.0-25-generic #40-Ubuntu SMP Wed May 23 20:30:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
|
||||
|
||||
hayden@orca:~/gamma$ cat /etc/issue
|
||||
Ubuntu 12.04 LTS \n \l
|
||||
|
||||
hayden@orca:~/gamma$ fuser 55556/udp -a
|
||||
55556/udp: 4415 26319 27080 27083
|
||||
|
||||
hayden@orca:~/gamma$ ps aux | grep 4415
|
||||
hayden 4415 0.0 0.0 66716 3036 ? S Aug12 0:03 curl -s --head -L http://127.0.0.1:38464/?auth=da9c4aba4cc2db9cf78574753f6e94d8031c6a7bdf8bfe100bde868f57b81fd751965cc9d68a9afac79f826d257a256a04ce62615a7f23cd7c925969dda1c7b8 -w %{http_code}
|
||||
hayden 27458 0.0 0.0 10612 924 pts/0 S+ 21:50 0:00 grep --color=auto 4415
|
||||
|
||||
hayden@orca:~/gamma$ ps aux | grep 26319
|
||||
hayden 26319 0.1 0.7 497188 28560 pts/5 Sl 21:09 0:04 git-annex webapp
|
||||
hayden 26338 3.4 3.4 1035572 137864 pts/5 Sl 21:09 1:25 /usr/lib/firefox/firefox /tmp/webapp26319.html
|
||||
hayden 27460 0.0 0.0 10612 920 pts/0 S+ 21:50 0:00 grep --color=auto 26319
|
||||
|
||||
hayden@orca:~/gamma$ ps aux | grep 27080
|
||||
hayden 27080 0.0 0.0 16476 1288 pts/5 S 21:33 0:00 git --git-dir=/home/hayden/boo/.git --work-tree=/home/hayden/boo cat-file --batch
|
||||
hayden 27462 0.0 0.0 10612 924 pts/0 S+ 21:50 0:00 grep --color=auto 27080
|
||||
|
||||
hayden@orca:~/gamma$ ps aux | grep 27083
|
||||
hayden 27083 0.0 0.0 16476 1060 pts/5 S 21:33 0:00 git --git-dir=/home/hayden/boo/.git --work-tree=/home/hayden/boo check-attr -z --stdin annex.backend annex.numcopies --
|
||||
hayden 27464 0.0 0.0 10612 920 pts/0 S+ 21:51 0:00 grep --color=auto 27083
|
||||
|
||||
----> has 579 open fds at this point but this number holds stable over 10 min
|
||||
(copy in new tree to provoke)
|
||||
(no change)
|
||||
----> restart daemon in gui to provoke
|
||||
(new process has open fds slowly climbing after startup scan)
|
||||
|
||||
straces look like this repeating every second. (clipped down)
|
||||
|
||||
futex(0x34f001c, FUTEX_WAIT_PRIVATE, 51, NULL) = ? ERESTARTSYS (To be restarted)
|
||||
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
|
||||
rt_sigreturn(0x1a) = 202
|
||||
futex(0x34f001c, FUTEX_WAIT_PRIVATE, 51, NULL) = ? ERESTARTSYS (To be restarted)
|
||||
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
|
||||
rt_sigreturn(0x1a) = 202
|
||||
futex(0x34f001c, FUTEX_WAIT_PRIVATE, 51, NULL) = ? ERESTARTSYS (To be restarted)
|
||||
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
|
||||
rt_sigreturn(0x1a) = 202
|
||||
futex(0x34f001c, FUTEX_WAIT_PRIVATE, 51, NULL) = ? ERESTARTSYS (To be restarted)
|
||||
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
|
||||
write(6, \"\377\0\0\0\0\0\0\0\", 8) = 8
|
||||
rt_sigreturn(0x2) = 202
|
||||
futex(0x34f001c, FUTEX_WAIT_PRIVATE, 51, NULL^C <unfinished ...>
|
||||
Process 29803 detached
|
||||
|
||||
Until after roughly 10 mins...
|
||||
|
||||
hayden@orca:~/boo$ ls /proc/29803/fd | wc -l
|
||||
1017
|
||||
hayden@orca:~/boo$ ls /proc/29803/fd | wc -l
|
||||
1023
|
||||
hayden@orca:~/boo$ ls /proc/29803/fd | wc -l
|
||||
1024
|
||||
hayden@orca:~/boo$ ls /proc/29803/fd | wc -l
|
||||
1024
|
||||
hayden@orca:~/boo$ ls /proc/29803/fd | wc -l
|
||||
1024
|
||||
hayden@orca:~/boo$ ls /proc/29803/fd | wc -l
|
||||
1024
|
||||
|
||||
hayden@orca:~/boo$ ulimit -a
|
||||
core file size (blocks, -c) 0
|
||||
data seg size (kbytes, -d) unlimited
|
||||
scheduling priority (-e) 0
|
||||
file size (blocks, -f) unlimited
|
||||
pending signals (-i) 31164
|
||||
max locked memory (kbytes, -l) 64
|
||||
max memory size (kbytes, -m) unlimited
|
||||
open files (-n) 1024
|
||||
pipe size (512 bytes, -p) 8
|
||||
POSIX message queues (bytes, -q) 819200
|
||||
real-time priority (-r) 0
|
||||
stack size (kbytes, -s) 8192
|
||||
cpu time (seconds, -t) unlimited
|
||||
max user processes (-u) 31164
|
||||
virtual memory (kbytes, -v) unlimited
|
||||
file locks (-x) unlimited
|
||||
hayden@orca:~/boo$
|
||||
|
||||
At this point the webapp hangs but a number of interesting crashes may occur. I've also seen the particular error in the previous users log (on a big tree).
|
||||
|
||||
[2013-08-14 21:56:12 CEST] main: starting assistant version 4.20130802-g1452ac3
|
||||
(scanning...) [2013-08-14 21:56:12 CEST] Watcher: Performing startup scan
|
||||
(started...) DaemonStatus crashed: /home/hayden/boo/.git/annex/: openTempFile: resource exhausted (Too many open files)
|
||||
[2013-08-14 22:06:12 CEST] DaemonStatus: warning DaemonStatus crashed: /home/hayden/boo/.git/annex/: openTempFile: resource exhausted (Too many open files)
|
||||
|
||||
Is any of the above helpful? Anything else useful to kick for testing that you'd like done?
|
||||
I'd guess this is something weird with my ubuntu setup that provokes this as more users would see it otherwise.
|
||||
"""]]
|
|
@ -0,0 +1,18 @@
|
|||
[[!comment format=mdwn
|
||||
username="http://joeyh.name/"
|
||||
ip="4.154.0.63"
|
||||
subject="comment 5"
|
||||
date="2013-08-24T17:09:43Z"
|
||||
content="""
|
||||
Thanks for an excellent amount of debug information.
|
||||
|
||||
I can see what's leaking is UDP connections to 224.0.0.251. That address is used for the \"local pairing\" option in the webapp.
|
||||
|
||||
I was able to reproduce the problem by disabling all network interfaces except `lo`. The PairListener then failed to open a multicast listening socket. When it fails that way, it retried every second, as you noticed. And there is a socket leak in that failure mode.
|
||||
|
||||
I wonder if you're seeing this even when on the network? If so, perhaps your Ubuntu system has something going on that prevents opening a multicast listening socket on even `eth0` or `wlan0` or whatever.
|
||||
|
||||
Unfortunately, the actual socket leak bug is in the [network-multicast](http://hackage.haskell.org/package/network-multicast) library, and not in git-annex. I have filed an upstream bug report: <https://github.com/audreyt/network-multicast/issues/4>
|
||||
|
||||
Hopefully that will be dealt with soon. There is a workaround I could do in git-annex: If it fails (leaking one socket), it could wait until the NetworkListener indicated a new network interface was opened, before trying again (possibly leaking one socket again). This would change it from a 1 per second leak to a 1 per change of network leak at worst, which is probably much less likely to cause problems.
|
||||
"""]]
|
|
@ -0,0 +1,15 @@
|
|||
[[!comment format=mdwn
|
||||
username="http://joeyh.name/"
|
||||
ip="4.154.0.63"
|
||||
subject="comment 6"
|
||||
date="2013-08-24T18:38:56Z"
|
||||
content="""
|
||||
My NetListener workaround turned out to not be portable enough.
|
||||
|
||||
However, I have sent a patch to fix the FD leak: <https://github.com/audreyt/network-multicast/pull/6>
|
||||
Hopefully it gets applied soon.
|
||||
|
||||
I have also made the PairListener only retry every 60 seconds. Which makes the leak 1/60th as bad, for whatever that's worth.
|
||||
|
||||
Once a fix for this gets into Debian, I need to remember to backport it to stable, and update the autobuilders to use it. Also need to remember to update the Android autobuilder. Leaving this bug report open until that happens.
|
||||
"""]]
|
354
doc/bugs/git-annex_quit_unexpectedly___40__macosx__41__.mdwn
Normal file
354
doc/bugs/git-annex_quit_unexpectedly___40__macosx__41__.mdwn
Normal file
|
@ -0,0 +1,354 @@
|
|||
### Please describe the problem.
|
||||
|
||||
I installed the git-annex app for MacOSX (10.8.4)
|
||||
|
||||
### What steps will reproduce the problem?
|
||||
|
||||
- Created a repository
|
||||
- In the configuration, entered my google username/password
|
||||
|
||||
### What version of git-annex are you using? On what operating system?
|
||||
|
||||
bundle version: 0.0.1
|
||||
|
||||
### Please provide any additional information below.
|
||||
|
||||
[[!format sh """
|
||||
# If you can, paste a complete transcript of the problem occurring here.
|
||||
# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
|
||||
|
||||
Process: git-annex [12934]
|
||||
Path: /Applications/git-annex.app/Contents/MacOS/bundle/git-annex
|
||||
Identifier: git-annex
|
||||
Version: 0
|
||||
Code Type: X86-64 (Native)
|
||||
Parent Process: ??? [1]
|
||||
User ID: 502
|
||||
|
||||
Date/Time: 2013-08-17 12:27:12.495 -0700
|
||||
OS Version: Mac OS X 10.8.4 (12E55)
|
||||
Report Version: 10
|
||||
Sleep/Wake UUID: 6DB42174-0147-4C8B-B83E-F305823297CA
|
||||
|
||||
Interval Since Last Report: 294009 sec
|
||||
Crashes Since Last Report: 4
|
||||
Per-App Crashes Since Last Report: 4
|
||||
Anonymous UUID: 0D492F72-DAE5-360C-A6D6-ECB38FD53115
|
||||
|
||||
Crashed Thread: 3
|
||||
|
||||
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
|
||||
Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000000
|
||||
|
||||
VM Regions Near 0:
|
||||
-->
|
||||
__TEXT 000000010b5e6000-000000010e08d000 [ 42.7M] r-x/rwx SM=COW /Applications/git-annex.app/Contents/MacOS/bundle/git-annex
|
||||
|
||||
Thread 0:: Dispatch queue: com.apple.main-thread
|
||||
0 libsystem_kernel.dylib 0x00007fff931400fa __psynch_cvwait + 10
|
||||
1 libsystem_c.dylib 0x00007fff86adffe9 _pthread_cond_wait + 869
|
||||
2 git-annex 0x000000010df20179 0x10b5e6000 + 43229561
|
||||
3 git-annex 0x000000010defc8eb 0x10b5e6000 + 43084011
|
||||
4 git-annex 0x000000010df0bc86 0x10b5e6000 + 43146374
|
||||
5 git-annex 0x000000010df0c6fb 0x10b5e6000 + 43149051
|
||||
6 git-annex 0x000000010df07b46 0x10b5e6000 + 43129670
|
||||
7 git-annex 0x000000010df07c69 0x10b5e6000 + 43129961
|
||||
8 git-annex 0x000000010bcff518 0x10b5e6000 + 7443736
|
||||
9 libdyld.dylib 0x00007fff8c3e47e1 start + 1
|
||||
|
||||
Thread 1:
|
||||
0 libsystem_kernel.dylib 0x00007fff931400fa __psynch_cvwait + 10
|
||||
1 libsystem_c.dylib 0x00007fff86adffe9 _pthread_cond_wait + 869
|
||||
2 git-annex 0x000000010df20179 0x10b5e6000 + 43229561
|
||||
3 git-annex 0x000000010defc8eb 0x10b5e6000 + 43084011
|
||||
4 git-annex 0x000000010df0bc86 0x10b5e6000 + 43146374
|
||||
5 git-annex 0x000000010df0c5e0 0x10b5e6000 + 43148768
|
||||
6 libsystem_c.dylib 0x00007fff86adb7a2 _pthread_start + 327
|
||||
7 libsystem_c.dylib 0x00007fff86ac81e1 thread_start + 13
|
||||
|
||||
Thread 2:
|
||||
0 libsystem_kernel.dylib 0x00007fff931400fa __psynch_cvwait + 10
|
||||
1 libsystem_c.dylib 0x00007fff86adffe9 _pthread_cond_wait + 869
|
||||
2 git-annex 0x000000010df20179 0x10b5e6000 + 43229561
|
||||
3 git-annex 0x000000010defc8eb 0x10b5e6000 + 43084011
|
||||
4 git-annex 0x000000010df0bc86 0x10b5e6000 + 43146374
|
||||
5 git-annex 0x000000010df0c5e0 0x10b5e6000 + 43148768
|
||||
6 libsystem_c.dylib 0x00007fff86adb7a2 _pthread_start + 327
|
||||
7 libsystem_c.dylib 0x00007fff86ac81e1 thread_start + 13
|
||||
|
||||
Thread 3 Crashed:
|
||||
0 libsystem_c.dylib 0x00007fff86ae0bf9 pthread_mutex_lock + 20
|
||||
1 H 0x000000010e9fd29f gnutls_system_mutex_lock + 12
|
||||
2 H 0x000000010ea7fa29 wrap_nettle_rnd_refresh + 20
|
||||
3 H 0x000000010e9fee89 gnutls_deinit + 42
|
||||
4 git-annex 0x000000010caf0a3a 0x10b5e6000 + 22063674
|
||||
|
||||
Thread 4:
|
||||
0 libsystem_kernel.dylib 0x00007fff93140d2a kevent64 + 10
|
||||
1 git-annex 0x000000010deab5fa 0x10b5e6000 + 42751482
|
||||
|
||||
Thread 5:
|
||||
0 libsystem_kernel.dylib 0x00007fff931400fa __psynch_cvwait + 10
|
||||
1 libsystem_c.dylib 0x00007fff86adffe9 _pthread_cond_wait + 869
|
||||
2 git-annex 0x000000010df20179 0x10b5e6000 + 43229561
|
||||
3 git-annex 0x000000010defc8eb 0x10b5e6000 + 43084011
|
||||
4 git-annex 0x000000010df0bc86 0x10b5e6000 + 43146374
|
||||
5 git-annex 0x000000010df0c5e0 0x10b5e6000 + 43148768
|
||||
6 libsystem_c.dylib 0x00007fff86adb7a2 _pthread_start + 327
|
||||
7 libsystem_c.dylib 0x00007fff86ac81e1 thread_start + 13
|
||||
|
||||
Thread 6:: Dispatch queue: com.apple.libdispatch-manager
|
||||
0 libsystem_kernel.dylib 0x00007fff93140d16 kevent + 10
|
||||
1 libdispatch.dylib 0x00007fff8e6fedea _dispatch_mgr_invoke + 883
|
||||
2 libdispatch.dylib 0x00007fff8e6fe9ee _dispatch_mgr_thread + 54
|
||||
|
||||
Thread 7:
|
||||
0 libsystem_kernel.dylib 0x00007fff9313e686 mach_msg_trap + 10
|
||||
1 libsystem_kernel.dylib 0x00007fff9313dc42 mach_msg + 70
|
||||
2 com.apple.CoreFoundation 0x00007fff8c1e2233 __CFRunLoopServiceMachPort + 195
|
||||
3 com.apple.CoreFoundation 0x00007fff8c1e7916 __CFRunLoopRun + 1078
|
||||
4 com.apple.CoreFoundation 0x00007fff8c1e70e2 CFRunLoopRunSpecific + 290
|
||||
5 com.apple.CoreFoundation 0x00007fff8c1f5dd1 CFRunLoopRun + 97
|
||||
6 git-annex 0x000000010c72b3ec 0x10b5e6000 + 18109420
|
||||
7 libsystem_c.dylib 0x00007fff86adb7a2 _pthread_start + 327
|
||||
8 libsystem_c.dylib 0x00007fff86ac81e1 thread_start + 13
|
||||
|
||||
Thread 8:
|
||||
0 libsystem_kernel.dylib 0x00007fff9313e686 mach_msg_trap + 10
|
||||
1 libsystem_kernel.dylib 0x00007fff9313dc42 mach_msg + 70
|
||||
2 com.apple.CoreFoundation 0x00007fff8c1e2233 __CFRunLoopServiceMachPort + 195
|
||||
3 com.apple.CoreFoundation 0x00007fff8c1e7916 __CFRunLoopRun + 1078
|
||||
4 com.apple.CoreFoundation 0x00007fff8c1e70e2 CFRunLoopRunSpecific + 290
|
||||
5 com.apple.CoreFoundation 0x00007fff8c1f5dd1 CFRunLoopRun + 97
|
||||
6 git-annex 0x000000010c72b3ec 0x10b5e6000 + 18109420
|
||||
7 libsystem_c.dylib 0x00007fff86adb7a2 _pthread_start + 327
|
||||
8 libsystem_c.dylib 0x00007fff86ac81e1 thread_start + 13
|
||||
|
||||
Thread 9:
|
||||
0 libsystem_kernel.dylib 0x00007fff9313e686 mach_msg_trap + 10
|
||||
1 libsystem_kernel.dylib 0x00007fff9313dc42 mach_msg + 70
|
||||
2 com.apple.CoreFoundation 0x00007fff8c1e2233 __CFRunLoopServiceMachPort + 195
|
||||
3 com.apple.CoreFoundation 0x00007fff8c1e7916 __CFRunLoopRun + 1078
|
||||
4 com.apple.CoreFoundation 0x00007fff8c1e70e2 CFRunLoopRunSpecific + 290
|
||||
5 com.apple.CoreFoundation 0x00007fff8c1f5dd1 CFRunLoopRun + 97
|
||||
6 git-annex 0x000000010c72b3ec 0x10b5e6000 + 18109420
|
||||
7 libsystem_c.dylib 0x00007fff86adb7a2 _pthread_start + 327
|
||||
8 libsystem_c.dylib 0x00007fff86ac81e1 thread_start + 13
|
||||
|
||||
Thread 3 crashed with X86 Thread State (64-bit):
|
||||
rax: 0x000000010eaaca28 rbx: 0x00007f9dc38000c0 rcx: 0x000000010f87ce00 rdx: 0x000000010e3c28f0
|
||||
rdi: 0x0000000000000000 rsi: 0x001c4500001c4500 rbp: 0x000000010f87ce10 rsp: 0x000000010f87cdd0
|
||||
r8: 0x0000000000002060 r9: 0x000000010f87ce00 r10: 0x000000010eabf328 r11: 0x000000010e9fee5f
|
||||
r12: 0x000000010f5585d8 r13: 0x000000010e3c2798 r14: 0x0000000000000000 r15: 0x000000010f548140
|
||||
rip: 0x00007fff86ae0bf9 rfl: 0x0000000000010202 cr2: 0x0000000000000000
|
||||
Logical CPU: 0
|
||||
|
||||
Binary Images:
|
||||
0x10b5e6000 - 0x10e08cff7 +git-annex (0) <2C4C13B3-4830-322A-A144-9E51B386EB1E> /Applications/git-annex.app/Contents/MacOS/bundle/git-annex
|
||||
0x10e85a000 - 0x10e957ff7 +E (22.3) <47B09CB2-C636-3024-8B55-6040F7829B4C> /Applications/git-annex.app/Contents/MacOS/bundle/E
|
||||
0x10e990000 - 0x10e9a4fff +F (0) <FA90B1B1-A866-3A6C-BB97-06955F4C8C0B> /Applications/git-annex.app/Contents/MacOS/bundle/F
|
||||
0x10e9ab000 - 0x10e9d8ff7 +G (0) <D80652C0-9A55-351C-8EAF-2364359BA0A2> /Applications/git-annex.app/Contents/MacOS/bundle/G
|
||||
0x10e9de000 - 0x10eaabfdf +H (0) <29C3AFF5-8EFB-3A16-81F6-0DA6CF2675A6> /Applications/git-annex.app/Contents/MacOS/bundle/H
|
||||
0x10eadd000 - 0x10eaefff7 +B (43) <2A1551E8-A272-3DE5-B692-955974FE1416> /Applications/git-annex.app/Contents/MacOS/bundle/B
|
||||
0x10eaf7000 - 0x10ebecfff +D (34) <FEE8B996-EB44-37FA-B96E-D379664DEFE1> /Applications/git-annex.app/Contents/MacOS/bundle/D
|
||||
0x10ec01000 - 0x10ed1992f +I (532.2) <90D31928-F48D-3E37-874F-220A51FD9E37> /Applications/git-annex.app/Contents/MacOS/bundle/I
|
||||
0x10ed3d000 - 0x10ef3dfff +S (491.11.3) <5783D305-04E8-3D17-94F7-1CEAFA975240> /Applications/git-annex.app/Contents/MacOS/bundle/S
|
||||
0x10f048000 - 0x10f06dff7 +Z (26) <D86169F3-9F31-377A-9AF3-DB17142052E4> /Applications/git-annex.app/Contents/MacOS/bundle/Z
|
||||
0x10f0a1000 - 0x10f109ff7 +0A (65.1) <20E31B90-19B9-3C2A-A9EB-474E08F9FE05> /Applications/git-annex.app/Contents/MacOS/bundle/0A
|
||||
0x10f163000 - 0x10f1ccfff +0B (56) <EAA2B53E-EADE-39CF-A0EF-FB9D4940672A> /Applications/git-annex.app/Contents/MacOS/bundle/0B
|
||||
0x10f235000 - 0x10f248fff +T (0) <C8970714-4C86-3BE6-94D6-4835DCC8A003> /Applications/git-annex.app/Contents/MacOS/bundle/T
|
||||
0x10f257000 - 0x10f264ff7 +U (0) <DCFF385A-090B-3407-868C-91544A2EFEE1> /Applications/git-annex.app/Contents/MacOS/bundle/U
|
||||
0x10f26f000 - 0x10f291ff7 +V (0) <51B317C7-94CC-3C58-B515-924BB3AF0BCC> /Applications/git-annex.app/Contents/MacOS/bundle/V
|
||||
0x10f29b000 - 0x10f2a8ff7 +W (0) <91CF16BE-027F-3FE6-B1EE-6B8BFD51FC1B> /Applications/git-annex.app/Contents/MacOS/bundle/W
|
||||
0x10f2b4000 - 0x10f310fd7 +X (0) <84D934AF-A321-36C0-BBCF-CD3FDAEB0B95> /Applications/git-annex.app/Contents/MacOS/bundle/X
|
||||
0x7fff6b1e6000 - 0x7fff6b21a93f dyld (210.2.3) <36CAA36E-72BC-3E48-96D9-B96A2DF77730> /usr/lib/dyld
|
||||
0x7fff8652a000 - 0x7fff865d0ff7 com.apple.CoreServices.OSServices (557.6 - 557.6) <FFDDD2D8-690D-388F-A48F-4750A792D2CD> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices
|
||||
0x7fff865d1000 - 0x7fff865e8fff libGL.dylib (8.9.2) <B8E5948D-BCF2-3727-B74E-D74B8EDC82D6> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib
|
||||
0x7fff865e9000 - 0x7fff86610fff com.apple.framework.familycontrols (4.1 - 410) <50F5A52C-8FB6-300A-977D-5CFDE4D5796B> /System/Library/PrivateFrameworks/FamilyControls.framework/Versions/A/FamilyControls
|
||||
0x7fff86611000 - 0x7fff8663cfff libxslt.1.dylib (11.3) <441776B8-9130-3893-956F-39C85FFA644F> /usr/lib/libxslt.1.dylib
|
||||
0x7fff86649000 - 0x7fff86698ff7 libcorecrypto.dylib (106.2) <CE0C29A3-C420-339B-ADAA-52F4683233CC> /usr/lib/system/libcorecrypto.dylib
|
||||
0x7fff8669d000 - 0x7fff866a3fff com.apple.DiskArbitration (2.5.2 - 2.5.2) <C713A35A-360E-36CE-AC0A-25C86A3F50CA> /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration
|
||||
0x7fff866a4000 - 0x7fff86ac1fff FaceCoreLight (2.4.1) <DDAFFD7A-D312-3407-A010-5AEF3E17831B> /System/Library/PrivateFrameworks/FaceCoreLight.framework/Versions/A/FaceCoreLight
|
||||
0x7fff86ac7000 - 0x7fff86b93ff7 libsystem_c.dylib (825.26) <4C9EB006-FE1F-3F8F-8074-DFD94CF2CE7B> /usr/lib/system/libsystem_c.dylib
|
||||
0x7fff86d50000 - 0x7fff86da1ff7 com.apple.SystemConfiguration (1.12.2 - 1.12.2) <581BF463-C15A-363B-999A-E830222FA925> /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration
|
||||
0x7fff86dee000 - 0x7fff86deefff com.apple.Accelerate.vecLib (3.8 - vecLib 3.8) <B5A18EE8-DF81-38DD-ACAF-7076B2A26225> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/vecLib
|
||||
0x7fff86def000 - 0x7fff86df4fff com.apple.OpenDirectory (10.8 - 151.10) <CF44120B-9B01-32DD-852E-C9C0E1243FC0> /System/Library/Frameworks/OpenDirectory.framework/Versions/A/OpenDirectory
|
||||
0x7fff86df5000 - 0x7fff86df6fff libDiagnosticMessagesClient.dylib (8) <8548E0DC-0D2F-30B6-B045-FE8A038E76D8> /usr/lib/libDiagnosticMessagesClient.dylib
|
||||
0x7fff86e0a000 - 0x7fff87201fff libLAPACK.dylib (1073.4) <D632EC8B-2BA0-3853-800A-20DA00A1091C> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib
|
||||
0x7fff87622000 - 0x7fff87650ff7 libsystem_m.dylib (3022.6) <B434BE5C-25AB-3EBD-BAA7-5304B34E3441> /usr/lib/system/libsystem_m.dylib
|
||||
0x7fff8766c000 - 0x7fff8769dff7 com.apple.DictionaryServices (1.2 - 184.4) <FB0540FF-5034-3591-A28D-6887FBC220F7> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices
|
||||
0x7fff8769e000 - 0x7fff8769efff libkeymgr.dylib (25) <CC9E3394-BE16-397F-926B-E579B60EE429> /usr/lib/system/libkeymgr.dylib
|
||||
0x7fff87732000 - 0x7fff87754ff7 libxpc.dylib (140.43) <70BC645B-6952-3264-930C-C835010CCEF9> /usr/lib/system/libxpc.dylib
|
||||
0x7fff87755000 - 0x7fff877d7ff7 com.apple.Heimdal (3.0 - 2.0) <C94B0C6C-1320-35A1-8143-FE252E7B2A08> /System/Library/PrivateFrameworks/Heimdal.framework/Versions/A/Heimdal
|
||||
0x7fff877d8000 - 0x7fff87859fff com.apple.Metadata (10.7.0 - 707.11) <2DD25313-420D-351A-90F1-300E95C970CA> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata
|
||||
0x7fff87cbf000 - 0x7fff87d19fff com.apple.print.framework.PrintCore (8.3 - 387.2) <5BA0CBED-4D80-386A-9646-F835C9805B71> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore
|
||||
0x7fff87e27000 - 0x7fff87e34ff7 com.apple.NetAuth (4.0 - 4.0) <F5BC7D7D-AF28-3C83-A674-DADA48FF7810> /System/Library/PrivateFrameworks/NetAuth.framework/Versions/A/NetAuth
|
||||
0x7fff87f54000 - 0x7fff87f68fff com.apple.speech.synthesis.framework (4.1.12 - 4.1.12) <94EDF2AB-809C-3D15-BED5-7AD45B2A7C16> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis
|
||||
0x7fff87f77000 - 0x7fff87f7dff7 libunwind.dylib (35.1) <21703D36-2DAB-3D8B-8442-EAAB23C060D3> /usr/lib/system/libunwind.dylib
|
||||
0x7fff87fab000 - 0x7fff87fabfff com.apple.Accelerate (1.8 - Accelerate 1.8) <6AD48543-0864-3D40-80CE-01F184F24B45> /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate
|
||||
0x7fff88161000 - 0x7fff88162ff7 libSystem.B.dylib (169.3) <9089D72D-E714-31E1-80C8-698A8E8B05AD> /usr/lib/libSystem.B.dylib
|
||||
0x7fff88167000 - 0x7fff88205ff7 com.apple.ink.framework (10.8.2 - 150) <3D8D16A2-7E01-3EA1-B637-83A36D353308> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Ink.framework/Versions/A/Ink
|
||||
0x7fff88222000 - 0x7fff88223ff7 libsystem_sandbox.dylib (220.3) <B739DA63-B675-387A-AD84-412A651143C0> /usr/lib/system/libsystem_sandbox.dylib
|
||||
0x7fff88224000 - 0x7fff88228ff7 com.apple.TCC (1.0 - 1) <F2F3B753-FC73-3543-8BBE-859FDBB4D6A6> /System/Library/PrivateFrameworks/TCC.framework/Versions/A/TCC
|
||||
0x7fff88229000 - 0x7fff88230fff libcopyfile.dylib (89) <876573D0-E907-3566-A108-577EAD1B6182> /usr/lib/system/libcopyfile.dylib
|
||||
0x7fff88a6e000 - 0x7fff88a8dff7 libresolv.9.dylib (51) <0882DC2D-A892-31FF-AD8C-0BB518C48B23> /usr/lib/libresolv.9.dylib
|
||||
0x7fff88a8e000 - 0x7fff88aa1ff7 libbsm.0.dylib (32) <F497D3CE-40D9-3551-84B4-3D5E39600737> /usr/lib/libbsm.0.dylib
|
||||
0x7fff88bbd000 - 0x7fff88bbdfff com.apple.ApplicationServices (45 - 45) <A3ABF20B-ED3A-32B5-830E-B37831A45A80> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices
|
||||
0x7fff88bce000 - 0x7fff88bf6fff libJPEG.dylib (850) <DC750E1E-BD07-339B-A4A6-D86BFE969F68> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib
|
||||
0x7fff88bf7000 - 0x7fff88bf9fff libquarantine.dylib (52.1) <143B726E-DF47-37A8-90AA-F059CFD1A2E4> /usr/lib/system/libquarantine.dylib
|
||||
0x7fff88fe0000 - 0x7fff8933ffff com.apple.Foundation (6.8 - 945.18) <1D7E58E6-FA3A-3CE8-AC85-B9D06B8C0AA0> /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
|
||||
0x7fff89340000 - 0x7fff89575ff7 com.apple.CoreData (106.1 - 407.7) <A676E1A4-2144-376B-92B8-B450DD1D78E5> /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData
|
||||
0x7fff89576000 - 0x7fff8957dfff libGFXShared.dylib (8.9.2) <398F8D57-EC82-3E13-AC8E-470BE19237D7> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGFXShared.dylib
|
||||
0x7fff895d4000 - 0x7fff8a201fff com.apple.AppKit (6.8 - 1187.39) <199962F0-B06B-3666-8FD5-5C90374BA16A> /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
|
||||
0x7fff8a202000 - 0x7fff8a519ff7 com.apple.CoreServices.CarbonCore (1037.6 - 1037.6) <1E567A52-677F-3168-979F-5FBB0818D52B> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore
|
||||
0x7fff8a5e0000 - 0x7fff8a5e7fff com.apple.NetFS (5.0 - 4.0) <82E24B9A-7742-3DA3-9E99-ED267D98C05E> /System/Library/Frameworks/NetFS.framework/Versions/A/NetFS
|
||||
0x7fff8a5e8000 - 0x7fff8a63fff7 com.apple.ScalableUserInterface (1.0 - 1) <F1D43DFB-1796-361B-AD4B-39F1EED3BE19> /System/Library/Frameworks/QuartzCore.framework/Versions/A/Frameworks/ScalableUserInterface.framework/Versions/A/ScalableUserInterface
|
||||
0x7fff8a71b000 - 0x7fff8a767ff7 libauto.dylib (185.4) <AD5A4CE7-CB53-313C-9FAE-673303CC2D35> /usr/lib/libauto.dylib
|
||||
0x7fff8a768000 - 0x7fff8a768fff libOpenScriptingUtil.dylib (148.3) <F8681222-0969-3B10-8BCE-C55A4B9C520C> /usr/lib/libOpenScriptingUtil.dylib
|
||||
0x7fff8a7e7000 - 0x7fff8a808ff7 libCRFSuite.dylib (33) <736ABE58-8DED-3289-A042-C25AF7AE5B23> /usr/lib/libCRFSuite.dylib
|
||||
0x7fff8a809000 - 0x7fff8a815fff com.apple.CrashReporterSupport (10.8.3 - 418) <DE6AFE16-D97E-399D-82ED-3522C773C36E> /System/Library/PrivateFrameworks/CrashReporterSupport.framework/Versions/A/CrashReporterSupport
|
||||
0x7fff8a816000 - 0x7fff8b1a64af com.apple.CoreGraphics (1.600.0 - 332) <5AB32E51-9154-3733-B83B-A9A748652847> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics
|
||||
0x7fff8b1a7000 - 0x7fff8b1befff com.apple.CFOpenDirectory (10.8 - 151.10) <10F41DA4-AD54-3F52-B898-588D9A117171> /System/Library/Frameworks/OpenDirectory.framework/Versions/A/Frameworks/CFOpenDirectory.framework/Versions/A/CFOpenDirectory
|
||||
0x7fff8b242000 - 0x7fff8b285ff7 com.apple.bom (12.0 - 192) <0BF1F2D2-3648-36B7-BE4B-551A0173209B> /System/Library/PrivateFrameworks/Bom.framework/Versions/A/Bom
|
||||
0x7fff8b286000 - 0x7fff8b2c3fef libGLImage.dylib (8.9.2) <C38649ED-E1C9-315E-9953-F33E8C6A3C89> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLImage.dylib
|
||||
0x7fff8b2c4000 - 0x7fff8b303ff7 com.apple.QD (3.42.1 - 285.1) <77A20C25-EBB5-341C-A05C-5D458B97AD5C> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD
|
||||
0x7fff8b304000 - 0x7fff8b39efff libvMisc.dylib (380.6) <714336EA-1C0E-3735-B31C-19DFDAAF6221> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvMisc.dylib
|
||||
0x7fff8b3b8000 - 0x7fff8b566fff com.apple.QuartzCore (1.8 - 304.3) <F450F2DE-2F24-3557-98B6-310E05DAC17F> /System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore
|
||||
0x7fff8ba39000 - 0x7fff8ba4cff7 com.apple.LangAnalysis (1.7.0 - 1.7.0) <2F2694E9-A7BC-33C7-B4CF-8EC907DF0FEB> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LangAnalysis.framework/Versions/A/LangAnalysis
|
||||
0x7fff8bd12000 - 0x7fff8bd1cfff com.apple.speech.recognition.framework (4.1.5 - 4.1.5) <D803919C-3102-3515-A178-61E9C86C46A1> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework/Versions/A/SpeechRecognition
|
||||
0x7fff8c0d6000 - 0x7fff8c0d7ff7 libdnsinfo.dylib (453.19) <14202FFB-C3CA-3FCC-94B0-14611BF8692D> /usr/lib/system/libdnsinfo.dylib
|
||||
0x7fff8c179000 - 0x7fff8c17efff libcompiler_rt.dylib (30) <08F8731D-5961-39F1-AD00-4590321D24A9> /usr/lib/system/libcompiler_rt.dylib
|
||||
0x7fff8c1b2000 - 0x7fff8c39cff7 com.apple.CoreFoundation (6.8 - 744.19) <0F7403CA-2CB8-3D0A-992B-679701DF27CA> /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
|
||||
0x7fff8c39d000 - 0x7fff8c3c4ff7 com.apple.PerformanceAnalysis (1.16 - 16) <E4888388-F41B-313E-9CBB-5807D077BDA9> /System/Library/PrivateFrameworks/PerformanceAnalysis.framework/Versions/A/PerformanceAnalysis
|
||||
0x7fff8c3e2000 - 0x7fff8c3e5ff7 libdyld.dylib (210.2.3) <F59367C9-C110-382B-A695-9035A6DD387E> /usr/lib/system/libdyld.dylib
|
||||
0x7fff8c3e6000 - 0x7fff8c3e8fff libCVMSPluginSupport.dylib (8.9.2) <EF1192AC-3357-3A0B-BFAF-6594D7737892> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCVMSPluginSupport.dylib
|
||||
0x7fff8c3e9000 - 0x7fff8c484fff com.apple.CoreSymbolication (3.0 - 117) <50716F74-41C2-3BB9-AC16-12C4D4C2DD1E> /System/Library/PrivateFrameworks/CoreSymbolication.framework/Versions/A/CoreSymbolication
|
||||
0x7fff8c75b000 - 0x7fff8c75bfff com.apple.CoreServices (57 - 57) <9DD44CB0-C644-35C3-8F57-0B41B3EC147D> /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices
|
||||
0x7fff8cf1f000 - 0x7fff8d094ff7 com.apple.CFNetwork (596.4.3 - 596.4.3) <A57B3308-2F08-3EC3-B4AC-39A3D9F0B9F7> /System/Library/Frameworks/CFNetwork.framework/Versions/A/CFNetwork
|
||||
0x7fff8d0ae000 - 0x7fff8d0e4fff libsystem_info.dylib (406.17) <4FFCA242-7F04-365F-87A6-D4EFB89503C1> /usr/lib/system/libsystem_info.dylib
|
||||
0x7fff8d0e5000 - 0x7fff8d148ff7 com.apple.audio.CoreAudio (4.1.1 - 4.1.1) <9ACD3AED-6C04-3BBB-AB2A-FC253B16D093> /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio
|
||||
0x7fff8d156000 - 0x7fff8d16cfff com.apple.MultitouchSupport.framework (235.29 - 235.29) <617EC8F1-BCE7-3553-86DD-F857866E1257> /System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/A/MultitouchSupport
|
||||
0x7fff8d16d000 - 0x7fff8d171fff libGIF.dylib (850) <D4525F87-759C-338C-B283-BB8DE815D3D5> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libGIF.dylib
|
||||
0x7fff8d264000 - 0x7fff8d2aeff7 libGLU.dylib (8.9.2) <1B5511FF-1064-3004-A245-972CE5687D37> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib
|
||||
0x7fff8d2b2000 - 0x7fff8d2dcff7 com.apple.CoreVideo (1.8 - 99.4) <E5082966-6D81-3973-A05A-38AA5B85F886> /System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo
|
||||
0x7fff8d58d000 - 0x7fff8d591fff com.apple.IOSurface (86.0.4 - 86.0.4) <26F01CD4-B76B-37A3-989D-66E8140542B3> /System/Library/Frameworks/IOSurface.framework/Versions/A/IOSurface
|
||||
0x7fff8d6de000 - 0x7fff8d78ffff com.apple.LaunchServices (539.9 - 539.9) <07FC6766-778E-3479-8F28-D2C9917E1DD1> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices
|
||||
0x7fff8d7bf000 - 0x7fff8d80eff7 libFontRegistry.dylib (100) <2E03D7DA-9B8F-31BB-8FB5-3D3B6272127F> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontRegistry.dylib
|
||||
0x7fff8d80f000 - 0x7fff8d88fff7 com.apple.ApplicationServices.ATS (332 - 341.1) <39B53565-FA31-3F61-B090-C787C983142E> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS
|
||||
0x7fff8d94e000 - 0x7fff8d95bfff com.apple.AppleFSCompression (49 - 1.0) <5508344A-2A7E-3122-9562-6F363910A80E> /System/Library/PrivateFrameworks/AppleFSCompression.framework/Versions/A/AppleFSCompression
|
||||
0x7fff8d95c000 - 0x7fff8d99fff7 com.apple.RemoteViewServices (2.0 - 80.6) <5CFA361D-4853-3ACC-9EFC-A2AC1F43BA4B> /System/Library/PrivateFrameworks/RemoteViewServices.framework/Versions/A/RemoteViewServices
|
||||
0x7fff8dac2000 - 0x7fff8dac8fff libmacho.dylib (829) <BF332AD9-E89F-387E-92A4-6E1AB74BD4D9> /usr/lib/system/libmacho.dylib
|
||||
0x7fff8dac9000 - 0x7fff8db03ff7 com.apple.GSS (3.0 - 2.0) <970CAE00-1437-3F4E-B677-0FDB3714C08C> /System/Library/Frameworks/GSS.framework/Versions/A/GSS
|
||||
0x7fff8db09000 - 0x7fff8db12ff7 com.apple.CommerceCore (1.0 - 26.1) <40A129A8-4E5D-3C7A-B299-8CB203C4C65D> /System/Library/PrivateFrameworks/CommerceKit.framework/Versions/A/Frameworks/CommerceCore.framework/Versions/A/CommerceCore
|
||||
0x7fff8db13000 - 0x7fff8db15fff com.apple.TrustEvaluationAgent (2.0 - 23) <A97D348B-32BF-3E52-8DF2-59BFAD21E1A3> /System/Library/PrivateFrameworks/TrustEvaluationAgent.framework/Versions/A/TrustEvaluationAgent
|
||||
0x7fff8de6c000 - 0x7fff8de6eff7 libunc.dylib (25) <92805328-CD36-34FF-9436-571AB0485072> /usr/lib/system/libunc.dylib
|
||||
0x7fff8de6f000 - 0x7fff8de8eff7 com.apple.ChunkingLibrary (2.0 - 133.3) <8BEC9AFB-DCAA-37E8-A5AB-24422B234ECF> /System/Library/PrivateFrameworks/ChunkingLibrary.framework/Versions/A/ChunkingLibrary
|
||||
0x7fff8de8f000 - 0x7fff8deeefff com.apple.AE (645.6 - 645.6) <44F403C1-660A-3543-AB9C-3902E02F936F> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE
|
||||
0x7fff8deef000 - 0x7fff8dfecfff libsqlite3.dylib (138.1) <ADE9CB98-D77D-300C-A32A-556B7440769F> /usr/lib/libsqlite3.dylib
|
||||
0x7fff8e06b000 - 0x7fff8e076ff7 com.apple.bsd.ServiceManagement (2.0 - 2.0) <C12962D5-85FB-349E-AA56-64F4F487F219> /System/Library/Frameworks/ServiceManagement.framework/Versions/A/ServiceManagement
|
||||
0x7fff8e077000 - 0x7fff8e086fff com.apple.opengl (1.8.9 - 1.8.9) <6FD163A7-16CC-3D1F-B4B5-B0FDC4ADBF79> /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL
|
||||
0x7fff8e087000 - 0x7fff8e092fff com.apple.CommonAuth (3.0 - 2.0) <7A953C1F-8B18-3E46-9BEA-26D9B5B7745D> /System/Library/PrivateFrameworks/CommonAuth.framework/Versions/A/CommonAuth
|
||||
0x7fff8e093000 - 0x7fff8e093fff com.apple.Cocoa (6.7 - 19) <1F77945C-F37A-3171-B22E-F7AB0FCBB4D4> /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa
|
||||
0x7fff8e1f3000 - 0x7fff8e1f4fff libsystem_blocks.dylib (59) <D92DCBC3-541C-37BD-AADE-ACC75A0C59C8> /usr/lib/system/libsystem_blocks.dylib
|
||||
0x7fff8e23c000 - 0x7fff8e23cffd com.apple.audio.units.AudioUnit (1.9 - 1.9) <EC55FB59-2443-3F08-9142-7BCC93C76E4E> /System/Library/Frameworks/AudioUnit.framework/Versions/A/AudioUnit
|
||||
0x7fff8e23d000 - 0x7fff8e30fff7 com.apple.CoreText (260.0 - 275.16) <5BFC1D67-6A6F-38BC-9D90-9C712684EDAC> /System/Library/Frameworks/CoreText.framework/Versions/A/CoreText
|
||||
0x7fff8e310000 - 0x7fff8e31eff7 libkxld.dylib (2050.24.15) <A619A9AC-09AF-3FF3-95BF-F07CC530EC31> /usr/lib/system/libkxld.dylib
|
||||
0x7fff8e31f000 - 0x7fff8e38dff7 com.apple.framework.IOKit (2.0.1 - 755.24.1) <04BFB138-8AF4-310A-8E8C-045D8A239654> /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit
|
||||
0x7fff8e39f000 - 0x7fff8e525fff libBLAS.dylib (1073.4) <C102C0F6-8CB6-3B49-BA6B-2EB61F0B2784> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
|
||||
0x7fff8e553000 - 0x7fff8e597fff libcups.2.dylib (327.6) <9C01D012-6F4C-3B69-B614-1B408B0ED4E3> /usr/lib/libcups.2.dylib
|
||||
0x7fff8e598000 - 0x7fff8e5a6fff libcommonCrypto.dylib (60027) <BAAFE0C9-BB86-3CA7-88C0-E3CBA98DA06F> /usr/lib/system/libcommonCrypto.dylib
|
||||
0x7fff8e6fa000 - 0x7fff8e70fff7 libdispatch.dylib (228.23) <D26996BF-FC57-39EB-8829-F63585561E09> /usr/lib/system/libdispatch.dylib
|
||||
0x7fff8e710000 - 0x7fff8e71eff7 libsystem_network.dylib (77.10) <0D99F24E-56FE-380F-B81B-4A4C630EE587> /usr/lib/system/libsystem_network.dylib
|
||||
0x7fff8e71f000 - 0x7fff8e741ff7 com.apple.Kerberos (2.0 - 1) <C49B8820-34ED-39D7-A407-A3E854153556> /System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos
|
||||
0x7fff8e788000 - 0x7fff8e797ff7 libxar.1.dylib (105) <370ED355-E516-311E-BAFD-D80633A84BE1> /usr/lib/libxar.1.dylib
|
||||
0x7fff8f144000 - 0x7fff8f1d1ff7 com.apple.SearchKit (1.4.0 - 1.4.0) <C7F43889-F8BF-3CB9-AD66-11AEFCBCEDE7> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit
|
||||
0x7fff8f24c000 - 0x7fff8f24ffff libRadiance.dylib (850) <62E3F7FB-03E3-3937-A857-AF57A75EAF09> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libRadiance.dylib
|
||||
0x7fff8f533000 - 0x7fff8f7d7ff7 com.apple.CoreImage (8.4.0 - 1.0.1) <CC6DD22B-FFC6-310B-BE13-2397A02C79EF> /System/Library/Frameworks/QuartzCore.framework/Versions/A/Frameworks/CoreImage.framework/Versions/A/CoreImage
|
||||
0x7fff8f7d8000 - 0x7fff8f840fff libvDSP.dylib (380.6) <CD4C5EEB-9E63-30C4-8103-7A5EAEA0BE60> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvDSP.dylib
|
||||
0x7fff8f8ab000 - 0x7fff8f8affff libpam.2.dylib (20) <C8F45864-5B58-3237-87E1-2C258A1D73B8> /usr/lib/libpam.2.dylib
|
||||
0x7fff8fabb000 - 0x7fff8fb28ff7 com.apple.datadetectorscore (4.1 - 269.3) <5775F0DB-87D6-310D-8B03-E2AD729EFB28> /System/Library/PrivateFrameworks/DataDetectorsCore.framework/Versions/A/DataDetectorsCore
|
||||
0x7fff8fc60000 - 0x7fff8fcbcff7 com.apple.Symbolication (1.3 - 93) <97F3B1D2-D81D-3F37-87B3-B9A686124CF5> /System/Library/PrivateFrameworks/Symbolication.framework/Versions/A/Symbolication
|
||||
0x7fff8fd91000 - 0x7fff8fe6bfff com.apple.backup.framework (1.4.3 - 1.4.3) <6B65C44C-7777-3331-AD9D-438D10AAC777> /System/Library/PrivateFrameworks/Backup.framework/Versions/A/Backup
|
||||
0x7fff8fe6c000 - 0x7fff8fe79fff libbz2.1.0.dylib (29) <CE9785E8-B535-3504-B392-82F0064D9AF2> /usr/lib/libbz2.1.0.dylib
|
||||
0x7fff8fe89000 - 0x7fff8ffdbfff com.apple.audio.toolbox.AudioToolbox (1.9 - 1.9) <62770C0F-5600-3EF9-A893-8A234663FFF5> /System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox
|
||||
0x7fff90071000 - 0x7fff90173fff libJP2.dylib (850) <2E43216C-3A5A-3693-820C-38B360698FA0> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJP2.dylib
|
||||
0x7fff90ab4000 - 0x7fff90b79ff7 com.apple.coreui (2.0 - 181.1) <83D2C92D-6842-3C9D-9289-39D5B4554C3A> /System/Library/PrivateFrameworks/CoreUI.framework/Versions/A/CoreUI
|
||||
0x7fff90e1a000 - 0x7fff90e1bfff liblangid.dylib (116) <864C409D-D56B-383E-9B44-A435A47F2346> /usr/lib/liblangid.dylib
|
||||
0x7fff90f20000 - 0x7fff90fddff7 com.apple.ColorSync (4.8.0 - 4.8.0) <6CE333AE-EDDB-3768-9598-9DB38041DC55> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSync.framework/Versions/A/ColorSync
|
||||
0x7fff90fde000 - 0x7fff9105dff7 com.apple.securityfoundation (6.0 - 55115.4) <8676E0DF-295F-3690-BDAA-6C9C1D210B88> /System/Library/Frameworks/SecurityFoundation.framework/Versions/A/SecurityFoundation
|
||||
0x7fff9105e000 - 0x7fff910b4fff com.apple.HIServices (1.20 - 417) <BCD36950-013F-35C2-918E-05A93A47BE8C> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices
|
||||
0x7fff910b5000 - 0x7fff910d6fff com.apple.Ubiquity (1.2 - 243.15) <C9A7EE77-B637-3676-B667-C0843BBB0409> /System/Library/PrivateFrameworks/Ubiquity.framework/Versions/A/Ubiquity
|
||||
0x7fff910de000 - 0x7fff91133ff7 libTIFF.dylib (850) <EDAF0D99-70AF-3B3F-9EFA-9463C91D0E3C> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libTIFF.dylib
|
||||
0x7fff9125c000 - 0x7fff9127cfff libPng.dylib (850) <203C43BF-FAD3-3CCB-81D5-F2770E36338B> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib
|
||||
0x7fff9127f000 - 0x7fff91398fff com.apple.ImageIO.framework (3.2.1 - 850) <C3FFCEEB-AA0C-314B-9E94-7005EE48A403> /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
|
||||
0x7fff9139f000 - 0x7fff913b6fff com.apple.GenerationalStorage (1.1 - 132.3) <FD4A84B3-13A8-3C60-A59E-25A361447A17> /System/Library/PrivateFrameworks/GenerationalStorage.framework/Versions/A/GenerationalStorage
|
||||
0x7fff91582000 - 0x7fff91586fff libCoreVMClient.dylib (32.3) <AD8391D9-56DD-3A78-A294-6A30E6ECE1A2> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreVMClient.dylib
|
||||
0x7fff91587000 - 0x7fff915bdfff com.apple.DebugSymbols (98 - 98) <14E788B1-4EB2-3FD7-934B-849534DFC198> /System/Library/PrivateFrameworks/DebugSymbols.framework/Versions/A/DebugSymbols
|
||||
0x7fff915cd000 - 0x7fff915d5fff liblaunch.dylib (442.26.2) <2F71CAF8-6524-329E-AC56-C506658B4C0C> /usr/lib/system/liblaunch.dylib
|
||||
0x7fff915d6000 - 0x7fff915e1fff libsystem_notify.dylib (98.5) <C49275CC-835A-3207-AFBA-8C01374927B6> /usr/lib/system/libsystem_notify.dylib
|
||||
0x7fff91650000 - 0x7fff917ebfef com.apple.vImage (6.0 - 6.0) <FAE13169-295A-33A5-8E6B-7C2CC1407FA7> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vImage.framework/Versions/A/vImage
|
||||
0x7fff917ec000 - 0x7fff917f4ff7 libsystem_dnssd.dylib (379.38.1) <BDCB8566-0189-34C0-9634-35ABD3EFE25B> /usr/lib/system/libsystem_dnssd.dylib
|
||||
0x7fff9182d000 - 0x7fff91938fff libFontParser.dylib (84.6) <96C42E49-79A6-3475-B5E4-6A782599A6DA> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontParser.dylib
|
||||
0x7fff919d8000 - 0x7fff919ddfff libcache.dylib (57) <65187C6E-3FBF-3EB8-A1AA-389445E2984D> /usr/lib/system/libcache.dylib
|
||||
0x7fff919de000 - 0x7fff919defff com.apple.vecLib (3.8 - vecLib 3.8) <794317C7-4E38-338A-A874-5E18001C8503> /System/Library/Frameworks/vecLib.framework/Versions/A/vecLib
|
||||
0x7fff919df000 - 0x7fff91cb0ff7 com.apple.security (7.0 - 55179.13) <F428E306-C407-3B55-BA82-E58755E8A76F> /System/Library/Frameworks/Security.framework/Versions/A/Security
|
||||
0x7fff91d3f000 - 0x7fff9206ffff com.apple.HIToolbox (2.0 - 626.1) <656D08C2-9068-3532-ABDD-32EC5057CCB2> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox
|
||||
0x7fff92084000 - 0x7fff920deff7 com.apple.opencl (2.2.19 - 2.2.19) <3C7DFB2C-B3F9-3447-A1FC-EAAA42181A6E> /System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL
|
||||
0x7fff9216c000 - 0x7fff9216dff7 libremovefile.dylib (23.2) <6763BC8E-18B8-3AD9-8FFA-B43713A7264F> /usr/lib/system/libremovefile.dylib
|
||||
0x7fff9312e000 - 0x7fff93149ff7 libsystem_kernel.dylib (2050.24.15) <A9F97289-7985-31D6-AF89-151830684461> /usr/lib/system/libsystem_kernel.dylib
|
||||
0x7fff9314d000 - 0x7fff9326dfff com.apple.desktopservices (1.7.4 - 1.7.4) <ED3DA8C0-160F-3CDC-B537-BF2E766AB7C1> /System/Library/PrivateFrameworks/DesktopServicesPriv.framework/Versions/A/DesktopServicesPriv
|
||||
|
||||
External Modification Summary:
|
||||
Calls made by other processes targeting this process:
|
||||
task_for_pid: 1
|
||||
thread_create: 0
|
||||
thread_set_state: 0
|
||||
Calls made by this process:
|
||||
task_for_pid: 0
|
||||
thread_create: 0
|
||||
thread_set_state: 0
|
||||
Calls made by all processes on this machine:
|
||||
task_for_pid: 168404
|
||||
thread_create: 1
|
||||
thread_set_state: 0
|
||||
|
||||
VM Region Summary:
|
||||
ReadOnly portion of Libraries: Total=109.3M resident=31.8M(29%) swapped_out_or_unallocated=77.5M(71%)
|
||||
Writable regions: Total=90.9M written=16.1M(18%) resident=17.5M(19%) swapped_out=0K(0%) unallocated=73.4M(81%)
|
||||
|
||||
REGION TYPE VIRTUAL
|
||||
=========== =======
|
||||
MALLOC 62.5M
|
||||
MALLOC guard page 48K
|
||||
STACK GUARD 56.0M
|
||||
Stack 12.6M
|
||||
VM_ALLOCATE 12.0M
|
||||
__DATA 13.8M
|
||||
__IMAGE 528K
|
||||
__LINKEDIT 58.6M
|
||||
__TEXT 134.3M
|
||||
__UNICODE 544K
|
||||
shared memory 308K
|
||||
=========== =======
|
||||
TOTAL 351.2M
|
||||
|
||||
Model: MacBookPro10,1, BootROM MBP101.00EE.B03, 4 processors, Intel Core i7, 2.8 GHz, 16 GB, SMC 2.3f35
|
||||
Graphics: Intel HD Graphics 4000, Intel HD Graphics 4000, Built-In, 512 MB
|
||||
Graphics: NVIDIA GeForce GT 650M, NVIDIA GeForce GT 650M, PCIe, 1024 MB
|
||||
Memory Module: BANK 0/DIMM0, 8 GB, DDR3, 1600 MHz, 0x80AD, 0x484D5434314753364D465238432D50422020
|
||||
Memory Module: BANK 1/DIMM0, 8 GB, DDR3, 1600 MHz, 0x80AD, 0x484D5434314753364D465238432D50422020
|
||||
AirPort: spairport_wireless_card_type_airport_extreme (0x14E4, 0xEF), Broadcom BCM43xx 1.0 (5.106.98.100.17)
|
||||
Bluetooth: Version 4.1.4f2 12041, 2 service, 18 devices, 1 incoming serial ports
|
||||
Network Service: Wi-Fi, AirPort, en0
|
||||
Serial ATA Device: APPLE SSD SM768E, 751.28 GB
|
||||
USB Device: hub_device, 0x8087 (Intel Corporation), 0x0024, 0x1a100000 / 2
|
||||
USB Device: FaceTime HD Camera (Built-in), apple_vendor_id, 0x8510, 0x1a110000 / 3
|
||||
USB Device: USB Receiver, 0x046d (Logitech Inc.), 0xc52b, 0x14200000 / 1
|
||||
USB Device: hub_device, 0x8087 (Intel Corporation), 0x0024, 0x1d100000 / 2
|
||||
USB Device: hub_device, 0x0424 (SMSC), 0x2512, 0x1d180000 / 3
|
||||
USB Device: Apple Internal Keyboard / Trackpad, apple_vendor_id, 0x0262, 0x1d182000 / 5
|
||||
USB Device: BRCM20702 Hub, 0x0a5c (Broadcom Corp.), 0x4500, 0x1d181000 / 4
|
||||
USB Device: Bluetooth USB Host Controller, apple_vendor_id, 0x8286, 0x1d181300 / 6
|
||||
|
||||
# End of transcript or log.
|
||||
"""]]
|
|
@ -0,0 +1,23 @@
|
|||
[[!comment format=mdwn
|
||||
username="http://joeyh.name/"
|
||||
ip="4.154.0.63"
|
||||
subject="comment 1"
|
||||
date="2013-08-26T19:51:48Z"
|
||||
content="""
|
||||
So this is a crash in the gnutls library used for XMPP. Someone else using OSX reported a similar crash to me by email, reproducible reliably by setting up xmpp with google. This is great debugging info:
|
||||
|
||||
<pre>
|
||||
Thread 3 Crashed:
|
||||
0 libsystem_c.dylib 0x00007fff86ae0bf9 pthread_mutex_lock + 20
|
||||
1 H 0x000000010e9fd29f gnutls_system_mutex_lock + 12
|
||||
2 H 0x000000010ea7fa29 wrap_nettle_rnd_refresh + 20
|
||||
3 H 0x000000010e9fee89 gnutls_deinit + 42
|
||||
4 git-annex 0x000000010caf0a3a 0x10b5e6000 + 22063674
|
||||
</pre>
|
||||
|
||||
Looks like `gnutls_deinit` was called and it crashed there, inside pthread code. So I think git-annex has already managed to connect to the XMPP server (to test it) and the cleanup is where it's crashing.
|
||||
|
||||
This is the second time I have seen a gnutls-related crash using XMPP. The other one was tracked down by John Millikin to a resource allocation bug in haskell-gnutls and fixed.
|
||||
|
||||
I have written a test case that reproduces the problem -- just forking a dozen threads that each try to connect to the google xmpp server and then close the connection. After a dozen or so succeed, one will reliably cause a segfault. Forwarded this test case to John.
|
||||
"""]]
|
|
@ -0,0 +1,14 @@
|
|||
### Please describe the problem.
|
||||
While running git annex sync, it may failed if one did run it on some deep directory, and the sync remove this direcory.
|
||||
|
||||
### What version of git-annex are you using? On what operating system?
|
||||
|
||||
git-annex version: 4.20130815
|
||||
build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP
|
||||
local repository version: 3
|
||||
default repository version: 3
|
||||
supported repository versions: 3 4
|
||||
upgrade supported from repository versions: 0 1 2
|
||||
|
||||
on Debian Gnu Linux sid
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
[[!comment format=mdwn
|
||||
username="http://joeyh.name/"
|
||||
ip="4.154.0.63"
|
||||
subject="comment 2"
|
||||
date="2013-08-24T19:48:46Z"
|
||||
content="""
|
||||
I'm confused by this bug report, because it seems to me I already fixed this same problem in commit a64106dcef5c5aad825662ef115cb2a1cc6985a8. There the problem was that encfs in paranoia mode doesn't support hard links. So I made it detect when createLink fails, and fall back to a code path that doesn't need hard links.
|
||||
|
||||
Can you re-check the version you have, and perhaps try with a current daily build?
|
||||
"""]]
|
16
doc/bugs/http_git_annex_404_retry.mdwn
Normal file
16
doc/bugs/http_git_annex_404_retry.mdwn
Normal file
|
@ -0,0 +1,16 @@
|
|||
A repository like http://annex.debconf.org/debconf-share/ has a git repo
|
||||
published via http. When getting files from such a repo, git-annex tries
|
||||
two urls. One url would be used by a bare repo, and the other by a non-bare
|
||||
repo. (This is due to the directory hashing change.) Result is every file
|
||||
download from a non-bare http repo starts with a 404 and then it retries
|
||||
with the right url.
|
||||
|
||||
Since git-annex already downloads the .git/config to find the uuid of the
|
||||
http repo, it could also look at it to see if the repo is bare. If not,
|
||||
set a flag, and try the two urls in reverse order, which would almost
|
||||
always avoid this 404 problem.
|
||||
|
||||
(The real solution is probably to flag day and get rid of the old-style
|
||||
directory hashing, but that's been discussed elsewhere.)
|
||||
|
||||
--[[Joey]]
|
|
@ -0,0 +1,10 @@
|
|||
[[!comment format=mdwn
|
||||
username="http://joeyh.name/"
|
||||
ip="4.154.0.63"
|
||||
subject="comment 1"
|
||||
date="2013-08-24T16:41:04Z"
|
||||
content="""
|
||||
You are running the git annex assistant, which takes care of getting and dropping files as it's configured to do, and you are then going in and manually running `git annex get`. If the assistant sees a file's content has appeared, and that file is in a directory that it has been configured to not want the content of file in (the `archive` directory by default), it will immediately try to drop it.
|
||||
|
||||
The only thing I don't understand is why the number of `..` in the symlink would change.
|
||||
"""]]
|
|
@ -0,0 +1,8 @@
|
|||
[[!comment format=mdwn
|
||||
username="http://joeyh.name/"
|
||||
ip="4.154.0.63"
|
||||
subject="comment 2"
|
||||
date="2013-08-24T16:41:47Z"
|
||||
content="""
|
||||
BTW if you don't want the assistant to automatically get and drop files in your repository, you can edit the repository in the webapp and select \"manual mode\".
|
||||
"""]]
|
|
@ -0,0 +1,21 @@
|
|||
[[!comment format=mdwn
|
||||
username="https://www.google.com/accounts/o8/id?id=AItOawnSenxKyE_2Z6Wb-EBMO8FciyRywjx1ZiQ"
|
||||
nickname="Walter"
|
||||
subject="comment 3"
|
||||
date="2013-08-24T21:59:12Z"
|
||||
content="""
|
||||
I have all of my repositories set to either manual (all the computers), or full backup (the usb drive and s3).
|
||||
So, this is happening in a manual repository.
|
||||
|
||||
|
||||
Also, I still don't understand why it would be confused over the annex.numcopies setting (why does it claim it needs 2 copies, when numcopies is 1?)
|
||||
|
||||
I just tested between desktop and laptop. File is also present in s3.
|
||||
|
||||
File on desktop. Copy to laptop --> desktop drops (why? both are set to manual, and both have the other set as manual as well)
|
||||
|
||||
Get on desktop. Works, it gets it from laptop. But then, desktop makes laptop drop it (why? again, both are manual repositories)
|
||||
|
||||
|
||||
|
||||
"""]]
|
55
doc/bugs/inconsistent_use_of_SI_prefixes.mdwn
Normal file
55
doc/bugs/inconsistent_use_of_SI_prefixes.mdwn
Normal file
|
@ -0,0 +1,55 @@
|
|||
### Please describe the problem.
|
||||
|
||||
`git annex status` inconsistently uses mebi (SI) and giga (informal) prefixes.
|
||||
|
||||
### What steps will reproduce the problem?
|
||||
|
||||
Example:
|
||||
|
||||
[[!format txt """
|
||||
anarcat@marcos:mp3$ git annex status
|
||||
supported backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL
|
||||
supported remote types: git S3 bup directory rsync web glacier hook
|
||||
repository mode: direct
|
||||
trusted repositories: 0
|
||||
semitrusted repositories: 2
|
||||
00000000-0000-0000-0000-000000000001 -- web
|
||||
b7802161-c984-4c9f-8d05-787a29c41cfe -- here (anarcat@marcos:/srv/mp3)
|
||||
untrusted repositories: 0
|
||||
transfers in progress: none
|
||||
available local disk space: 31.93 gigabytes (+1 megabyte reserved)
|
||||
local annex keys: 19913
|
||||
local annex size: 111.08 gigabytes
|
||||
known annex keys: 20085
|
||||
known annex size: 111.38 gigabytes
|
||||
bloom filter size: 16 mebibytes (3.1% full)
|
||||
backend usage:
|
||||
SHA256E: 39998
|
||||
"""]]
|
||||
|
||||
Notice `mebibytes` and `gigabytes`. It is unclear whether those are gigabytes (1000^3) or gibibytes (1024^3).
|
||||
|
||||
### What version of git-annex are you using? On what operating system?
|
||||
|
||||
4.20130802~bpo70+2, Debian wheezy.
|
||||
|
||||
### Please provide any additional information below.
|
||||
|
||||
nil.
|
||||
|
||||
> git-annex consistently uses the powers of ten units
|
||||
> for disk storage sizes. Its "gigabyte" is the SI gigabyte.
|
||||
>
|
||||
> It uses the absurdly named units for powers of 2 for memory sizes,
|
||||
> in the few places it deals with memory (probably only the above bloom
|
||||
> filter size number).
|
||||
>
|
||||
> AFAIK I am complying with all relevant standards and best practices.
|
||||
> Even though I consider them rather dumb, as is clear if you
|
||||
> [read the opionated source code I wrote to handle this]().
|
||||
>
|
||||
> If git-annex used "gibibyte", the numbers it reports for disk size
|
||||
> would not match the numbers disk vendors and most tools use.
|
||||
>
|
||||
> [[bug_is_in_world_not_in_git-annex|done]] --[[Joey]]
|
||||
|
|
@ -36,3 +36,5 @@ Ubuntu 12.04 LTS
|
|||
|
||||
# End of transcript or log.
|
||||
"""]]
|
||||
|
||||
> [[fixed|done]] --[[Joey]]
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue