git-annex 5.20131127 → 5.20131130
raw patch · 36 files changed
+392/−146 lines, 36 files
Files
- Assistant/Repair.hs +1/−1
- Assistant/Threads/SanityChecker.hs +2/−1
- CHANGELOG +13/−0
- CmdLine.hs +4/−7
- Command.hs +1/−1
- Command/Assistant.hs +2/−2
- Command/Help.hs +10/−6
- Command/Upgrade.hs +0/−2
- Command/Version.hs +4/−1
- Command/WebApp.hs +3/−3
- Command/XMPPGit.hs +4/−1
- Git/Fsck.hs +11/−8
- Git/Index.hs +7/−2
- Git/Repair.hs +26/−29
- Init.hs +4/−1
- Logs/FsckResults.hs +10/−5
- Types/Command.hs +3/−1
- debian/changelog +13/−0
- doc/assistant/release_notes.mdwn +12/−0
- doc/bugs/Addurl_with_quvi_not_working.mdwn +74/−0
- doc/bugs/Android:_500___47__etc__47__resolv.conf_does_not_exist.mdwn +24/−0
- doc/bugs/assistant_creating_.git_directory_inside_bare_repo.mdwn +90/−0
- doc/forum/New_special_remote_suggeston_-_clean_directory.mdwn +0/−15
- doc/forum/assitant:_special_remote_server___40__needs_ssh_tunnel__41__.mdwn +10/−0
- doc/forum/rebuild_location_log_from_encrypted_remote.mdwn +35/−0
- doc/install/OSX.mdwn +1/−1
- doc/install/OSX/comment_34_c9362141d15a2f68a75df9f8bfe29da0._comment +0/−17
- doc/install/OSX/comment_35_8106196c3fef70652cb2106e2d5857db._comment +0/−8
- doc/news/version_4.20131101.mdwn +0/−29
- doc/news/version_5.20131130.mdwn +4/−0
- doc/tips/The_perfect_preferred_content_settings_for_my_android_phone.mdwn +5/−1
- doc/tips/recover_data_from_lost+found.mdwn +2/−2
- doc/tips/using_box.com_as_a_special_remote.mdwn +1/−1
- doc/todo/New_special_remote_suggeston_-_clean_directory.mdwn +15/−0
- git-annex.cabal +1/−1
- standalone/android/start binary
Assistant/Repair.hs view
@@ -58,7 +58,7 @@ ok <- if u == myu then localrepair fsckresults else remoterepair fsckresults- liftAnnex $ writeFsckResults u Nothing+ liftAnnex $ clearFsckResults u debug [ "Repaired", show u, show ok ] return ok
Assistant/Threads/SanityChecker.hs view
@@ -26,6 +26,7 @@ import Config import Utility.HumanTime import Git.Repair+import Git.Index import Data.Time.Clock.POSIX import qualified Data.Set as S@@ -43,7 +44,7 @@ ifM (not <$> liftAnnex (inRepo (checkIndex S.empty))) ( do notice ["corrupt index file found at startup; removing and restaging"]- liftAnnex $ inRepo nukeIndex+ liftAnnex $ inRepo $ nukeFile . indexFile {- Normally the startup scan avoids re-staging files, - but with the index deleted, everything needs to be - restaged. -}
CHANGELOG view
@@ -1,3 +1,16 @@+git-annex (5.20131130) unstable; urgency=low++ * init: Fix a bug that caused git annex init, when run in a bare+ repository, to set core.bare=false.++ -- Joey Hess <joeyh@debian.org> Sat, 30 Nov 2013 16:32:35 -0400++git-annex (5.20131127.1) unstable; urgency=low++ * Rebuild that does not try to use quvi 0.9 from experimental.++ -- Joey Hess <joeyh@debian.org> Thu, 28 Nov 2013 07:57:36 -0400+ git-annex (5.20131127) unstable; urgency=low * webapp: Detect when upgrades are available, and upgrade if the user
CmdLine.hs view
@@ -32,16 +32,13 @@ import Command import Types.Messages -type Params = [String]-type Flags = [Annex ()]- {- Runs the passed command line. -}-dispatch :: Bool -> Params -> [Command] -> [Option] -> [(String, String)] -> String -> IO Git.Repo -> IO ()+dispatch :: Bool -> CmdParams -> [Command] -> [Option] -> [(String, String)] -> String -> IO Git.Repo -> IO () dispatch fuzzyok allargs allcmds commonoptions fields header getgitrepo = do setupConsole r <- E.try getgitrepo :: IO (Either E.SomeException Git.Repo) case r of- Left e -> fromMaybe (throw e) (cmdnorepo cmd)+ Left e -> maybe (throw e) (\a -> a params) (cmdnorepo cmd) Right g -> do state <- Annex.new g (actions, state') <- Annex.run state $ do@@ -66,7 +63,7 @@ {- Parses command line params far enough to find the Command to run, and - returns the remaining params. - Does fuzzy matching if necessary, which may result in multiple Commands. -}-findCmd :: Bool -> Params -> [Command] -> (String -> String) -> (Bool, [Command], String, Params)+findCmd :: Bool -> CmdParams -> [Command] -> (String -> String) -> (Bool, [Command], String, CmdParams) findCmd fuzzyok argv cmds err | isNothing name = error $ err "missing command" | not (null exactcmds) = (False, exactcmds, fromJust name, args)@@ -85,7 +82,7 @@ {- Parses command line options, and returns actions to run to configure flags - and the remaining parameters for the command. -}-getOptCmd :: Params -> Command -> [Option] -> (Flags, Params)+getOptCmd :: CmdParams -> Command -> [Option] -> ([Annex ()], CmdParams) getOptCmd argv cmd commonoptions = check $ getOpt Permute (commonoptions ++ cmdoptions cmd) argv where
Command.hs view
@@ -55,7 +55,7 @@ {- Adds a fallback action to a command, that will be run if it's used - outside a git repository. -}-noRepo :: IO () -> Command -> Command+noRepo :: (CmdParams -> IO ()) -> Command -> Command noRepo a c = c { cmdnorepo = Just a } {- Adds options to a command. -}
Command/Assistant.hs view
@@ -55,8 +55,8 @@ {- Run outside a git repository. Check to see if any parameter is - --autostart and enter autostart mode. -}-checkAutoStart :: IO ()-checkAutoStart = ifM (elem "--autostart" <$> getArgs)+checkAutoStart :: CmdParams -> IO ()+checkAutoStart _ = ifM (elem "--autostart" <$> getArgs) ( autoStart Nothing , error "Not in a git repository." )
Command/Help.hs view
@@ -23,19 +23,23 @@ import System.Console.GetOpt def :: [Command]-def = [noCommit $ noRepo showGeneralHelp $ dontCheck repoExists $+def = [noCommit $ noRepo startNoRepo $ dontCheck repoExists $ command "help" paramNothing seek SectionQuery "display help"] seek :: [CommandSeek] seek = [withWords start] start :: [String] -> CommandStart-start ["options"] = do- liftIO showCommonOptions- stop-start _ = do- liftIO showGeneralHelp+start params = do+ liftIO $ start' params stop++startNoRepo :: CmdParams -> IO ()+startNoRepo = start'++start' :: [String] -> IO ()+start' ["options"] = showCommonOptions+start' _ = showGeneralHelp showCommonOptions :: IO () showCommonOptions = putStrLn $ usageInfo "Common options:" options
Command/Upgrade.hs view
@@ -10,8 +10,6 @@ import Common.Annex import Command import Upgrade-import Annex.Version-import Config def :: [Command] def = [dontCheck repoExists $ -- because an old version may not seem to exist
Command/Version.hs view
@@ -18,7 +18,7 @@ import qualified Backend def :: [Command]-def = [noCommit $ noRepo showPackageVersion $ dontCheck repoExists $+def = [noCommit $ noRepo startNoRepo $ dontCheck repoExists $ command "version" paramNothing seek SectionQuery "show version info"] seek :: [CommandSeek]@@ -36,6 +36,9 @@ info "upgrade supported from repository versions" $ unwords upgradableVersions stop++startNoRepo :: CmdParams -> IO ()+startNoRepo _ = showPackageVersion showPackageVersion :: IO () showPackageVersion = do
Command/WebApp.hs view
@@ -82,7 +82,7 @@ else openBrowser browser htmlshim url origout origerr ) auto- | allowauto = liftIO startNoRepo+ | allowauto = liftIO $ startNoRepo [] | otherwise = do d <- liftIO getCurrentDirectory error $ "no git repository in " ++ d@@ -93,8 +93,8 @@ {- When run without a repo, start the first available listed repository in - the autostart file. If not, it's our first time being run! -}-startNoRepo :: IO ()-startNoRepo = do+startNoRepo :: CmdParams -> IO ()+startNoRepo _ = do -- FIXME should be able to reuse regular getopt, but -- it currently runs in the Annex monad. args <- getArgs
Command/XMPPGit.hs view
@@ -12,7 +12,7 @@ import Assistant.XMPP.Git def :: [Command]-def = [noCommit $ noRepo xmppGitRelay $ dontCheck repoExists $+def = [noCommit $ noRepo startNoRepo $ dontCheck repoExists $ command "xmppgit" paramNothing seek SectionPlumbing "git to XMPP relay"] @@ -24,6 +24,9 @@ liftIO gitRemoteHelper liftIO xmppGitRelay stop++startNoRepo :: CmdParams -> IO ()+startNoRepo _ = xmppGitRelay {- A basic implementation of the git-remote-helpers protocol. -} gitRemoteHelper :: IO ()
Git/Fsck.hs view
@@ -6,11 +6,12 @@ -} module Git.Fsck (- FsckResults,+ FsckResults(..), MissingObjects, findBroken, foundBroken, findMissing,+ knownMissing, ) where import Common@@ -23,9 +24,7 @@ type MissingObjects = S.Set Sha -{- If fsck succeeded, Just a set of missing objects it found.- - If it failed, Nothing. -}-type FsckResults = Maybe MissingObjects+data FsckResults = FsckFoundMissing MissingObjects | FsckFailed {- Runs fsck to find some of the broken objects in the repository. - May not find all broken objects, if fsck fails on bad data in some of@@ -42,8 +41,8 @@ let objs = findShas output badobjs <- findMissing objs r if S.null badobjs && not fsckok- then return Nothing- else return $ Just badobjs+ then return FsckFailed+ else return $ FsckFoundMissing badobjs where (command, params) = ("git", fsckParams r) (command', params')@@ -51,8 +50,12 @@ | otherwise = (command, params) foundBroken :: FsckResults -> Bool-foundBroken Nothing = True-foundBroken (Just s) = not (S.null s)+foundBroken FsckFailed = True+foundBroken (FsckFoundMissing s) = not (S.null s)++knownMissing :: FsckResults -> MissingObjects+knownMissing FsckFailed = S.empty+knownMissing (FsckFoundMissing s) = s {- Finds objects that are missing from the git repsitory, or are corrupt. -
Git/Index.hs view
@@ -7,6 +7,8 @@ module Git.Index where +import Common+import Git import Utility.Env {- Forces git to use the specified index file.@@ -19,9 +21,12 @@ override :: FilePath -> IO (IO ()) override index = do res <- getEnv var- setEnv var index True- return $ reset res+ void $ setEnv var index True+ return $ void $ reset res where var = "GIT_INDEX_FILE" reset (Just v) = setEnv var v True reset _ = unsetEnv var++indexFile :: Repo -> FilePath+indexFile r = localGitDir r </> "index"
Git/Repair.hs view
@@ -15,7 +15,6 @@ removeTrackingBranches, checkIndex, missingIndex,- nukeIndex, emptyGoodCommits, ) where @@ -26,6 +25,7 @@ import Git.Sha import Git.Types import Git.Fsck+import Git.Index import qualified Git.Config as Config import qualified Git.Construct as Construct import qualified Git.LsTree as LsTree@@ -43,16 +43,16 @@ import Data.Tuple.Utils {- Given a set of bad objects found by git fsck, which may not- - be complete, finds and removes all corrupt objects, and- - returns a list of missing objects, which need to be- - found elsewhere to finish recovery.+ - be complete, finds and removes all corrupt objects,+ - and returns missing objects. -}-cleanCorruptObjects :: FsckResults -> Repo -> IO (Maybe MissingObjects)+cleanCorruptObjects :: FsckResults -> Repo -> IO FsckResults cleanCorruptObjects fsckresults r = do void $ explodePacks r objs <- listLooseObjectShas r+ mapM_ (tryIO . allowRead . looseObjectFile r) objs bad <- findMissing objs r- void $ removeLoose r $ S.union bad (fromMaybe S.empty fsckresults)+ void $ removeLoose r $ S.union bad (knownMissing fsckresults) -- Rather than returning the loose objects that were removed, re-run -- fsck. Other missing objects may have been in the packs, -- and this way fsck will find them.@@ -98,20 +98,17 @@ - If another clone of the repository exists locally, which might not be a - remote of the repo being repaired, its path can be passed as a reference - repository.- - - Can also be run with Nothing, if it's not known which objects are- - missing, just that some are. (Ie, fsck failed badly.) -}-retrieveMissingObjects :: Maybe MissingObjects -> Maybe FilePath -> Repo -> IO (Maybe MissingObjects)+retrieveMissingObjects :: FsckResults -> Maybe FilePath -> Repo -> IO FsckResults retrieveMissingObjects missing referencerepo r- | missing == Just S.empty = return $ Just S.empty+ | not (foundBroken missing) = return missing | otherwise = withTmpDir "tmprepo" $ \tmpdir -> do unlessM (boolSystem "git" [Params "init", File tmpdir]) $ error $ "failed to create temp repository in " ++ tmpdir tmpr <- Config.read =<< Construct.fromAbsPath tmpdir stillmissing <- pullremotes tmpr (remotes r) fetchrefstags missing- if stillmissing == Just S.empty- then return $ Just S.empty+ if S.null (knownMissing stillmissing)+ then return stillmissing else pullremotes tmpr (remotes r) fetchallrefs stillmissing where pullremotes tmpr [] fetchrefs stillmissing = case referencerepo of@@ -121,12 +118,12 @@ void $ explodePacks tmpr void $ copyObjects tmpr r case stillmissing of- Nothing -> return $ Just S.empty- Just s -> Just <$> findMissing (S.toList s) r+ FsckFailed -> return $ FsckFailed+ FsckFoundMissing s -> FsckFoundMissing <$> findMissing (S.toList s) r , return stillmissing ) pullremotes tmpr (rmt:rmts) fetchrefs ms- | ms == Just S.empty = return $ Just S.empty+ | not (foundBroken ms) = return ms | otherwise = do putStrLn $ "Trying to recover missing objects from remote " ++ repoDescribe rmt ++ "." ifM (fetchfrom (repoLocation rmt) fetchrefs tmpr)@@ -134,10 +131,10 @@ void $ explodePacks tmpr void $ copyObjects tmpr r case ms of- Nothing -> pullremotes tmpr rmts fetchrefs ms- Just s -> do+ FsckFailed -> pullremotes tmpr rmts fetchrefs ms+ FsckFoundMissing s -> do stillmissing <- findMissing (S.toList s) r- pullremotes tmpr rmts fetchrefs (Just stillmissing)+ pullremotes tmpr rmts fetchrefs (FsckFoundMissing stillmissing) , pullremotes tmpr rmts fetchrefs ms ) fetchfrom fetchurl ps = runBool $@@ -368,7 +365,7 @@ | otherwise = do (bad, good, cleanup) <- partitionIndex missing r unless (null bad) $ do- nukeIndex r+ nukeFile (indexFile r) UpdateIndex.streamUpdateIndex r =<< (catMaybes <$> mapM reinject good) void cleanup@@ -380,9 +377,6 @@ UpdateIndex.stageFile sha blobtype file r reinject _ = return Nothing -nukeIndex :: Repo -> IO ()-nukeIndex r = nukeFile (localGitDir r </> "index")- newtype GoodCommits = GoodCommits (S.Set Sha) emptyGoodCommits :: GoodCommits@@ -423,6 +417,9 @@ nukeFile headfile writeFile headfile "ref: refs/heads/master" explodePackedRefsFile g+ unless (repoIsLocalBare g) $ do+ let f = indexFile g+ void $ tryIO $ allowWrite f where headfile = localGitDir g </> "HEAD" validhead s = "ref: refs/" `isPrefixOf` s || isJust (extractSha s)@@ -449,7 +446,7 @@ missing <- cleanCorruptObjects fsckresult g stillmissing <- retrieveMissingObjects missing referencerepo g case stillmissing of- Just s+ FsckFoundMissing s | S.null s -> if repoIsLocalBare g then successfulfinish S.empty [] else ifM (checkIndex S.empty g)@@ -471,13 +468,13 @@ , "missing objects could not be recovered!" ] unsuccessfulfinish s- Nothing+ FsckFailed | forced -> ifM (pure (repoIsLocalBare g) <||> checkIndex S.empty g) ( do- missing' <- cleanCorruptObjects Nothing g+ missing' <- cleanCorruptObjects FsckFailed g case missing' of- Nothing -> return (False, S.empty, [])- Just stillmissing' -> continuerepairs stillmissing'+ FsckFailed -> return (False, S.empty, [])+ FsckFoundMissing stillmissing' -> continuerepairs stillmissing' , corruptedindex ) | otherwise -> unsuccessfulfinish S.empty@@ -517,7 +514,7 @@ return (True, stillmissing, modifiedbranches) corruptedindex = do- nukeIndex g+ nukeFile (indexFile g) -- The corrupted index can prevent fsck from finding other -- problems, so re-run repair. fsckresult' <- findBroken False g
Init.hs view
@@ -65,7 +65,10 @@ setVersion directModeVersion , do setVersion defaultVersion- setDirect False+ -- Handle case where this repo was cloned from a+ -- direct mode repo.+ unlessM isBare+ switchHEADBack ) createInodeSentinalFile u <- getUUID
Logs/FsckResults.hs view
@@ -7,7 +7,8 @@ module Logs.FsckResults ( writeFsckResults,- readFsckResults+ readFsckResults,+ clearFsckResults, ) where import Common.Annex@@ -22,8 +23,8 @@ logfile <- fromRepo $ gitAnnexFsckResultsLog u liftIO $ case fsckresults of- Nothing -> store S.empty logfile- Just s+ FsckFailed -> store S.empty logfile+ FsckFoundMissing s | S.null s -> nukeFile logfile | otherwise -> store s logfile where@@ -35,9 +36,13 @@ readFsckResults :: UUID -> Annex FsckResults readFsckResults u = do logfile <- fromRepo $ gitAnnexFsckResultsLog u- liftIO $ catchDefaultIO (Just S.empty) $+ liftIO $ catchDefaultIO (FsckFoundMissing S.empty) $ deserialize <$> readFile logfile where deserialize l = let s = S.fromList $ map Ref $ lines l- in if S.null s then Nothing else Just s+ in if S.null s then FsckFailed else FsckFoundMissing s++clearFsckResults :: UUID -> Annex ()+clearFsckResults = liftIO . nukeFile <=< fromRepo . gitAnnexFsckResultsLog+
Types/Command.hs view
@@ -36,7 +36,7 @@ {- A command is defined by specifying these things. -} data Command = Command { cmdoptions :: [Option] -- command-specific options- , cmdnorepo :: Maybe (IO ()) -- an action to run when not in a repo+ , cmdnorepo :: Maybe (CmdParams -> IO ()) -- an action to run when not in a repo , cmdcheck :: [CommandCheck] -- check stage , cmdnocommit :: Bool -- don't commit journalled state changes , cmdnomessages :: Bool -- don't output normal messages@@ -46,6 +46,8 @@ , cmdsection :: CommandSection , cmddesc :: String -- description of command for usage }++type CmdParams = [String] {- CommandCheck functions can be compared using their unique id. -} instance Eq CommandCheck where
debian/changelog view
@@ -1,3 +1,16 @@+git-annex (5.20131130) unstable; urgency=low++ * init: Fix a bug that caused git annex init, when run in a bare+ repository, to set core.bare=false.++ -- Joey Hess <joeyh@debian.org> Sat, 30 Nov 2013 16:32:35 -0400++git-annex (5.20131127.1) unstable; urgency=low++ * Rebuild that does not try to use quvi 0.9 from experimental.++ -- Joey Hess <joeyh@debian.org> Thu, 28 Nov 2013 07:57:36 -0400+ git-annex (5.20131127) unstable; urgency=low * webapp: Detect when upgrades are available, and upgrade if the user
doc/assistant/release_notes.mdwn view
@@ -1,3 +1,15 @@+## version 5.20131127++Starting with this version, when git-annex is installed from a build on+this website, it will detect when new versions are available, and allow+easily upgrading. Automatic upgrades can also be configured if desired,+or automatic upgrade checking can be disabled in the preferences page.++git-annex builds from distributions, like Debian will not automatically+upgrade; use the distribution's package manager for that. However, the+git-annex webapp will also detect when a distribution has upgraded+git-annex and offer to restart the assistant.+ ## version 4.20131024 This version fixes several different bugs that could cause the webapp to
+ doc/bugs/Addurl_with_quvi_not_working.mdwn view
@@ -0,0 +1,74 @@+### Please describe the problem.++When adding a video with "addurl", git-annex claims that quvi does not know how to download the url. When using "quvi get" on the same url the video gets downloaded.++This seems to be independent of the video hosting site and occured on all I tested.++### What steps will reproduce the problem?++Download a video with++ git annex addurl "[URL]"++and do the same with++ quvi get "[URL]"++.+++### What version of git-annex are you using? On what operating system?++OS: Archlinux, fully updated++ git-annex version: 5.20131118-gc7e5cde+ build flags: Assistant Webapp Pairing S3 WebDAV Inotify DBus XMPP Feeds Quvi TDFA+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL+ remote types: git gcrypt S3 bup directory rsync web webdav glacier hook+ local repository version: 3+ default repository version: 3+ supported repository versions: 3 5+ upgrade supported from repository versions: 0 1 2 4+++### Please provide any additional information below.++# Git-annex:++ user@asus aaa [master] % git annex addurl "https://www.youtube.com/watch?v=TUrQsK5ouSg"+ quvi v0.9.5+ built on 2013-11-12 17:02:06 +0000 for x86_64-unknown-linux-gnu+ with gcc, -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4+ configuration: --prefix=/usr+ libquvi v0.9.4+ built on 2013-11-12 16:58:23 +0000 for x86_64-unknown-linux-gnu+ with gcc, -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4+ configuration: --prefix=/usr+ libquvi-scripts v0.9.20131104+ configuration: --prefix=/usr --with-nsfw --with-geoblocked+ + Copyright (C) 2012,2013 Toni Gundogdu <legatvs@gmail.com>+ quvi comes with ABSOLUTELY NO WARRANTY. You may redistribute copies of+ quvi under the terms of the GNU Affero General Public License version 3+ or later. For more information, see <http://www.gnu.org/licenses/agpl.html>.+ + To contact the developers, please mail to <quvi-devel@lists.sourceforge.net>+ + Copyright (C) 2012,2013 Toni Gundogdu <legatvs@gmail.com>+ quvi comes with ABSOLUTELY NO WARRANTY. You may redistribute copies of+ quvi under the terms of the GNU Affero General Public License version 3+ or later. For more information, see <http://www.gnu.org/licenses/agpl.html>.+ + To contact the developers, please mail to <quvi-devel@lists.sourceforge.net>+ git-annex: quvi does not know how to download url https://www.youtube.com/watch?v=TUrQsK5ouSg++# Quvi:++ user@asus aaa [master] % quvi get "https://www.youtube.com/watch?v=TUrQsK5ouSg"+ file: GitAnnex Assistant Hak5 14223.mp4 [media] + content length: 162.2Mi content type: video/mp4 mode: resume+ copy: --=- 100% 488.9Ki/s 00:05:37++> git annex 5.20131127 is the first to support quvi 0.9. +> (And only if built on a system with that version of quvi installed).+> Upgrade. [[done]] --[[Joey]]
+ doc/bugs/Android:_500___47__etc__47__resolv.conf_does_not_exist.mdwn view
@@ -0,0 +1,24 @@+### Please describe the problem.++When entering Jabber account data, the assistant responds with:++ Internal Server Error: /etc/resolv.conf does not exist (No such file or directory).++### What steps will reproduce the problem?++Get a jabber account at http://jit.si. Enter your jabber name and password on Android assistant, and click "Use This Account". The dark overlay and progress message appears. After about 30 seconds the browser forwards to the "Internal Server Error: /etc/resolv.conf does not exist (No such file or directory)" page.++### What version of git-annex are you using? On what operating system?++Android 4.2 on Lenovo 780p. This model is only for sale in China and India and has been rooted, but the original ROM is still on. Often this makes no difference but you might want to confirm with another device.++git-annex version 5.20131127-g736ce5e++### 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.+"""]]
+ doc/bugs/assistant_creating_.git_directory_inside_bare_repo.mdwn view
@@ -0,0 +1,90 @@+### Please describe the problem.+Setting up a git annex repo with the webapp. Adding a small archive removeable disk. +Adding a file to repo. Moving file to archive. The file seems to get copied to the removeable disk+but it is not removed (dropped)from my repo, as I would expect++Before I add the file to the repo, the archive directory on the removeable drive looks like a bare repo.+After adding one file and moving it to the archive folder, a ".git" directory gets created inside the bare repo. +The .git directory contains an annex directory, and nothing else.++Is this behaviour the expected one? As far as I have understood it, the files are supposed to "disapear" from my computer when I move them to the archive folder.+++### What steps will reproduce the problem?+Se above++### What version of git-annex are you using? On what operating system?+Version: 5.20131127-g736ce5e+Build flags: Assistant Webapp Pairing S3 WebDAV Inotify DBus XMPP Feeds Quvi TDFA++Chakra linux+Linux black 3.10.18-1-CHAKRA #1 SMP PREEMPT Sat Nov 9 20:18:15 UTC 2013 x86_64 GNU/Linux++git annex installed from prebuilt tar.++### Please provide any additional information below.++[[!format sh """+[2013-11-28 23:25:59 CET] main: starting assistant version 5.20131127-g736ce5e+[2013-11-28 23:25:59 CET] Cronner: You should enable consistency checking to protect your data. +(scanning...) [2013-11-28 23:25:59 CET] Watcher: Performing startup scan+(started...) gcrypt: Development version -- Repository format MAY CHANGE+gcrypt: Repository not found: /run/media/daniel/7090f0c1-abf9-47a1-a186-ba243c498172/test_ark+fatal: Not a git repository: '/run/media/daniel/7090f0c1-abf9-47a1-a186-ba243c498172/test_ark/.git'+[2013-11-28 23:26:21 CET] main: Syncing with 7090f0c1abf947a1a186ba243c498172 +warning: no common commits+From /run/media/daniel/7090f0c1-abf9-47a1-a186-ba243c498172/test_ark+ * [new branch] git-annex -> 7090f0c1abf947a1a186ba243c498172/git-annex+ * [new branch] master -> 7090f0c1abf947a1a186ba243c498172/master+Already up-to-date.+To /run/media/daniel/7090f0c1-abf9-47a1-a186-ba243c498172/test_ark+ * [new branch] git-annex -> synced/git-annex+ * [new branch] annex/direct/master -> synced/master+Already up-to-date.+Already up-to-date.+[2013-11-28 23:26:59 CET] Pusher: Syncing with test_ark +To /run/media/daniel/7090f0c1-abf9-47a1-a186-ba243c498172/test_ark+ 4d435e3..e548577 git-annex -> synced/git-annex+[2013-11-28 23:27:17 CET] Committer: Adding git-annex..64.tar.gz++(Recording state in git...)+(merging 7090f0c1abf947a1a186ba243c498172/git-annex into git-annex...)+(Recording state in git...)++++(Recording state in git...)+add git-annex-standalone-amd64.tar.gz (checksum...) [2013-11-28 23:27:17 CET] Committer: Committing changes to git+[2013-11-28 23:27:17 CET] Pusher: Syncing with test_ark +Already up-to-date.+To /run/media/daniel/7090f0c1-abf9-47a1-a186-ba243c498172/test_ark+ e548577..b86f41c git-annex -> synced/git-annex+ 658b0f2..f32a646 annex/direct/master -> synced/master+Already up-to-date.+[2013-11-28 23:27:27 CET] Committer: Adding git-annex..64.tar.gz+[2013-11-28 23:27:27 CET] Committer: Committing changes to git+[2013-11-28 23:27:27 CET] Pusher: Syncing with test_ark ++git-annex-standalone-amd64.tar.gz++ 32768 0% 0.00kB/s 0:00:00 Already up-to-date.+To /run/media/daniel/7090f0c1-abf9-47a1-a186-ba243c498172/test_ark+ b86f41c..806a2dd git-annex -> synced/git-annex+ f32a646..5e254e7 annex/direct/master -> synced/master+Already up-to-date.++ 20143752 100% 85.24MB/s 0:00:00 (xfer#1, to-check=0/1)++sent 20146306 bytes received 31 bytes 40292674.00 bytes/sec+total size is 20143752 speedup is 1.00+fatal: Not a git repository: '/run/media/daniel/7090f0c1-abf9-47a1-a186-ba243c498172/test_ark/.git'+fatal: Not a git repository: '/run/media/daniel/7090f0c1-abf9-47a1-a186-ba243c498172/test_ark/.git'+fatal: Not a git repository: '/run/media/daniel/7090f0c1-abf9-47a1-a186-ba243c498172/test_ark/.git'+[2013-11-28 23:27:59 CET] Pusher: Syncing with test_ark +Everything up-to-date+++# End of transcript or log.+"""]]++> [[fixed|done]] --[[Joey]]
− doc/forum/New_special_remote_suggeston_-_clean_directory.mdwn
@@ -1,15 +0,0 @@-The [[special remotes]] available all do great things and enable a ton of different services to be integrated.--Strikingly, the one service I can't satisfactorily integrate with git-annex is a remote folder on a eg NAS (think: computer without git-annex installed) that I want to look like the original annex. As in, when I do a 'tree annexdir' it'd look the same on both locations (except, on the remote there would not be any symlinks, it'd be like it was in directmode, and there would not be a .git subdir).--## Why? Use Case?--I have a Synology NAS that I share access with with my wife. I want her to be able to access the files (photos/videos/music) in a sane manner (ie: not traversing sub-sub-sub 'randomly' named directories) but I also want to be able to manage them with git-annex on my machine (to gain the standard git-annex benefits, specifically the bob the archivist use case). The NAS has the ability to use ssh+rsync, so I'll assume those two tools can be used.--This special remote could be thought of as the 'least common denominator of special remotes'; almost any server with ssh+rsync could be a remote, no matter if you have install privs or if the architecture (eg: ARM) is supported by git-annex.--## Issues?--First and foremost, this can't be (really really shouldn't be) a trusted remote; my wife could accidentally delete all files on the NAS while I am away. So my local git-annex shouldn't assume the NAS counts towards numcopies (unless I'm a real masochist).--Secondly, what to do when files change/are added/removed on the special remote? Probably the same thing that the assistant does with everything. The only thing special is that new/modified files will need to be copied locally from this special remote before being added to the annex (to get hash and such).
+ doc/forum/assitant:_special_remote_server___40__needs_ssh_tunnel__41__.mdwn view
@@ -0,0 +1,10 @@+To connect to a remote server I have to tunnel it through a server I have access to. My .ssh/config for this connection looks like this:+++ Host server-at-home+ HostName foo.bar.de+ User foo+ Port 222+ ProxyCommand /usr/bin/ssh me@server-i-have-access-to /bin/nc -w 3700 %h %p++Is it possible to create a connection using a similar configuration via the git-annex assistant?
+ doc/forum/rebuild_location_log_from_encrypted_remote.mdwn view
@@ -0,0 +1,35 @@+Hi,++I apologize, but I can't retrace my steps, so my problem is not replicable. The current situation is: 1 main repo and 1 directory/encrypted special remote. From the main repo, I see 0 available copy of the files I need. But when I do a fsck I do see the file. The problem is that the location log does not seem to get fixed after fsck, as I cannot use git-annex get to obtain the file, even after the fsck command. ++Do you have any suggestions for next diagnostic/repair steps?++Thanks a lot for your time and answer!++Vincent++macbook% git annex fsck foo.zip --from needle+fsck foo.zip (gpg) +You need a passphrase to unlock the secret key for+user: “me <email@email.edu>”+2048-bit RSA key, ID ???????, created 2013-01-11 (main key ID ????????)++(checking needle...) +GPGHMACSHA1--d7036fd17214c06c83d53479dcec9554a7dc2109+ 13815014 100% 14.16MB/s 0:00:00 (xfer#1, to-check=0/1)++sent 13816832 bytes received 42 bytes 9211249.33 bytes/sec+total size is 13815014 speedup is 1.00+(fixing location log) (checksum...) + ** No known copies exist of foo.zip+failed+(Recording state in git...)+git-annex: fsck: 1 failed+++macbook% git annex get foo.zip+get foo.zip (not available) + No other repository is known to contain the file.+failed+git-annex: get: 1 failed+macbook%
doc/install/OSX.mdwn view
@@ -23,7 +23,7 @@ [Jimmy Tang](http://www.sgenomics.org/~jtang/) autobuilds the app for OSX Lion. -* [autobuild of git-annex.dmg](http://www.sgenomics.org/~jtang/gitbuilder-git-annex-x00-x86_64-apple-darwin10.8.0-binary/ref/master/git-annex.dmg.bz2) ([build logs](http://www.sgenomics.org/~jtang/gitbuilder-git-annex-x00-x86_64-apple-darwin10.8.0-binary/))+* [autobuild of git-annex.dmg](http://www.sgenomics.org/~jtang/gitbuilder-git-annex-x00-x86_64-apple-darwin10.8.0-binary/ref/master/git-annex.dmg) ([build logs](http://www.sgenomics.org/~jtang/gitbuilder-git-annex-x00-x86_64-apple-darwin10.8.0-binary/)) * [past builds](http://www.sgenomics.org/~jtang/gitbuilder-git-annex-x00-x86_64-apple-darwin10.8.0-binary/sha1/) -- directories are named from the commitid's [[Joey]] autobuilds the app for Mavericks.
− doc/install/OSX/comment_34_c9362141d15a2f68a75df9f8bfe29da0._comment
@@ -1,17 +0,0 @@-[[!comment format=mdwn- username="https://www.google.com/accounts/o8/id?id=AItOawl-xMSPoRHcT5d2nAc1K8pWVi-AexKkYik"- nickname="Ralf"- subject="Mac OS X Maverick - symbol not found"- date="2013-10-27T21:02:45Z"- content="""-Just to mention that the beta dated 24 Oct 2013 and Joey's autobuild of 27 Oct both don't start with the following error message for git-annex, git-annex-webapp under Mac OS X 10.9 Maverick with latest XCode installed: -- dyld: Symbol not found: _objc_debug_taggedpointer_mask- Referenced from: /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation- Expected in: /Applications/git-annex.app/Contents/MacOS/bundle/I- in /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation-- Trace/BPT trap: 5--Many thanks. Can I help?-"""]]
− doc/install/OSX/comment_35_8106196c3fef70652cb2106e2d5857db._comment
@@ -1,8 +0,0 @@-[[!comment format=mdwn- username="http://joeyh.name/"- ip="209.250.56.47"- subject="comment 35"- date="2013-10-27T21:06:57Z"- content="""-We do not yet have an autobuild for 10.9. You can build from source: <http://git-annex.branchable.com/bugs/git_annex_doesn__39__t_work_in_Max_OS_X_10.9/#comment-8e8ee5e50506a6fde029d236f4809df8>-"""]]
− doc/news/version_4.20131101.mdwn
@@ -1,29 +0,0 @@-git-annex 4.20131101 released with [[!toggle text="these changes"]]-[[!toggleable text="""- * The "git annex content" command is renamed to "git annex wanted".- * New --want-get and --want-drop options which can be used to- test preferred content settings.- For example, "git annex find --in . --want-drop"- * assistant: When autostarted, wait 5 seconds before running the startup- scan, to avoid contending with the user's desktop login process.- * webapp: When setting up a bare shared repository, enable non-fast-forward- pushes.- * sync: Show a hint about receive.denyNonFastForwards when a push fails.- * directory, webdav: Fix bug introduced in version 4.20131002 that- caused the chunkcount file to not be written. Work around repositories- without such a file, so files can still be retreived from them.- * assistant: Automatically repair damanged git repository, if it can- be done without losing data.- * assistant: Support repairing git remotes that are locally accessible- (eg, on removable drives).- * add: Fix reversion in 4.20130827 when adding unlocked files that have- not yet been committed.- * unannex: New, much slower, but more safe behavior: Copies files out of- the annex. This avoids an unannex of one file breaking other files that- link to the same content. Also, it means that the content- remains in the annex using up space until cleaned up with- "git annex unused".- (The behavior of unannex --fast has not changed; it still hard links- to content in the annex. --fast was not made the default because it is- potentially unsafe; editing such a hard linked file can unexpectedly- change content stored in the annex.)"""]]
+ doc/news/version_5.20131130.mdwn view
@@ -0,0 +1,4 @@+git-annex 5.20131130 released with [[!toggle text="these changes"]]+[[!toggleable text="""+ * init: Fix a bug that caused git annex init, when run in a bare+ repository, to set core.bare=false."""]]
doc/tips/The_perfect_preferred_content_settings_for_my_android_phone.mdwn view
@@ -10,7 +10,7 @@ This will sync my music and book collections to my phone whenever I add something new on my computers, and it will sync and keep anything I add to the annex on my phone. Best of all worlds! Impressed how flexible preferred content is. More full-sync folders can be added like this: - include=Music/* or include=Books/* or Notes/* or present+ include=Music/* or include=Books/* or include = Notes/* or present To add them, I first had to figure out the uuid of my phone repo. So I added a new tab on android, and did @@ -28,5 +28,9 @@ to content [phone-uuid] = include=Music/* or include=Books/* or Notes/* or present++and commented out++ #group [phone-uuid] = client And waited for it to sync.
doc/tips/recover_data_from_lost+found.mdwn view
@@ -8,8 +8,8 @@ $ sudo chown you:you recovered-content $ chmod -R u+w recovered-content $ git annex add recovered-content- $ git rm recovered-content- $ git commit -m "recovered some content"+ $ git reset HEAD recovered-content+ $ rm -rf recovered-content $ git annex fsck The way that works is that when git-annex adds the same content that was in
doc/tips/using_box.com_as_a_special_remote.mdwn view
@@ -5,7 +5,7 @@ git-annex can use Box as a [[special remote|special_remotes]]. Recent versions of git-annex make this very easy to set up: - WEBDAV_USERNAME=you@example.com WEBDAV_PASSWORD=xxxxxxx git annex initremote box.com type=webdav url=https://www.box.com/dav/git-annex chunksize=75mb encryption=shared+ WEBDAV_USERNAME=you@example.com WEBDAV_PASSWORD=xxxxxxx git annex initremote box.com type=webdav url=https://dav.box.com/dav/git-annex chunksize=75mb encryption=shared Note the use of chunksize; Box has a 100 mb maximum file size, and this breaks up large files into chunks before that limit is reached.
+ doc/todo/New_special_remote_suggeston_-_clean_directory.mdwn view
@@ -0,0 +1,15 @@+The [[special remotes]] available all do great things and enable a ton of different services to be integrated.++Strikingly, the one service I can't satisfactorily integrate with git-annex is a remote folder on a eg NAS (think: computer without git-annex installed) that I want to look like the original annex. As in, when I do a 'tree annexdir' it'd look the same on both locations (except, on the remote there would not be any symlinks, it'd be like it was in directmode, and there would not be a .git subdir).++## Why? Use Case?++I have a Synology NAS that I share access with with my wife. I want her to be able to access the files (photos/videos/music) in a sane manner (ie: not traversing sub-sub-sub 'randomly' named directories) but I also want to be able to manage them with git-annex on my machine (to gain the standard git-annex benefits, specifically the bob the archivist use case). The NAS has the ability to use ssh+rsync, so I'll assume those two tools can be used.++This special remote could be thought of as the 'least common denominator of special remotes'; almost any server with ssh+rsync could be a remote, no matter if you have install privs or if the architecture (eg: ARM) is supported by git-annex.++## Issues?++First and foremost, this can't be (really really shouldn't be) a trusted remote; my wife could accidentally delete all files on the NAS while I am away. So my local git-annex shouldn't assume the NAS counts towards numcopies (unless I'm a real masochist).++Secondly, what to do when files change/are added/removed on the special remote? Probably the same thing that the assistant does with everything. The only thing special is that new/modified files will need to be copied locally from this special remote before being added to the annex (to get hash and such).
git-annex.cabal view
@@ -1,5 +1,5 @@ Name: git-annex-Version: 5.20131127+Version: 5.20131130 Cabal-Version: >= 1.8 License: GPL-3 Maintainer: Joey Hess <joey@kitenet.net>
− standalone/android/start
binary file changed (6492 → absent bytes)