packages feed

git-annex 4.20130815 → 4.20130827

raw patch · 134 files changed

+2221/−308 lines, 134 files

Files

Annex/CatFile.hs view
@@ -12,6 +12,7 @@ 	catFileHandle, 	catKey, 	catKeyFile,+	catKeyFileHEAD, ) where  import qualified Data.ByteString.Lazy as L@@ -87,6 +88,9 @@  -} 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
+ Annex/Quvi.hs view
@@ -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
Assistant/Install/AutoStart.o view

binary file changed (3428 → 3428 bytes)

Assistant/Install/Menu.o view

binary file changed (9360 → 9360 bytes)

Assistant/NetMessager.hs view
@@ -29,6 +29,10 @@ 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) 
Assistant/Threads/NetWatcher.hs view
@@ -39,7 +39,11 @@  - 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
Assistant/Threads/PairListener.hs view
@@ -27,7 +27,7 @@ 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,
− Build/BundledPrograms.o

binary file changed (7308 → absent bytes)

Build/Configure.hs view
@@ -32,6 +32,7 @@ 	, 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")
Build/Configure.o view

binary file changed (53340 → 54500 bytes)

Build/DesktopFile.o view

binary file changed (14364 → 14364 bytes)

− Build/EvilSplicer.o

binary file changed (161080 → absent bytes)

Build/InstallDesktopFile.o view

binary file changed (2536 → 2536 bytes)

− Build/Standalone.o

binary file changed (9988 → absent bytes)

− Build/SysConfig.o

binary file changed (5236 → absent bytes)

Build/TestConfig.o view

binary file changed (33088 → 33088 bytes)

CHANGELOG view
@@ -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) unstable; urgency=low    * assistant, watcher: .gitignore files and other git ignores are now
Command/AddUrl.hs view
@@ -27,6 +27,8 @@ 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 @@ 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 @@ 					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 @@ 			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 @@ 			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 @@ 	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
Command/Copy.hs view
@@ -9,6 +9,7 @@  import Common.Annex import Command+import GitAnnex.Options import qualified Command.Move import qualified Remote import Annex.Wanted@@ -19,8 +20,8 @@  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 	]
Command/Fsck.hs view
@@ -33,7 +33,7 @@ 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)
Command/Get.hs view
@@ -11,10 +11,10 @@ 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 @@ 	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 	]
Command/Import.hs view
@@ -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 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"] +opts :: [Option]+opts =+	[ duplicateOption+	, deduplicateOption+	, cleanDuplicatesOption+	]++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 = [withPathContents start]+seek = [withValue getDuplicateMode $ \mode -> withPathContents $ start mode] -start :: (FilePath, FilePath) -> CommandStart-start (srcfile, destfile) =+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
Command/ImportFeed.hs view
@@ -12,7 +12,6 @@ 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,19 +171,14 @@ 	, 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. -}
+ Command/Mirror.hs view
@@ -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+				)
Command/Move.hs view
@@ -14,7 +14,6 @@ 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 = [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 @@ 		(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"
Command/PreCommit.hs view
@@ -12,6 +12,7 @@ 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 @@  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
Command/Sync.hs view
@@ -101,10 +101,13 @@ 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
Command/TransferKey.hs view
@@ -15,23 +15,23 @@ 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] 
Command/Unused.hs view
@@ -21,15 +21,15 @@ 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 @@ 			( 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 @@  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.
Config.hs view
@@ -18,6 +18,9 @@ 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
Config/Files.o view

binary file changed (15108 → 15108 bytes)

Git/Construct.hs view
@@ -91,7 +91,7 @@  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
Git/DiffTree.hs view
@@ -10,6 +10,7 @@ 	diffTree, 	diffTreeRecursive, 	diffIndex,+	diffWorkTree, ) where  import Numeric@@ -41,15 +42,26 @@ 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) 		) 
Git/LsFiles.hs view
@@ -8,6 +8,7 @@ module Git.LsFiles ( 	inRepo, 	notInRepo,+	allFiles, 	deleted, 	modified, 	staged,@@ -40,6 +41,11 @@ 	exclude 		| 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. -}
Git/Version.o view

binary file changed (15924 → 15924 bytes)

GitAnnex.hs view
@@ -56,6 +56,7 @@ 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 @@ 	, Command.Unlock.def 	, Command.Lock.def 	, Command.Sync.def+	, Command.Mirror.def 	, Command.AddUrl.def #ifdef WITH_FEED 	, Command.ImportFeed.def
GitAnnex/Options.hs view
@@ -65,3 +65,12 @@ 	, 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]
Logs/Web.hs view
@@ -13,7 +13,10 @@ 	setUrlMissing, 	urlLog, 	urlLogKey,-	knownUrls+	knownUrls,+	Downloader(..),+	getDownloader,+	setDownloader, ) where  import qualified Data.ByteString.Lazy.Char8 as L@@ -101,3 +104,19 @@   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
Remote.hs view
@@ -55,6 +55,7 @@ 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 @@  {- 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"
Remote/Web.hs view
@@ -15,9 +15,11 @@ 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 @@ 		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 @@ 		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)
Seek.hs view
@@ -26,6 +26,7 @@ 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 @@ 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
Setup.o view

binary file changed (10440 → 10440 bytes)

Test.hs view
@@ -587,6 +587,37 @@ 	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"
Types/GitConfig.hs view
@@ -37,6 +37,7 @@ 	, annexAutoCommit :: Bool 	, annexDebug :: Bool 	, annexWebOptions :: [String]+	, annexQuviOptions :: [String] 	, annexWebDownloadCommand :: Maybe String 	, annexCrippledFileSystem :: Bool 	, annexLargeFiles :: Maybe String@@ -62,6 +63,7 @@ 	, 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")
Utility/Directory.o view

binary file changed (15500 → 15500 bytes)

Utility/ExternalSHA.o view

binary file changed (11664 → 11664 bytes)

Utility/FreeDesktop.o view

binary file changed (23532 → 23532 bytes)

Utility/Monad.hs view
@@ -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 -}@@ -52,6 +52,16 @@ {- Same fixity as && and || -} 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
Utility/Monad.o view

binary file changed (8204 → 9320 bytes)

Utility/Path.hs view
@@ -14,6 +14,7 @@ import System.Directory import Data.List import Data.Maybe+import Data.Char import Control.Applicative  #ifdef mingw32_HOST_OS@@ -236,3 +237,18 @@ 		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
Utility/Path.o view

binary file changed (31160 → 32700 bytes)

+ Utility/Quvi.hs view
@@ -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"
Utility/SafeCommand.o view

binary file changed (29280 → 29280 bytes)

Utility/Url.hs view
@@ -110,7 +110,7 @@ 		_ -> 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,
debian/changelog view
@@ -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) unstable; urgency=low    * assistant, watcher: .gitignore files and other git ignores are now
debian/control view
@@ -21,6 +21,7 @@ 	libghc-dlist-dev, 	libghc-uuid-dev, 	libghc-json-dev,+	libghc-aeson-dev, 	libghc-ifelse-dev, 	libghc-bloomfilter-dev, 	libghc-edit-distance-dev,@@ -60,6 +61,7 @@ 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@@ -70,7 +72,7 @@ 	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
+ debian/tests/basics view
@@ -0,0 +1,4 @@+#!/bin/sh+testdir="$(mktemp -d)"+cd "$testdir"+exec git-annex test
+ debian/tests/control view
@@ -0,0 +1,4 @@+Tests: basics+Depends: @, git, rsync, gnupg+Restrictions: allow-stderr+
doc/backends.mdwn view
@@ -14,7 +14,7 @@   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
+ doc/bugs/400_mode_leakage.mdwn view
@@ -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]]
+ doc/bugs/Can__39__t_start_on_Cyanogenmod_10.2_nightly.mdwn view
@@ -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]] 
+ doc/bugs/Problem_when_dropping_unused_files.mdwn view
@@ -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
doc/bugs/Resource_exhausted.mdwn view
@@ -41,5 +41,5 @@ 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"]]
+ doc/bugs/Unable_to_import_feed.mdwn view
@@ -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]] 
doc/bugs/Unable_to_use_remotes_with_space_in_the_path.mdwn view
@@ -30,3 +30,6 @@ ### 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]] 
doc/bugs/added_branches_makes___39__git_annex_unused__39___slow.mdwn view
@@ -79,3 +79,9 @@ 	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]] 
+ doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit.mdwn view
@@ -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]]
doc/bugs/authentication_to_rsync.net_fails.mdwn view
@@ -25,3 +25,6 @@ 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]] 
+ doc/bugs/cannot_determine_uuid_for_origin.mdwn view
@@ -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]]
@@ -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]] 
+ doc/bugs/git-annex_quit_unexpectedly___40__macosx__41__.mdwn view
@@ -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.+"""]]
+ doc/bugs/http_git_annex_404_retry.mdwn view
@@ -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]]
+ doc/bugs/inconsistent_use_of_SI_prefixes.mdwn view
@@ -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]] +
doc/bugs/non-annexed_file_changed_to_annexed_on_typechange.mdwn view
@@ -36,3 +36,5 @@  # End of transcript or log. """]]++> [[fixed|done]] --[[Joey]]
+ doc/copies/comment_1_af9bee33777fb8a187b714fc8c5fb11d._comment view
@@ -0,0 +1,8 @@+[[!comment format=mdwn+ username="http://olivier.berger.myopenid.com/"+ nickname="obergix"+ subject="See also section on backups in walthroug"+ date="2013-08-25T05:37:04Z"+ content="""+See also [walthrough/backups](/walkthrough/backups/) for some details about copies. +"""]]
+ doc/design/assistant/blog/day_312__DebConf_midpoint.mdwn view
@@ -0,0 +1,30 @@+Wow, 11 days off! I was busy with first dentistry and then DebConf.++Yesterday I [visited CERN](http://joeyh.name/blog/entry/words_fail_me/) and+got to talk with some of their IT guys about how they manage their tens of+petabytes of data. Interested to hear they also have the equivilant of a+per-subdirectory annex.numcopies setting. OTOH, they have half a billion+more files than git's index file is likely to be able to scale to support. ;)++Pushed a release out today despite not having many queued changes. +Also, I got git-annex migrated to Debian testing, and so was also+able to update the wheezy backport to a just 2 week old version.++Today is also the last day of the [campaign](https://campaign.joeyh.name/)!++----++There has been a ton of discussion about git-annex here at DebConf,+including 3 BoF sessions that mostly focused on it, amoung other git stuff.+Also, RichiH will be presenting his+"[Gitify Your Life](http://penta.debconf.org/dc13_schedule/events/1025.en.html)"+talk on Friday; you can catch it on the [live stream](http://blog.debconf.org/blog/2013/08/14#hl_dc13_recordings).++I've also had a continual stream of in-person bug and feature requests.+(Mostly features.)+These have been added to the wiki and I look forward to working on that+backlog when I get home.++As for coding, I am doing little here, but I do have a branch cooking that+adds some options to `git annex import` to control handling of duplicate+files.
+ doc/design/assistant/blog/day_313__back.mdwn view
@@ -0,0 +1,34 @@+Back home. I have some 170 messages of backlog to attend to. Rather than+digging into that on my first day back, I spent some time implementing some+new features.++`git annex import` has grown three options that help managing importing of+duplicate files in different ways. I started work on that last week, but+didn't have time to find a way to avoid the `--deduplicate` option+checksumming each imported file twice. Unfortunately, I have still not+found a way I'm happy with, so it works but is not as efficient as it could+be.++`git annex mirror` is a new command suggested to me by someone at DebConf+(they don't seem to have filed the requested todo). It arranges for two+repositories to contain the same set of files, as much as possible (when+numcopies allows). So for example, `git annex mirror --to otherdrive`+will make the otherdrive remote have the same files present and not present+as the local repository.++I am thinking about expanding `git annex sync` with an option to also sync+data. I know some find it confusing that it only syncs the git metadata+and not the file contents. That still seems to me to be the best and most+flexible behavior, and not one I want to change in any case since+it would be most unexpected if `git annex sync` downloaded a lot of stuff+you don't want. But I can see making `git annex sync --data` download+all the file contents it can, as well as uploading all available file+contents to each remote it syncs with. And `git annex sync --data --auto`+limit that to only the preferred content. Although perhaps+these command lines are too long to be usable?++----++With the campaign more or less over, I only have a little over a week+before it's time to dive into the first big item on the roadmap. Hope+to be through the backlog by then.
+ doc/design/assistant/blog/day_314__quvi.mdwn view
@@ -0,0 +1,27 @@+Made some good progress on the backlog today. Fixed some bugs, applied some+patches. Noticing that without me around, things still get followed up+on, to a point, for example incomplete test cases for bugs get corrected so+they work. This is a very good thing. Community!++I had to stop going through the backlog when I got to one message from+Anarcat mentioning [quvi](http://quvi.sourceforge.net/). That turns+out to be just what is needed to implement the often-requested feature+of `git-annex addurl` supporting YouTube and other similar sites. So I+spent the rest of the day making that work. For example:++<pre>+% git annex addurl --fast 'http://www.youtube.com/watch?v=1mxPFHBCfuU&list=PL4F80C7D2DC8D9B6C&index=1'+addurl Star_Wars_X_Wing__Seth_Green__Clare_Grant__and_Mike_Lamond_Join_Wil_on_TableTop_SE2E09.webm ok+</pre>++Yes, that got the video title and used it as the filename, and yes,+I can commit this file and run `git annex get` later, and it will be+able to go download the video! I can even use `git annex fsck --fast`+to make sure YouTube still has my videos. Awesome.++The great thing about quvi is it takes the url to a video webpage, and+returns an url that can be used to download the actual video file. So it+simplifies ugly flash videos as far out of existence as is possible.+However, since the direct url to the video file may not keep working for long.+addurl actually records the page's url, with an added indication that quvi+should be used to get it.
+ doc/design/assistant/blog/day_315__backlog.mdwn view
@@ -0,0 +1,12 @@+After a couple days plowing through it, my backlog is down to 30 messages+from 150. And most of what's left is legitimate bugs and todo items.++Spent a while today on an ugly file descriptor leak in the assistant's+local pairing listener. This was an upstream bug in the network-multicast+library, so while I've written a patch to fix it, the fix isn't quite +deployed yet. The file descriptor leak happens when the assistant is+running and there is no network interface that supports multicast.+I was able to reproduce it by just disconnecting from wifi.++Meanwhile, guilhem has been working on patches that promise to massively+speed up `git annex unused`! I will be reviewing them tonight.
+ doc/design/assistant/blog/day_316__day_off.mdwn view
@@ -0,0 +1,6 @@+Today was a day off, really. However, I have a job running to try to+build get a version of ghc-android that works on newer Android releases.++Also, guilhem's `git annex unused` speedup patch landed. The results are+extrordinary -- speedups on the order of 50 to 100 times faster should+not be uncommon. Best of all (for me), it still runs in constant memory!
+ doc/design/assistant/blog/day_317__misc.mdwn view
@@ -0,0 +1,17 @@+Spent a while tracking down a bug that causes a crash on OSX when setting+up an XMPP account. I managed to find a small test case that reliably+crashes, and sent it off to the author of the haskell-gnutls bindings,+which had one similar segfault bug fixed before with a similar test case.+Fingers crossed..++Just finished tracking down a bug in the Android app that caused its+terminal to spin and consume most CPU (and presumably a lot of battery).+I introduced this bug when adding the code to open urls written to a fifo,+due to misunderstanding how java objects are created, basically. This bug+is bad enough to do a semi-immediate release for; luckily it's just about+time for a release anyway with other improvements, so in the next few+days..++Have not managed to get a recent ghc-android to build so far.++Guilhem fixed some bugs in `git annex unused`.
doc/design/assistant/polls/prioritizing_special_remotes.mdwn view
@@ -6,7 +6,7 @@ Help me prioritize my work: What special remote would you most like to use with the git-annex assistant? -[[!poll open=yes 16 "Amazon S3 (done)" 12 "Amazon Glacier (done)" 9 "Box.com (done)" 71 "My phone (or MP3 player)" 20 "Tahoe-LAFS" 9 "OpenStack SWIFT" 31 "Google Drive"]]+[[!poll open=yes 16 "Amazon S3 (done)" 12 "Amazon Glacier (done)" 9 "Box.com (done)" 71 "My phone (or MP3 player)" 21 "Tahoe-LAFS" 10 "OpenStack SWIFT" 31 "Google Drive"]]  This poll is ordered with the options I consider easiest to build listed first. Mostly because git-annex already supports them and they
doc/direct_mode.mdwn view
@@ -56,7 +56,15 @@  Direct mode also works well with the git-annex assistant. -You can use `git commit --staged`, or plain `git commit`.+The most important command to use in a direct mode repository is `git annex+sync`. This will commit any files you have run `git annex add` on, as well+as files that were added earlier and have been modified. It will push +the changes to other repositories for `git annex sync` there to pick up,+and will pull and merge any changes made on other repositories into the+local repository.++While you generally will just use `git annex sync`, if you want to,+you can use `git commit --staged`, or plain `git commit`. But not `git commit -a`, or `git commit <file>` .. that'd commit whole large files into git! 
+ doc/direct_mode/comment_10_94284a476604e9c812b7ee475ca22959._comment view
@@ -0,0 +1,12 @@+[[!comment format=mdwn+ username="http://olivier.berger.myopenid.com/"+ nickname="obergix"+ subject="How to sync changes made in another remote when in direct mode"+ date="2013-08-17T21:53:57Z"+ content="""+Re-reading @joey's reponse above, I see that merge/pull don't seem to be safe and will create dangling symlinks. That corresponds to those files I can see on cifs, I guess.++But then, how can a direct repo sync with changes made in other remotes, if there no pull/fetch available.++Can it then be only the source of changes which will propagate to indirect remotes ?+"""]]
+ doc/direct_mode/comment_11_1c79c93f4b17cfc354ab920e3775cc60._comment view
@@ -0,0 +1,26 @@+[[!comment format=mdwn+ username="http://www.gl-como.it/author/valhalla/"+ nickname="valhalla"+ subject="Direct mode clone of an indirect repo"+ date="2013-08-18T08:47:35Z"+ content="""+I too have issues with mixing direct and indirect mode repositories.++ I have a regular, existing repository with ebooks, shared between various clones on proper :) filesystems; now I would need a copy of some of them on an ereader which only offers a FAT filesystem, so it has to be direct mode.++    mount $READER+    cd $reader+    git clone $REPO++I get a directory full of small files, the way git manages links on FAT.++    git annex init \"ebook reader\"++This detects the fact that it is working on a crippled filesystem, enables direct mode and disables ssh connection caching; up to now everything seems to be fine, but then++    git annex get $SOME_BOOK++seems to work, downloads the file somewhere, but when I try to open $SOME_BOOK it is still the fake link, and the file has been downloaded in its destination, as if the repo wasn't in direct mode.++I use version 4.20130723 on debian jessie+"""]]
+ doc/direct_mode/comment_12_1b5218fdb6ee362d6df68ff1229590d4._comment view
@@ -0,0 +1,10 @@+[[!comment format=mdwn+ username="http://joeyh.name/"+ ip="4.154.0.63"+ subject="comment 12"+ date="2013-08-23T17:48:54Z"+ content="""+There should be no obstacles to using direct mode on one clone of a git repository, and indirect mode on another clone. The data stored in git for either mode is identical, and I do this myself for some repositories.++@valhalla, you probably need to run `git annex fsck`, and if that does not solve your problem, you need to file a bug report.+"""]]
+ doc/direct_mode/comment_13_55108ac736ea450df89332ba5de4a208._comment view
@@ -0,0 +1,12 @@+[[!comment format=mdwn+ username="http://joeyh.name/"+ ip="4.154.0.63"+ subject="comment 13"+ date="2013-08-23T17:50:15Z"+ content="""+@obergix asked:++> But then, how can a direct repo sync with changes made in other remotes, if there no pull/fetch available.++The answer is simple: By running `git annex sync`, which handles all that.+"""]]
+ doc/direct_mode/comment_14_ff4ffc2aabc5fd174d7386ef13860f78._comment view
@@ -0,0 +1,10 @@+[[!comment format=mdwn+ username="http://olivier.berger.myopenid.com/"+ nickname="obergix"+ subject="Git annex copy needed before git annex sync"+ date="2013-08-23T19:59:35Z"+ content="""+Thanks for these details @joeyh. But AFAIU, one needs to proceed to the git annex copy before doing the git annex sync, otherwise, symlinks (or files containing the symlink path on SMB) will be created, instead of the plain \"direct\" files that are expected.++I'm still not sure whether the git annex sync needs to be issued on either of the indirect or direct remotes first, or both, then in which sequence. I think a \"walkthrough\" script would help.+"""]]
+ doc/direct_mode/comment_15_1cd32456630b25d5aaa6d2763e6eb384._comment view
@@ -0,0 +1,8 @@+[[!comment format=mdwn+ username="http://joeyh.name/"+ ip="4.154.0.63"+ subject="comment 15"+ date="2013-08-24T15:56:47Z"+ content="""+No, you can sync before you copy, get, or whatever. git-annex will replace the symlinks with the actual files when they arrive at the repository.+"""]]
+ doc/direct_mode/comment_9_cff56dbcdfec60375c30d5b1b1c60614._comment view
@@ -0,0 +1,12 @@+[[!comment format=mdwn+ username="http://olivier.berger.myopenid.com/"+ nickname="obergix"+ subject="Mixing indirect mode and direct mode on different remotes"+ date="2013-08-17T20:35:40Z"+ content="""+I'd like to have an indirect mode repo on my laptop cloned on a cifs mount point (mounted off an SMB NAS) thus in direct mode. But all I can see on the clone after merge/pull is text files of length 207 chars containg the symlink in plain text.++I guess this is what git manages internally for the symlinks... so I'm afraid git annex doesn't work in such case.++Can you confirm that indirect and direct modes can coexist on clones of the same repo ?+"""]]
+ doc/forum/Adding_existing_S3_bucket_to_sync_with.mdwn view
@@ -0,0 +1,16 @@+Hello,++I am just starting to learn git-annex so forgive me if this is a naive question.++I have the following repositories:++1. Home (laptop)+2. Work (mac mini)+3. S3 bucket+4. USB drive, full backup, attached to Home laptop.++I want to sync files between Home and Work via the S3 bucket.  It is not clear to me how to accomplish this through the git-annex assistant.  Is this possible? Are there instructions online?++Thanks in advance!++Scott
+ doc/forum/Android:_is_constant_high_cpu_usage_to_be_expected__63__.mdwn view
@@ -0,0 +1,3 @@+While running the Git Annex App on Android, the app causes a constant cpu usage of about 50% when idling. I've seen this behavior on two devices (phone and tablet) with a CM 10.1 nightly build. The app causes this high cpu usage even when it is in the background, not performing any synchronization and managing only one repository containing just one file. Unfortunately I couldn't figure out what causes the cpu usage. The daemon.log file remains unchanged and I couldn't find any other log files.++Is this expected behavior or unusual high cpu usage?
+ doc/forum/Annex_contents_just_disappeared__63__.mdwn view
@@ -0,0 +1,12 @@+Joey,++I have git-annex now to manage many of the repositories on my system.  I have them both on my local machine, and on a very large file server, and a backup system on the Internet.++Today I went to look at a file in one of my annexes and it wasn't there.  This really surprised me.  But what surprised me most is that around 90% of the files in *all* of my annexes on both my local system and my file server are completely missing.  Only the Internet backup system has them.++How could something like this happen, when I haven't been interacting with these annexes at all during this time?  Can you think of any scenario that might lead to this?  This is pretty much the absolute worst case scenario for an archival data system.++I am running on Mac OS X 10.8, using GHC 7.6.3 to build git-annex, and I keep my git-annex binary updated often.++Thanks,+  John
+ doc/forum/Assistant:_configure_auto-sync.mdwn view
@@ -0,0 +1,11 @@+I have large central repositories of data. Therefore, on each client I want to save part data(to save space of disk). In command line I do ++	[...]+	git-annex webapp+	git-annex drop [DeleteContentDirectory]+	[...]++After this command Assistant performs automatic synchronization getting content of files from this directory(DeleteContentDirectory), but I don't want. I want it's was only symlink of file in this directory.++How can I configure Assistant which files have to get content on the client?  It's possible?+ 
+ doc/forum/Manual_mode_option_in_assistant_auto-syncs.mdwn view
@@ -0,0 +1,11 @@+Hi,++I've recently set-up a server which uses Southpaw's Tactic DAM system and I've initialised a git-annex directory using the assistant which will manage any files which Tactic puts into the git-annex. I plan to make some remote repositories to Amazon S3, friends and some local machines on my home network. The server is running Ubuntu 64-bit and so I've written an upstart job which runs 'git-annex assistant --autostart' as the user 'git-annex' as this user doesn't log-in and run the xdg autostart .desktop at all.++I saw that you can set the purpose of each repository which it will sync to and noticed 'Manual Mode.' From the description, it seems it will only work if I do explicit git-annex commands to it which would be perfect for me as I'd like to write tools which run git-annex add/get/drop/etc. manually on some remotes like ones to friends as I don't want them to sync to everything or any files that they produce, only files which they request with a special tool that I'll write and have Tactic marshal the file changes/names/etc.++I've set those remotes to manual-mode via the assistant and tried copying a file to the remote's directory, but it auto-synced the file anyway. Maybe I'm getting confused at how manual mode works but I'd like to only explicitly set which files to add to the repo by a command and not just 'any' file which gets placed into that directory. If this is more of a wishlist request I guess just move this post into there and I'll reword it as a wish request.++I don't need to use the assistant if that makes more sense, but I would like to be able to still monitor things as the webapp makes for a great GUI to check for that stuff. I can't wait for the https version  of webapp too, I currently run git-annex webapp --listen=<ip>:<port> and then run the link it outputs on my desktop machine to manage it from the server.++Thanks, and this is such a great bit of software, especially as my Internet connection is really bad for 2013 standards, and having the option for friends/remote servers to sync up via an encrypted S3 or box.com account is great!
+ doc/forum/Using_git-annex_via_command_line_in_OS_X.mdwn view
@@ -0,0 +1,3 @@+After installing the binary for Mac OS X and including some larger directories, my computer now seems quite busy (for the last days) with the import process. I see a process called git-annex causing the load, so it seems OK. As the git-annex assistant seems to hang quite a bit, I would like to see the progress using a command line interface. However, I cannot use the "git annex" command as I get the message "git: 'annex' is not a git command. See 'git --help'."++I guess this is my normal git version, installed by homebrew (the OS X version for apt-get) that does not know anything about the installed binary. Can I still use the CLI with this version? Or better, is there or will there be a way to install git-annex from source, or even better using "brew install git-annex"?
+ doc/forum/correct_way_to_add_two_preexisting_datasets.mdwn view
@@ -0,0 +1,25 @@+I've been syncronizing my data since long time, mainly using rsync or unison. Thus I had two 3.5Gb datasets set1 (usb drive, hfs+ partition) and set2 (hdd, ext4 ubuntu 13.04 box) which differed only in 50Mb (new on set1 ). This was double checked using diff -r before doing anything.++I created a git annex repo in direct mode for set2 from command line, and after that I let the assistant scan it.+After that created the repo for set1 and added it to the assistant. I think here comes my mistake (I think).++Instead of keeping them apart, at told assistant to sync with set2.+Why I think this was a mistake? Because set2 was indexed and set1 no, and I'm seeing a lot of file moving a copying, which in my humble opinion should not happen.+What I expected it only the difference to be transferred from set1 to set2.+What it seems to be doing is moving away all content in set1, and copying it back from set2. I think it will end correctly, but with a lot of unnecessary and risky operations.++I think I should have independently added both datasets, let them be scanned and then connect to each other.+So, now the questions:++1. Is that the correct way to proceed?+2. What if I have to identical files with different modifying times, I hope they are not synced, right?+3. Is it posssible to achieve this behaviour of copying only the 50Mb?++Thanks in advance and keep up the good work.+Best regards,+             Juan++EDIT: a couple of questions more:++4. after finishing, set2 ended with a lot of symlinks but only in one subfolder. To prevent this should I put numcopies in 2?+5. This data is composed of input datasets and output simulations. Thus, I need to change them often, but not as often as code and in a very partial way (chunks of 50Mb). For me direct mode is the best (or plain git). However, I was wondering, it is possible to drop some files (even in direct mode) and use simlinks instead?
+ doc/forum/howto_update_feed.mdwn view
@@ -0,0 +1,14 @@+I am using the importfeed [1] functionality.++How am I supposed to update the feed/feeds?++I understand that running++    cd annex; git annex importfeed http://url/to/podcast++a second time will 'do the right thing'.  But that is cumbersome as I have to know the url again.  Is there sth like git annex updatefeeds?+++++[1] http://joeyh.name/blog/entry/git-annex_as_a_podcatcher/
+ doc/forum/many_remotes.mdwn view
@@ -0,0 +1,24 @@+Thanks Joey for the great work.++I'm using git annex for my tv-shows and movies Folder.++I have 3 USB HDD (ext.150Gb,ext.200Gb, ext.2Tb) and a USB Stick (ATV), which are traveling between 3 Devices++2 Notebooks (Lappi,Kiste) and a Nas.++First of all, I'm made a mistake and mixed the remote Locations from the tvshows folder with the movies folder and did a git annex sync, ( this happened about two weeks ago) +I think i can't undo this, only unannex will help.++I've now watched the annex status output and noticed that there are many Remotes, some of them have a timestamp as name.++see log file at http://pastebin.com/79bRVkK6++Running git annex on ubuntu 12.04++    christian@Lappi:~/Serien$ git annex version+    git-annex version: 4.20130417+    local repository version: 3+    default repository version: 3+    supported repository versions: 3 4+    upgrade supported from repository versions: 0 1 2+    build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS
+ doc/forum/webapp___47___assistant_without_watch.mdwn view
@@ -0,0 +1,9 @@+I did not recieve feedback on my comment [1], so I try to post my question again but more clearly.++Is it possible to run the assistent/the webapp without the functionality of 'git annex watch'?++I'd like to use the assistant and to have the automatic syncing but I do not want the local repository to be watched.  Instead I prefer to manually add/drop my files.++I do not see the 'pause button' mentioned in my earlier question [1].++[1] http://git-annex.branchable.com/forum/webapp_and_manual_mode/
doc/git-annex.mdwn view
@@ -157,6 +157,24 @@   post-receive hook. Then any syncs to the repository will update its working   copy automatically. +* mirror [path ...]+  +  This causes a destination repository to mirror a source repository.++  To use the local repository as the source repository,+  specify mirror --to remote.++  To use a remote as the source repository, specify mirror --from remote.++  Each specified file in the source repository is mirrored to the destination+  repository. If a file's content is present in the source repository, it is+  copied to the destination repository. If a file's content is not present in+  the source repository, it will be dropped from the destination repository+  when possible. ++  Note that mirror does not sync the git repository, but only the file+  contents.+ * addurl [url ...]    Downloads each url to its own file, which is added to the annex.@@ -177,6 +195,9 @@   alternate locations from which the file can be downloaded. In this mode,   addurl can be used both to add new files, or to add urls to existing files. +  When quvi is installed, urls are automatically tested to see if they+  are on a video hosting site, and the video is downloaded instead.+ * rmurl file url    Record that the file is no longer available at the url.@@ -190,6 +211,28 @@  	git annex import /media/camera/DCIM/ +  By default, importing two files with the same contents from two different+  locations will result in both files being added to the repository.+  (With all checksumming backends, including the default SHA256E,+  only one copy of the data will be stored.)++  To not delete files from the import location, use the+  --duplicate option. This could allow importing the same files repeatedly+  to different locations in a repository. More likely, it could be used to+  import the same files to a number of different branches or separate git+  repositories.++  To only import files whose content has not been seen before by git-annex,+  use the --deduplicate option. Duplicate files will be deleted from the+  import location.+  +  The --clean-duplicates option does not import any new files, but any files+  found in the import location that are duplicates of content in the annex+  are deleted.+  +  (Note that using --deduplicate or --clean-duplicates with the WORM+  backend does not look at file content, but filename and mtime.)+ * importfeed [url ...]    Imports the contents of podcast feeds. Only downloads files whose@@ -1071,6 +1114,11 @@   Options to use when using wget or curl to download a file from the web.   (wget is always used in preference to curl if available.)   For example, to force ipv4 only, set it to "-4"++* `annex.quvi-options`++  Options to pass to quvi when using it to find the url to download for a+  video.  * `annex.http-headers` 
+ doc/install/Android/comment_8_34f7c42050fa48769a6bfae60d72e477._comment view
@@ -0,0 +1,8 @@+[[!comment format=mdwn+ username="https://www.google.com/accounts/o8/id?id=AItOawmrb8I1K5jjNr7ZrLSvgmkeQGjYauPeGJU"+ nickname="Martin"+ subject="comment 8"+ date="2013-08-18T16:44:02Z"+ content="""+Any chance that older versions of Android will be supported in the future?+"""]]
doc/install/Debian.mdwn view
@@ -7,7 +7,7 @@ 	sudo apt-get install git-annex  Note: This version does not include support for the [[assistant]].-The version of git-annex in unstable can be easily installed in wheezy.+A backport is available with the assistant and other new features.  ## Debian 6.0 "squeeze" 
+ doc/install/Debian/comment_14_a34e23d9aa3027012ab1236aa4f7d5cb._comment view
@@ -0,0 +1,8 @@+[[!comment format=mdwn+ username="Miles"+ ip="88.175.62.104"+ subject="installed git-annex on debian but cannot find it"+ date="2013-08-19T23:29:24Z"+ content="""+I am an absolute beginner when it comes to linux in debian in particular. I installed git-annex via the root terminal, but now I do not know where to find it. I searched for in the file system but could not locate it. Any help is appreciated.+"""]]
+ doc/install/Debian/comment_15_20d8271ba3f6cfe3c8849c3d41607630._comment view
@@ -0,0 +1,8 @@+[[!comment format=mdwn+ username="https://www.google.com/accounts/o8/id?id=AItOawk_GWOEjK4Sn4hUB6ofFlE3CNeC7tO56J8"+ nickname="John"+ subject="Re:  installed git-annex on debian but cannot find it "+ date="2013-08-20T00:50:28Z"+ content="""+@Miles - The command is git annex webapp to bring up the web interface.+"""]]
+ doc/install/cabal/comment_14_14b46470593f84f8c3768a91cb77bdab._comment view
@@ -0,0 +1,9 @@+[[!comment format=mdwn+ username="https://www.google.com/accounts/o8/id?id=AItOawlfIVXjkzrYE9qJAO2A0H7K6tKGMaSgc3U"+ nickname="Daniel"+ subject="Problems with cryptocipher"+ date="2013-08-22T01:36:50Z"+ content="""+I had problems following these directions on recent releases of Fedora/Ubuntu. The install attempts failed on cryptocipher-0.3.1, which I think came as a dependency of Yesod.+I was able to work around this by installing yesod-platform with cabal first, then installing git-annex.+"""]]
+ doc/install/cabal/comment_15_c3a5b0aad28a90e0bb8da31a430578eb._comment view
@@ -0,0 +1,8 @@+[[!comment format=mdwn+ username="RaspberryPie"+ ip="77.247.181.162"+ subject="git-annex assistant on Arm"+ date="2013-08-23T03:07:11Z"+ content="""+I'd like to use the assistant's power on a Raspberry Pi to build an always-on file/sync server. Is there a way to get the assistant running on Arm? I know there's a Debian package, but it's Version 3.20120629 and comes without the assistant. Has anyone ever successfully built a recent git-annex version on Arm? What would I need in order to do it myself? +"""]]
+ doc/install/cabal/comment_16_4faf214f97f9516898d7c17d743ef825._comment view
@@ -0,0 +1,10 @@+[[!comment format=mdwn+ username="http://joeyh.name/"+ ip="4.154.0.63"+ subject="comment 16"+ date="2013-08-23T17:37:52Z"+ content="""+The git-annex assistant can easily be built on arm. But not the webapp. It's entirely possible to use the assistant without the webapp though; you just have to make the git repository and configure the remotes by hand, and then the assistant will sync them the same way the webapp does.++It is possible but very involved to build the webapp for arm. I do not anticipate doing it in the Debian package until ghc gets proper template haskell support for arm. See [[forum/Webapp_on_ARM]]+"""]]
+ doc/install/cabal/comment_17_2a9d6807a3a13815c824985521757167._comment view
@@ -0,0 +1,10 @@+[[!comment format=mdwn+ username="RaspberryPie"+ ip="77.247.181.162"+ subject="comment 17"+ date="2013-08-23T18:51:51Z"+ content="""+Thanks for the quick answer. I will try to build git-annex with just the assistant, as you suggest, and once it works set up the server by hand as you suggest. ++BTW: Awesome job you're doing with git-annex. I appreciate your enthusiasm.+"""]]
doc/install/fromscratch.mdwn view
@@ -11,6 +11,7 @@   * [monad-control](http://hackage.haskell.org/package/monad-control)   * [QuickCheck 2](http://hackage.haskell.org/package/QuickCheck)   * [json](http://hackage.haskell.org/package/json)+  * [aeson](http://hackage.haskell.org/package/aeson)   * [IfElse](http://hackage.haskell.org/package/IfElse)   * [dlist](http://hackage.haskell.org/package/dlist)   * [bloomfilter](http://hackage.haskell.org/package/bloomfilter)
− doc/news/version_4.20130627.mdwn
@@ -1,17 +0,0 @@-git-annex 4.20130627 released with [[!toggle text="these changes"]]-[[!toggleable text="""-   * assistant --autostart: Automatically ionices the daemons it starts.-   * assistant: Daily sanity check thread is run niced.-   * bup: Handle /~/ in bup remote paths.-     Thanks, Oliver Matthews-   * fsck: Ensures that direct mode is used for files when it's enabled.-   * webapp: Fix bug when setting up a remote ssh repo repeatedly on the same-     server.-   * webapp: Ensure that ssh keys generated for different directories-     on a server are always different.-   * webapp: Fix bug setting up ssh repo if the user enters "~/" at the start-     of the path.-   * assistant: Fix bug that prevented adding files written by gnucash,-     and more generally support adding hard links to files. However,-     other operations on hard links are still unsupported.-   * webapp: Fix bug that caused the webapp to hang when built with yesod 1.2."""]]
+ doc/news/version_4.20130827.mdwn view
@@ -0,0 +1,27 @@+git-annex 4.20130827 released with [[!toggle text="these changes"]]+[[!toggleable text="""+   * 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](http://bugs.debian.org/719832)"""]]
doc/related_software.mdwn view
@@ -9,3 +9,4 @@   is git-annex aware. * [sizes](http://hackage.haskell.org/package/sizes) is another du-like   utility, with a `-A` switch that enables git-annex support.+* Emacs Org mode can auto-commit attached files to git-annex.
doc/special_remotes.mdwn view
@@ -18,7 +18,15 @@ * [[hook]]  The above special remotes can be used to tie git-annex -into many cloud services. Here are specific instructions+into many cloud services. ++There are many use cases for a special remote. You could use it as a backup. You could use it to archive files offline in a drive with encryption enabled so if the drive is stolen your data is not. You could git annex move --to specialremote large files when your local drive is getting full, and then git annex move the files back when free space is again available. You could have one repository copy files to a special remote, and then git annex get them on another repository, to transfer the files between computers that do not communicate directly. ++The git-annex assistant makes it easy to set up rsync remotes using this last scenario, which is referred to as a transfer repository, and arranges to drop files from the transfer repository once they have been transferred to all known clients.++None of these use cases are particular to particular special remote types. Most special remotes can all be used in these and other ways. It largely doesn't matter for your use what underlying transport the special remote uses.++Here are specific instructions for various cloud things:  * [[Amazon_S3|tips/using_Amazon_S3]]
+ doc/special_remotes/S3/comment_15_ceb9048c743135f6beca57a23505f0a3._comment view
@@ -0,0 +1,8 @@+[[!comment format=mdwn+ username="https://www.google.com/accounts/o8/id?id=AItOawne_amN4fko4p5cRY_9EYwaYuJKNn7LRio"+ nickname="Tobias"+ subject="different s3 storage URLs"+ date="2013-08-23T08:59:32Z"+ content="""+Is it possible to change the S3 endpoint hosts? I'm running a radosgw with S3 support which I'd like to define as S3 remote for git-annex+"""]]
+ doc/special_remotes/S3/comment_16_7b79f8b5ef88a2775d61b5ac5774d3e0._comment view
@@ -0,0 +1,8 @@+[[!comment format=mdwn+ username="http://joeyh.name/"+ ip="4.154.0.63"+ subject="comment 16"+ date="2013-08-23T17:39:56Z"+ content="""+Yes, you can specify the host to use when setting up the remote. It's actually documented earlier on this very page, if ou search for \"host\". Any S3 compatabile host will probably work -- the Internet Archive's S3 does, for example.+"""]]
+ doc/special_remotes/web/comment_1_0bd570025f6cd551349ea88a4729ac8e._comment view
@@ -0,0 +1,8 @@+[[!comment format=mdwn+ username="http://olivier.berger.myopenid.com/"+ nickname="obergix"+ subject="Which URL prefix are supported ?"+ date="2013-08-17T08:44:05Z"+ content="""+It is not clear whether only http:// URLs are supported. Can you list others ?+"""]]
+ doc/special_remotes/web/comment_2_333141cc9ec6c26ffd19aa95303a91e3._comment view
@@ -0,0 +1,8 @@+[[!comment format=mdwn+ username="http://joeyh.name/"+ ip="2001:4978:f:21a::2"+ subject="comment 2"+ date="2013-08-17T08:59:11Z"+ content="""+When it says \"arbitrary urls\", it means it. The only requirement is that the url be well formed and that wget or whatever command you have it configured to use via annex.web-download-command knows how to download it.+"""]]
doc/special_remotes/xmpp.mdwn view
@@ -21,25 +21,19 @@ to see incoming pushes, the XMPP remote cannot be used with git at the command line. -## Hosted server support status-[[!table  data="""-Server|Status|Notes-Gmail|Working|Google apps users will have to edit `.git/annex/creds/xmpp` manually-Facebook|Failing|Maybe non 2-factor will work-League Of Legends|Failing-"""]]--## Server daemon support status+## XMPP server support status [[!table  data="""-Server|Status|Notes-[[Prosody|http://prosody.im/]]|Working-[[Metronome|http://www.lightwitch.org/]]|Working-Ejabberd|[[Failing|http://git-annex.branchable.com/forum/XMPP_authentication_failure/]]|[[Authentication bug|https://support.process-one.net/browse/EJAB-1632]]: Fixed in debian unstable with version 2.1.10-5-jabberd14|[[Failing|http://git-annex.branchable.com/forum/XMPP_authentication_failure/#comment-4ce5aeabd12ca3016290b3d8255f6ef1]]|No further information-jabberd2|?|Please update-Openfire|?|Please update-Tigase|?|Please update-iChat Server|?|Please update+Provider|Status|Type|Notes+[[Gmail|http://gmail.com]]|Working|?|Google apps users will have to configure `.git/annex/creds/xmpp` manually+[[Coderollers|http://www.coderollers.com/xmpp-server/]]|Working|[[Openfire|http://www.igniterealtime.org/projects/openfire/]]+[[jabber.me|http://jabber.me/]]|Working|[[Tigase|http://www.tigase.org/]]+[[xmpp.ru.net|https://www.xmpp.ru.net]]|Working|[[jabberd2|http://jabberd2.org/]]+[[jabber.org|http://jabber.org]]|Working|[[Isode M-Link|http://www.isode.com/products/m-link.html]]+-|Working|[[Prosody|http://prosody.im/]]|No providers tested.+-|Working|[[Metronome|http://www.lightwitch.org/]]|No providers tested.+-|[[Failing|http://git-annex.branchable.com/forum/XMPP_authentication_failure/]]|ejabberd|[[Authentication bug|https://support.process-one.net/browse/EJAB-1632]]: Fixed in debian unstable with version 2.1.10-5+-|[[Failing|http://git-annex.branchable.com/forum/XMPP_authentication_failure/#comment-4ce5aeabd12ca3016290b3d8255f6ef1]]|jabberd14|No further information """]]+List of providers: [[http://xmpp.net/]]  See also: [[xmpp_protocol_design_notes|design/assistant/xmpp]]
− doc/tips/flickrannex/comment_13_cf9dad91ee7d334c720adb3310aa0003._comment
@@ -1,130 +0,0 @@-[[!comment format=mdwn- username="https://www.google.com/accounts/o8/id?id=AItOawnaH44G3QbxBAYyDwy0PbvL0ls60XoaR3Y"- nickname="Nigel"- subject="re: git annex get failed -- debug"- date="2013-08-02T15:28:41Z"- content="""-With debug turned on.--[[!format  bash \"\"\"--initremote flickr (encryption setup) (shared cipher) ok-(Recording state in git...)-describe flickr ok-(Recording state in git...)-/home/nrb/repos/annex/laptop-annex-fsck walkthrough.sh (checksum...) ok-fsck walkthrough.sh~ (checksum...) ok-/home/nrb/repos/annex/laptop-annex-copy walkthrough.sh (gpg) (checking flickr...) 16:18:52 [flickrannex-0.1.5] <module> : 'START'-16:18:52 [flickrannex-0.1.5] main : 'ARGS: 'ANNEX_ACTION=checkpresent ANNEX_KEY=GPGHMACSHA1--280dd2d5003ad3962b1ecaa52ba45fdd44381fd0 ANNEX_HASH_1=kQ ANNEX_HASH_2=0P /home/nrb/repos/gits/flickrannex/flickrannex.py --dbglevel 1 --stderr''-16:18:52 [flickrannex-0.1.5] readFile : ''/home/nrb/repos/gits/flickrannex/flickrannex.conf' - 'r''-16:18:52 [flickrannex-0.1.5] readFile : 'Done'-16:18:52 [flickrannex-0.1.5] login : 'nrbray@yahoo.com'-16:18:54 [flickrannex-0.1.5] login : 'Done: '72157633920418017-5c0274bd421d7bb1' - None - '8086216@N08''-16:18:54 [flickrannex-0.1.5] main : 'Trying page: 1'-16:18:55 [flickrannex-0.1.5] main : 'Error. found nothing:{'pages': '1', 'cancreate': '1', 'total': '0', 'page': '1', 'perpage': '0'}'-16:18:55 [flickrannex-0.1.5] checkFile : 'GPGHMACSHA1--280dd2d5003ad3962b1ecaa52ba45fdd44381fd0 - u'gitannex' - '8086216@N08''-16:18:55 [flickrannex-0.1.5] checkFile : 'No set exists, thus no files exists'-16:18:55 [flickrannex-0.1.5] <module> : 'STOP: 2s'-(to flickr...) -16:18:55 [flickrannex-0.1.5] <module> : 'START'-16:18:55 [flickrannex-0.1.5] main : 'ARGS: 'ANNEX_ACTION=store ANNEX_KEY=GPGHMACSHA1--280dd2d5003ad3962b1ecaa52ba45fdd44381fd0 ANNEX_HASH_1=kQ ANNEX_HASH_2=0P ANNEX_FILE=/home/nrb/repos/annex/laptop-annex/.git/annex/tmp/GPGHMACSHA1--280dd2d5003ad3962b1ecaa52ba45fdd44381fd0 /home/nrb/repos/gits/flickrannex/flickrannex.py --dbglevel 1 --stderr''-16:18:55 [flickrannex-0.1.5] readFile : ''/home/nrb/repos/gits/flickrannex/flickrannex.conf' - 'r''-16:18:55 [flickrannex-0.1.5] readFile : 'Done'-16:18:55 [flickrannex-0.1.5] login : 'nrbray@yahoo.com'-16:18:57 [flickrannex-0.1.5] login : 'Done: '72157633920418017-5c0274bd421d7bb1' - None - '8086216@N08''-16:18:58 [flickrannex-0.1.5] main : 'Trying page: 1'-16:18:58 [flickrannex-0.1.5] main : 'Error. found nothing:{'pages': '1', 'cancreate': '1', 'total': '0', 'page': '1', 'perpage': '0'}'-16:18:58 [flickrannex-0.1.5] postFile : '/home/nrb/repos/annex/laptop-annex/.git/annex/tmp/GPGHMACSHA1--280dd2d5003ad3962b1ecaa52ba45fdd44381fd0 to u'gitannex' - GPGHMACSHA1--280dd2d5003ad3962b1ecaa52ba45fdd44381fd0'-16:18:58 [flickrannex-0.1.5] postFile : 'pre /home/nrb/repos/annex/laptop-annex/.git/annex/tmp/GPGHMACSHA1--280dd2d5003ad3962b1ecaa52ba45fdd44381fd0 size: 1047 more than 40234050.'-16:18:58 [flickrannex-0.1.5] readFile : ''/home/nrb/repos/annex/laptop-annex/.git/annex/tmp/GPGHMACSHA1--280dd2d5003ad3962b1ecaa52ba45fdd44381fd0' - 'rb''-16:18:58 [flickrannex-0.1.5] readFile : 'Done'-16:18:58 [flickrannex-0.1.5] postFile : 'Uploading: /home/nrb/repos/gits/flickrannex/temp/encoded-GPGHMACSHA1--280dd2d5003ad3962b1ecaa52ba45fdd44381fd0'-/home/nrb/repos/gits/flickrannex/flickrannex.py:92: FutureWarning: The behavior of this method will change in future versions.  Use specific 'len(elem)' or 'elem is not None' test instead.-  if res:-/home/nrb/repos/gits/flickrannex/flickrannex.py:100: FutureWarning: The behavior of this method will change in future versions.  Use specific 'len(elem)' or 'elem is not None' test instead.-  if res:-16:19:01 [flickrannex-0.1.5] postFile : 'Done: <Element 'rsp' at 0x8726b0c>'-16:19:01 [flickrannex-0.1.5] <module> : 'STOP: 5s'-ok-copy walkthrough.sh~ (checking flickr...) 16:19:01 [flickrannex-0.1.5] <module> : 'START'-16:19:01 [flickrannex-0.1.5] main : 'ARGS: 'ANNEX_ACTION=checkpresent ANNEX_KEY=GPGHMACSHA1--131f95d3bc932d23ef6af47cf49db3c04be4f0f9 ANNEX_HASH_1=m5 ANNEX_HASH_2=kz /home/nrb/repos/gits/flickrannex/flickrannex.py --dbglevel 1 --stderr''-16:19:01 [flickrannex-0.1.5] readFile : ''/home/nrb/repos/gits/flickrannex/flickrannex.conf' - 'r''-16:19:01 [flickrannex-0.1.5] readFile : 'Done'-16:19:01 [flickrannex-0.1.5] login : 'nrbray@yahoo.com'-16:19:03 [flickrannex-0.1.5] login : 'Done: '72157633920418017-5c0274bd421d7bb1' - None - '8086216@N08''-16:19:03 [flickrannex-0.1.5] main : 'Photoset gitannex found: <Element 'photoset' at 0x98264ec>'-16:19:03 [flickrannex-0.1.5] main : 'Trying page: 1'-16:19:03 [flickrannex-0.1.5] checkFile : 'GPGHMACSHA1--131f95d3bc932d23ef6af47cf49db3c04be4f0f9 - 72157634897264995L - '8086216@N08''-16:19:03 [flickrannex-0.1.5] checkFile : 'No set exists, thus no files exists'-16:19:03 [flickrannex-0.1.5] <module> : 'STOP: 1s'-(to flickr...) -16:19:03 [flickrannex-0.1.5] <module> : 'START'-16:19:03 [flickrannex-0.1.5] main : 'ARGS: 'ANNEX_ACTION=store ANNEX_KEY=GPGHMACSHA1--131f95d3bc932d23ef6af47cf49db3c04be4f0f9 ANNEX_HASH_1=m5 ANNEX_HASH_2=kz ANNEX_FILE=/home/nrb/repos/annex/laptop-annex/.git/annex/tmp/GPGHMACSHA1--131f95d3bc932d23ef6af47cf49db3c04be4f0f9 /home/nrb/repos/gits/flickrannex/flickrannex.py --dbglevel 1 --stderr''-16:19:03 [flickrannex-0.1.5] readFile : ''/home/nrb/repos/gits/flickrannex/flickrannex.conf' - 'r''-16:19:03 [flickrannex-0.1.5] readFile : 'Done'-16:19:03 [flickrannex-0.1.5] login : 'nrbray@yahoo.com'-16:19:05 [flickrannex-0.1.5] login : 'Done: '72157633920418017-5c0274bd421d7bb1' - None - '8086216@N08''-16:19:05 [flickrannex-0.1.5] main : 'Photoset gitannex found: <Element 'photoset' at 0x913a54c>'-16:19:05 [flickrannex-0.1.5] main : 'Trying page: 1'-16:19:05 [flickrannex-0.1.5] postFile : '/home/nrb/repos/annex/laptop-annex/.git/annex/tmp/GPGHMACSHA1--131f95d3bc932d23ef6af47cf49db3c04be4f0f9 to 72157634897264995L - GPGHMACSHA1--131f95d3bc932d23ef6af47cf49db3c04be4f0f9'-16:19:05 [flickrannex-0.1.5] postFile : 'pre /home/nrb/repos/annex/laptop-annex/.git/annex/tmp/GPGHMACSHA1--131f95d3bc932d23ef6af47cf49db3c04be4f0f9 size: 1044 more than 40234050.'-16:19:05 [flickrannex-0.1.5] readFile : ''/home/nrb/repos/annex/laptop-annex/.git/annex/tmp/GPGHMACSHA1--131f95d3bc932d23ef6af47cf49db3c04be4f0f9' - 'rb''-16:19:05 [flickrannex-0.1.5] readFile : 'Done'-16:19:05 [flickrannex-0.1.5] postFile : 'Uploading: /home/nrb/repos/gits/flickrannex/temp/encoded-GPGHMACSHA1--131f95d3bc932d23ef6af47cf49db3c04be4f0f9'-/home/nrb/repos/gits/flickrannex/flickrannex.py:92: FutureWarning: The behavior of this method will change in future versions.  Use specific 'len(elem)' or 'elem is not None' test instead.-  if res:-/home/nrb/repos/gits/flickrannex/flickrannex.py:100: FutureWarning: The behavior of this method will change in future versions.  Use specific 'len(elem)' or 'elem is not None' test instead.-  if res:-16:19:08 [flickrannex-0.1.5] postFile : 'Done: <Element 'rsp' at 0x913f0cc>'-16:19:08 [flickrannex-0.1.5] <module> : 'STOP: 4s'-ok-(Recording state in git...)-nrb@nrb-ThinkPad-T61:~/repos/annex/laptop-annex$ git annex whereis-whereis walkthrough.sh (3 copies) -  	86491ded-899c-425d-9470-bf446cb06db1 -- flickr (the flickr library)-   	8e766014-7154-4f4f-a04b-9d1b3d333db1 -- here (my laptop)-   	eed7055b-743b-4ab6-a390-29cfd326005d -- usbdrive (portable USB drive)-ok-whereis walkthrough.sh~ (3 copies) -  	86491ded-899c-425d-9470-bf446cb06db1 -- flickr (the flickr library)-   	8e766014-7154-4f4f-a04b-9d1b3d333db1 -- here (my laptop)-   	eed7055b-743b-4ab6-a390-29cfd326005d -- usbdrive (portable USB drive)-ok-nrb@nrb-ThinkPad-T61:~/repos/annex/laptop-annex$ git annex fsck --from flickr-fsck walkthrough.sh (gpg) (checking flickr...) 16:22:57 [flickrannex-0.1.5] <module> : 'START'-16:22:57 [flickrannex-0.1.5] main : 'ARGS: 'ANNEX_ACTION=checkpresent ANNEX_KEY=GPGHMACSHA1--280dd2d5003ad3962b1ecaa52ba45fdd44381fd0 ANNEX_HASH_1=kQ ANNEX_HASH_2=0P /home/nrb/repos/gits/flickrannex/flickrannex.py --dbglevel 1 --stderr''-16:22:57 [flickrannex-0.1.5] readFile : ''/home/nrb/repos/gits/flickrannex/flickrannex.conf' - 'r''-16:22:57 [flickrannex-0.1.5] readFile : 'Done'-16:22:57 [flickrannex-0.1.5] login : 'nrbray@yahoo.com'-16:22:58 [flickrannex-0.1.5] login : 'Done: '72157633920418017-5c0274bd421d7bb1' - None - '8086216@N08''-16:22:59 [flickrannex-0.1.5] main : 'Photoset gitannex found: <Element 'photoset' at 0x896d92c>'-16:22:59 [flickrannex-0.1.5] main : 'Trying page: 1'-16:22:59 [flickrannex-0.1.5] checkFile : 'GPGHMACSHA1--280dd2d5003ad3962b1ecaa52ba45fdd44381fd0 - 72157634897264995L - '8086216@N08''-16:22:59 [flickrannex-0.1.5] checkFile : 'No set exists, thus no files exists'-16:22:59 [flickrannex-0.1.5] <module> : 'STOP: 2s'-(fixing location log) -  ** Based on the location log, walkthrough.sh-  ** was expected to be present, but its content is missing.-failed-fsck walkthrough.sh~ (checking flickr...) 16:22:59 [flickrannex-0.1.5] <module> : 'START'-16:22:59 [flickrannex-0.1.5] main : 'ARGS: 'ANNEX_ACTION=checkpresent ANNEX_KEY=GPGHMACSHA1--131f95d3bc932d23ef6af47cf49db3c04be4f0f9 ANNEX_HASH_1=m5 ANNEX_HASH_2=kz /home/nrb/repos/gits/flickrannex/flickrannex.py --dbglevel 1 --stderr''-16:22:59 [flickrannex-0.1.5] readFile : ''/home/nrb/repos/gits/flickrannex/flickrannex.conf' - 'r''-16:22:59 [flickrannex-0.1.5] readFile : 'Done'-16:22:59 [flickrannex-0.1.5] login : 'nrbray@yahoo.com'-16:23:01 [flickrannex-0.1.5] login : 'Done: '72157633920418017-5c0274bd421d7bb1' - None - '8086216@N08''-16:23:01 [flickrannex-0.1.5] main : 'Photoset gitannex found: <Element 'photoset' at 0x869992c>'-16:23:01 [flickrannex-0.1.5] main : 'Trying page: 1'-16:23:01 [flickrannex-0.1.5] checkFile : 'GPGHMACSHA1--131f95d3bc932d23ef6af47cf49db3c04be4f0f9 - 72157634897264995L - '8086216@N08''-16:23:01 [flickrannex-0.1.5] checkFile : 'No set exists, thus no files exists'-16:23:01 [flickrannex-0.1.5] <module> : 'STOP: 1s'-(fixing location log) -  ** Based on the location log, walkthrough.sh~-  ** was expected to be present, but its content is missing.-failed-(Recording state in git...)-git-annex: fsck: 2 failed--\"\"\" ]]-"""]]
+ doc/tips/imapannex.mdwn view
@@ -0,0 +1,27 @@+imapannex+=========++Hook program for gitannex to use imap as backend++# Requirements:++    python2++# Install+Clone the git repository in your home folder.++    git clone git://github.com/TobiasTheViking/imapannex.git ++This should make a ~/imapannex folder++# Setup+Run the program once to set it up.++    cd ~/imapannex; python2 imapannex.py++# Commands for gitannex:++    git config annex.imap-hook '/usr/bin/python2 ~/imapannex/imapannex.py'+    git annex initremote imap type=hook hooktype=imap encryption=shared+    git annex describe imap "the imap library"+    git annex content imap exclude=largerthan=30mb
doc/tips/powerful_file_matching.mdwn view
@@ -1,4 +1,4 @@-git-annex has a powerful syntax for making it act on only certian files.+git-annex has a powerful syntax for making it act on only certain files.  The simplest thing is to exclude some files, using wild cards: 
doc/tips/setup_a_public_repository_on_a_web_site.mdwn view
@@ -20,12 +20,34 @@ 7. Instruct advanced users to clone a http url that ends with the "/.git/"    directory. For example, for downloads.kitenet.net, the clone url    is `https://downloads.kitenet.net/.git/`-8. Set up a git `post-receive` hook that runs `git annex merge`, and-   the repository's working tree will automatically be updated when-   you run `git annex sync` in a clone that can push to the repository.  -   (Needs git-annex version 4.20130703 or newer; older versions-   can use `git annex sync` in the post-receive hook instead.)+8. Set up a git `post-receive` hook to update the repository's working tree+   when changes are pushed to it. See below for details.  When users clone over http, and run git-annex, it will automatically learn all about your repository and be able to download files right out of it, also using http. ++## post-receive hook++If you have git-annex 4.20130703, the post-receive hook mentioned above+in step 8 just needs to run `git annex merge`.++With older versions of git-annex, you can instead use `git annex sync`.++There are two gotchas with some versions of git to be aware of when writing+this post-receive hook.++1. The hook may be run with the current directory set to the `.git`+   directory, and not the top of your work tree. So you need to `cd ..` or+   similar in the hook.+2. `GIT_DIR` may be set to `.`, which will not be right after changing+   directory. So you will probably want to unset it.++Here's a post-receive hook that takes these problems into account:++<pre>+#!/bin/sh+unset GIT_DIR+cd ..+git annex merge+</pre>
doc/tips/using_the_web_as_a_special_remote.mdwn view
@@ -8,10 +8,16 @@ Now the file is downloaded, and has been added to the annex like any other file. So it can be renamed, copied to other repositories, and so on. +To add a lot of urls at once, just list them all as parameters to+`git annex addurl`.++## trust issues+ Note that git-annex assumes that, if the web site does not 404, and has the right file size, the file is still present on the web, and this counts as-one [[copy|copies]] of the file. So it will let you remove your last copy,-trusting it can be downloaded again:+one [[copy|copies]] of the file. If the file still seems to be present +on the web, it will let you remove your last copy, trusting it can be+downloaded again:  	# git annex drop example.com_video.mpeg 	drop example.com_video.mpeg (checking http://example.com/video.mpeg) ok@@ -31,8 +37,10 @@ 	  (Use --force to override this check, or adjust annex.numcopies.) 	failed -You can also add urls to any file already in the annex:+## attaching urls to existing files +You can also attach urls to any file already in the annex:+ 	# git annex addurl --file my_cool_big_file http://example.com/cool_big_file 	addurl my_cool_big_file ok 	# git annex whereis my_cool_big_file@@ -40,9 +48,11 @@   	00000000-0000-0000-0000-000000000001 -- web    	27a9510c-760a-11e1-b9a0-c731d2b77df9 -- here -To add a lot of urls at once, just list them all as parameters to-`git annex addurl`. +## configuring filenames +By default, `addurl` will generate a filename for you. You can use+`--file=` to specify the filename to use.+ If you're adding a bunch of related files to a directory, or just don't like the default filenames generated by `addurl`, you can use `--pathdepth` to specify how many parts of the url are put in the filename.@@ -55,3 +65,37 @@ 	addurl 2012_01_video.mpeg (downloading http://example.com/videos/2012/01/video.mpeg) 	# git annex addurl http://example.com/videos/2012/01/video.mpeg --pathdepth=-2 	addurl 01_video.mpeg (downloading http://example.com/videos/2012/01/video.mpeg)++## videos++<a name=quvi>++There's support for downloading videos from sites like YouTube, Vimeo,+and many more. This relies on [quvi](http://quvi.sourceforge.net/) to find+urls to the actual videos files.++When you have quvi installed, you can just +`git annex addurl http://youtube.com/foo` and it will detect that+it is a video and download the video content for offline viewing.++Later, in another clone of the repository, you can run `git annex get` on+the file and it will also be downloaded with the help of quvi. This works+even if the video host has transcoded or otherwise changed the video+in the meantime; the assumption is that these video files are equivilant.++There is an `annex.quvi-options` configuration setting that can be used+to pass parameters to quvi. For example, you could set `git config+annex.quvi-options "--format low"` to configure it to download low+quality videos from YouTube.++Note that for performance reasons, the url is not checked for redirects,+so some shortened urls will not be detected. You can+either load the short url in a browser to get the full url, or you+can force use of quvi with redirect detection, by prepending "quvi:" to the+url.++Downloading whole YouTube playlists is not currently supported by quvi.++## podcasts++This is done using `git annex importfeed`. See [[downloading podcasts]].
+ doc/todo/wishlist:_Freeing_X_space_on_remote_Y.mdwn view
@@ -0,0 +1,1 @@+As suggested during the first Gitify BoF during DebConf13: Adding a way to have on-demand dropping of content in a given remote would allow a user to quickly free up disk space on demand while still heeding numcopies etc.
+ doc/todo/wishlist:___96__git_annex_drop_--relaxed__96__.mdwn view
@@ -0,0 +1,5 @@+Also suggested during the first Gitify BoF during DebConf13:++`git annex drop` deletes immediately. In some situations a mechanism to tell git-annex "I would like to hold onto this data if possible, but if you need the space, please delete it" could be nice.++An obvious question would be how to do cleanups. With the assistant, that's easy. On CLI, at the very least `git annex fsck` should list, and optionally delete, that data.
+ doc/todo/wishlist:_dropping_git-annex_history.mdwn view
@@ -0,0 +1,26 @@+In real life discussions with git-annex users at DebConf, the idea was proposed to have a way to drop the history of the git-annex branch, and replace it with a new branch with just the current state of the repository. ++The only thing that breaks when this is done, in theory, is `git annex log`, which can't show the location history +of files.++The crucial thing is that this operation would only need to be done in one repository, and it would then record some information in its (new) git-annex branch, so when it was pushed to other repositories, git-annex there could notice that history had been dropped, and do the same. So, even if you have rarely used offline archive repositories, the history dropping would eventually reach them, without needing to remember to do it.++There was speculation that it would be enough to record eg, the SHA of the top commit on the old branch. That may not be good enough, because another remote may have not gotten that SHA into its branch yet, or may have commits on top of that SHA. ++Maybe instead we want to record the SHA of the *first* commit to the old git-annex branch. This way, we can tell if the branch that got deleted is the one we're currently using. And if it is, we create a new branch with the current state of *our* branch, and then union merge the other branch into it.++Hmm, another wrinkle is that, when this indication propigates from remote A to remote B, remote B may also have some git-annex branches available for remotes C and D, which have not transitioned, and E, which has transitioned already. It seems B should first union merge C and D into B, and then flatten B to B', and then union merge A and E into B'.++I think that'd work!++--[[Joey]]++Will also allow dropping dead remotes from history. Just remove all+references to them when rewriting the branch. May or may not be desirable;+I sometimes care about dead remotes that I hope to one day recuscitate.+(OTOH, I can always run git annex fsck in them to get their location+tracking back, if I do manage to get them back.)++--[[Joey]] ++See also : [[forum/safely_dropping_git-annex_history]]
+ doc/todo/wishlist:_perform_fsck_remotely.mdwn view
@@ -0,0 +1,39 @@+Currently, when `fsck`'ing a remote, files are first downloaded to a temporary +file locally, decrypted if needed, and finally digested; the temporary file is+then either thrown away, or quarantined, depending on the value of that digest.++Whereas this approach works with any kind of remote, in the particular case +where the user is granted execution rights on the digest command, one could+avoid cluttering the network and digest the file remotely. I propose the+addition of a per-remote git option `annex-remote-fsck` to switch between the+two behaviors.+++There is an issue with encrypted specialremotes, though. As hinted at +[[here|tips/beware_of_SSD_wear_when_doing_fsck_on_large_special_remotes/#comment-70055f166f7eeca976021d24a736b471]],+since the digest of a ciphertext can't be deduced from that of a plaintext in +general one would needs, before sending an encrypted file to such a remote, to+digest it and store that digest somewhere (together with the cipher's size and+perhaps other meta-information).++The usual directory structure (`.../.../{backend}-s{size}--{digest}.log`) seems+perfectly suitable to store these informations. Lines there would look like+`{timestamp}s {numcopy} {UUID} {remote digest}`. Of course, it implies that+remote digest commands are trustworthy (are doing the right thing), and that+the digest output are not tampered by others who have access to the git repo.+But that's outside the current threat model, I guess.++Actually, since git-annex always includes a MDC in the ciphertexts, we could do+something clever and even avoid running a digest algorithm. According to the+[[OpenPGP standard|https://tools.ietf.org/html/rfc4880#section-5.14]] the MDC+is essentially a SHA-1 hash of the plaintext. I'm still investigating if it's+even possible, but in theory it would be enough (with non-chained ciphers at+least) to download a few bytes from the encrypted remote, decrypt those bytes+to retrieve the hash, and compare that hash with the known value. Of course+there is a downside here, namely that files tampered anywhere but on the MDC+packets would not be detected by `fsck` (but gpg will warn when decrypting the+file).+++My 2 cents :-) Is there something I missed? I suppose there was a reason to +perform `fsck` locally at the first place...
git-annex.1 view
@@ -143,6 +143,23 @@ post\-receive hook. Then any syncs to the repository will update its working copy automatically. .IP+.IP "mirror [path ...]"+This causes a destination repository to mirror a source repository.+.IP+To use the local repository as the source repository,+specify mirror \-\-to remote.+.IP+To use a remote as the source repository, specify mirror \-\-from remote.+.IP+Each specified file in the source repository is mirrored to the destination+repository. If a file's content is present in the source repository, it is+copied to the destination repository. If a file's content is not present in+the source repository, it will be dropped from the destination repository+when possible. +.IP+Note that mirror does not sync the git repository, but only the file+contents.+.IP .IP "addurl [url ...]" Downloads each url to its own file, which is added to the annex. .IP@@ -162,6 +179,9 @@ alternate locations from which the file can be downloaded. In this mode, addurl can be used both to add new files, or to add urls to existing files. .IP+When quvi is installed, urls are automatically tested to see if they+are on a video hosting site, and the video is downloaded instead.+.IP .IP "rmurl file url" Record that the file is no longer available at the url. .IP@@ -173,6 +193,28 @@ .IP  git annex import /media/camera/DCIM/ .IP+By default, importing two files with the same contents from two different+locations will result in both files being added to the repository.+(With all checksumming backends, including the default SHA256E,+only one copy of the data will be stored.)+.PP+To not delete files from the import location, use the+\-\-duplicate option. This could allow importing the same files repeatedly+to different locations in a repository. More likely, it could be used to+import the same files to a number of different branches or separate git+repositories.+.PP+To only import files whose content has not been seen before by git\-annex,+use the \-\-deduplicate option. Duplicate files will be deleted from the+import location.+.PP+The \-\-clean\-duplicates option does not import any new files, but any files+found in the import location that are duplicates of content in the annex+are deleted.+.PP+(Note that using \-\-deduplicate or \-\-clean\-duplicates with the WORM+backend does not look at file content, but filename and mtime.)+.PP .IP "importfeed [url ...]" Imports the contents of podcast feeds. Only downloads files whose urls have not already been added to the repository before, so you can@@ -946,6 +988,10 @@ Options to use when using wget or curl to download a file from the web. (wget is always used in preference to curl if available.) For example, to force ipv4 only, set it to "\-4"+.IP+.IP "annex.quvi\-options"+Options to pass to quvi when using it to find the url to download for a+video. .IP .IP "annex.http\-headers" HTTP headers to send when downloading from the web. Multiple lines of
git-annex.cabal view
@@ -1,5 +1,5 @@ Name: git-annex-Version: 4.20130815+Version: 4.20130827 Cabal-Version: >= 1.8 License: GPL-3 Maintainer: Joey Hess <joey@kitenet.net>@@ -76,7 +76,7 @@    extensible-exceptions, dataenc, SHA, process, json,    base (>= 4.5 && < 4.8), monad-control, MonadCatchIO-transformers,    IfElse, text, QuickCheck >= 2.1, bloomfilter, edit-distance, process,-   SafeSemaphore, uuid, random, dlist, unix-compat+   SafeSemaphore, uuid, random, dlist, unix-compat, aeson   -- Need to list these because they're generated from .hsc files.   Other-Modules: Utility.Touch Utility.Mounts   Include-Dirs: Utility@@ -141,7 +141,7 @@     Build-Depends:      yesod, yesod-default, yesod-static, yesod-form, yesod-core,      case-insensitive, http-types, transformers, wai, wai-logger, warp,-     blaze-builder, crypto-api, hamlet, clientsession, aeson,+     blaze-builder, crypto-api, hamlet, clientsession,      template-haskell, data-default     CPP-Options: -DWITH_WEBAPP 
− standalone/android/start

binary file changed (6874 → absent bytes)

standalone/android/term.patch view
@@ -501,8 +501,8 @@ +           	  +			    /* Reading from the fifo blocks until a url is written +			     * to it. */-+			    BufferedReader buf = new BufferedReader(new FileReader(webAppFifo)); +			    while (true) {++			            BufferedReader buf = new BufferedReader(new FileReader(webAppFifo)); +				    String s = buf.readLine(); +				    try { +					    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(s));
standalone/windows/build.sh view
@@ -26,15 +26,6 @@ # for haskell libraries to link them with the cygwin library. cabal update || true -MISSINGH_VERSION="1.2.0.1"--rm -rf MissingH-${MISSINGH_VERSION}-cabal unpack MissingH-cd MissingH-${MISSINGH_VERSION}-withcyg patch -p1 <../standalone/windows/haskell-patches/ccc5967426a14eb7e8978277ed4fa937f8e0c514.patch-cabal install || true-cd ..- cabal install --only-dependencies -f"$FLAGS"  # Detect when the last build was an incremental build and failed, 
− test

file too large to diff