diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 5d425843f2..0000000000 --- a/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -debian/changelog merge=dpkg-mergechangelogs diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 624675d275..0000000000 --- a/.gitignore +++ /dev/null @@ -1,34 +0,0 @@ -tags -Setup -*.hi -*.o -tmp -test -build-stamp -Build/SysConfig.hs -Build/InstallDesktopFile -Build/EvilSplicer -Build/Standalone -Build/OSXMkLibs -Build/LinuxMkLibs -git-annex -git-annex.1 -git-annex-shell.1 -git-union-merge -git-union-merge.1 -doc/.ikiwiki -html -*.tix -.hpc -dist -# Sandboxed builds -cabal-dev -.cabal-sandbox -cabal.sandbox.config -cabal.config -# Project-local emacs configuration -.dir-locals.el -# OSX related -.DS_Store -.virthualenv -.tasty-rerun-log diff --git a/Annex/AutoMerge.hs b/Annex/AutoMerge.hs index 71b28c1d44..c19011e2d9 100644 --- a/Annex/AutoMerge.hs +++ b/Annex/AutoMerge.hs @@ -5,19 +5,23 @@ - Licensed under the GNU GPL version 3 or higher. -} -module Annex.AutoMerge (autoMergeFrom) where +module Annex.AutoMerge + ( autoMergeFrom + , resolveMerge + , commitResolvedMerge + ) where import Common.Annex import qualified Annex.Queue import Annex.Direct import Annex.CatFile import Annex.Link -import qualified Git.Command import qualified Git.LsFiles as LsFiles import qualified Git.UpdateIndex as UpdateIndex import qualified Git.Merge import qualified Git.Ref import qualified Git +import qualified Git.Branch import Git.Types (BlobType(..)) import Config import Annex.ReplaceFile @@ -28,18 +32,22 @@ import qualified Data.Set as S {- Merges from a branch into the current branch - (which may not exist yet), - - with automatic merge conflict resolution. -} -autoMergeFrom :: Git.Ref -> (Maybe Git.Ref) -> Annex Bool -autoMergeFrom branch currbranch = do + - with automatic merge conflict resolution. + - + - Callers should use Git.Branch.changed first, to make sure that + - there are changed from the current branch to the branch being merged in. + -} +autoMergeFrom :: Git.Ref -> (Maybe Git.Ref) -> Git.Branch.CommitMode -> Annex Bool +autoMergeFrom branch currbranch commitmode = do showOutput case currbranch of Nothing -> go Nothing Just b -> go =<< inRepo (Git.Ref.sha b) where go old = ifM isDirect - ( mergeDirect currbranch old branch (resolveMerge old branch) - , inRepo (Git.Merge.mergeNonInteractive branch) - <||> (resolveMerge old branch <&&> commitResolvedMerge) + ( mergeDirect currbranch old branch (resolveMerge old branch) commitmode + , inRepo (Git.Merge.mergeNonInteractive branch commitmode) + <||> (resolveMerge old branch <&&> commitResolvedMerge commitmode) ) {- Resolves a conflicted merge. It's important that any conflicts be @@ -106,11 +114,11 @@ resolveMerge' (Just us) them u = do makelink keyUs -- Our side is annexed file, other side is not. (Just keyUs, Nothing) -> resolveby $ do - graftin them file + graftin them file LsFiles.valThem LsFiles.valThem makelink keyUs -- Our side is not annexed file, other side is. (Nothing, Just keyThem) -> resolveby $ do - graftin us file + graftin us file LsFiles.valUs LsFiles.valUs makelink keyThem -- Neither side is annexed file; cannot resolve. (Nothing, Nothing) -> return Nothing @@ -127,17 +135,41 @@ resolveMerge' (Just us) them u = do makelink key = do let dest = variantFile file key l <- inRepo $ gitAnnexLink dest key - ifM isDirect - ( do - d <- fromRepo gitAnnexMergeDir - replaceFile (d dest) $ makeAnnexLink l - , replaceFile dest $ makeAnnexLink l - ) + replacewithlink dest l stageSymlink dest =<< hashSymlink l - {- stage a graft of a directory or file from a branch -} - graftin b item = Annex.Queue.addUpdateIndex - =<< fromRepo (UpdateIndex.lsSubTree b item) + replacewithlink dest link = ifM isDirect + ( do + d <- fromRepo gitAnnexMergeDir + replaceFile (d dest) $ makeGitLink link + , replaceFile dest $ makeGitLink link + ) + + {- Stage a graft of a directory or file from a branch. + - + - When there is a conflicted merge where one side is a directory + - or file, and the other side is a symlink, git merge always + - updates the work tree to contain the non-symlink. So, the + - directory or file will already be in the work tree correctly, + - and they just need to be staged into place. Do so by copying the + - index. (Note that this is also better than calling git-add + - because on a crippled filesystem, it preserves any symlink + - bits.) + - + - It's also possible for the branch to have a symlink in it, + - which is not a git-annex symlink. In this special case, + - git merge does not update the work tree to contain the symlink + - from the branch, so we have to do so manually. + -} + graftin b item select select' = do + Annex.Queue.addUpdateIndex + =<< fromRepo (UpdateIndex.lsSubTree b item) + when (select (LsFiles.unmergedBlobType u) == Just SymlinkBlob) $ + case select' (LsFiles.unmergedSha u) of + Nothing -> noop + Just sha -> do + link <- catLink True sha + replacewithlink item link resolveby a = do {- Remove conflicted file from index so merge can be resolved. -} @@ -146,7 +178,7 @@ resolveMerge' (Just us) them u = do return (Just file) {- git-merge moves conflicting files away to files - - named something like f~HEAD or f~branch, but the + - named something like f~HEAD or f~branch or just f, but the - exact name chosen can vary. Once the conflict is resolved, - this cruft can be deleted. To avoid deleting legitimate - files that look like this, only delete files that are @@ -163,13 +195,12 @@ cleanConflictCruft resolvedfs top = do liftIO $ nukeFile f | otherwise = noop s = S.fromList resolvedfs - matchesresolved f = S.member (base f) s + matchesresolved f = S.member f s || S.member (base f) s base f = reverse $ drop 1 $ dropWhile (/= '~') $ reverse f -commitResolvedMerge :: Annex Bool -commitResolvedMerge = inRepo $ Git.Command.runBool - [ Param "commit" - , Param "--no-verify" +commitResolvedMerge :: Git.Branch.CommitMode -> Annex Bool +commitResolvedMerge commitmode = inRepo $ Git.Branch.commitCommand commitmode + [ Param "--no-verify" , Param "-m" , Param "git-annex automatic merge conflict fix" ] diff --git a/Annex/Branch.hs b/Annex/Branch.hs index 108f97b14d..a03d6ddf39 100644 --- a/Annex/Branch.hs +++ b/Annex/Branch.hs @@ -92,7 +92,7 @@ getBranch = maybe (hasOrigin >>= go >>= use) return =<< branchsha fromMaybe (error $ "failed to create " ++ fromRef name) <$> branchsha go False = withIndex' True $ - inRepo $ Git.Branch.commitAlways "branch created" fullname [] + inRepo $ Git.Branch.commitAlways Git.Branch.AutomaticCommit "branch created" fullname [] use sha = do setIndexSha sha return sha @@ -252,7 +252,7 @@ commitIndex jl branchref message parents = do commitIndex' :: JournalLocked -> Git.Ref -> String -> [Git.Ref] -> Annex () commitIndex' jl branchref message parents = do updateIndex jl branchref - committedref <- inRepo $ Git.Branch.commitAlways message fullname parents + committedref <- inRepo $ Git.Branch.commitAlways Git.Branch.AutomaticCommit message fullname parents setIndexSha committedref parentrefs <- commitparents <$> catObject committedref when (racedetected branchref parentrefs) $ @@ -389,19 +389,40 @@ stageJournal jl = withIndex $ do prepareModifyIndex jl g <- gitRepo let dir = gitAnnexJournalDir g - fs <- getJournalFiles jl - liftIO $ do + (jlogf, jlogh) <- openjlog + withJournalHandle $ \jh -> do h <- hashObjectStart g Git.UpdateIndex.streamUpdateIndex g - [genstream dir h fs] + [genstream dir h jh jlogh] hashObjectStop h - return $ liftIO $ mapM_ (removeFile . (dir )) fs + return $ cleanup dir jlogh jlogf where - genstream dir h fs streamer = forM_ fs $ \file -> do - let path = dir file - sha <- hashFile h path - streamer $ Git.UpdateIndex.updateIndexLine - sha FileBlob (asTopFilePath $ fileJournal file) + genstream dir h jh jlogh streamer = do + v <- readDirectory jh + case v of + Nothing -> return () + Just file -> do + unless (dirCruft file) $ do + let path = dir file + sha <- hashFile h path + hPutStrLn jlogh file + streamer $ Git.UpdateIndex.updateIndexLine + sha FileBlob (asTopFilePath $ fileJournal file) + genstream dir h jh jlogh streamer + -- Clean up the staged files, as listed in the temp log file. + -- The temp file is used to avoid needing to buffer all the + -- filenames in memory. + cleanup dir jlogh jlogf = do + hFlush jlogh + hSeek jlogh AbsoluteSeek 0 + stagedfs <- lines <$> hGetContents jlogh + mapM_ (removeFile . (dir )) stagedfs + hClose jlogh + nukeFile jlogf + openjlog = do + tmpdir <- fromRepo gitAnnexTmpMiscDir + createAnnexDirectory tmpdir + liftIO $ openTempFile tmpdir "jlog" {- This is run after the refs have been merged into the index, - but before the result is committed to the branch. @@ -471,7 +492,7 @@ performTransitionsLocked jl ts neednewlocalbranch transitionedrefs = do Annex.Queue.flush if neednewlocalbranch then do - committedref <- inRepo $ Git.Branch.commitAlways message fullname transitionedrefs + committedref <- inRepo $ Git.Branch.commitAlways Git.Branch.AutomaticCommit message fullname transitionedrefs setIndexSha committedref else do ref <- getBranch diff --git a/Annex/CatFile.hs b/Annex/CatFile.hs index 6a778db039..2f8c430794 100644 --- a/Annex/CatFile.hs +++ b/Annex/CatFile.hs @@ -15,6 +15,7 @@ module Annex.CatFile ( catKey, catKeyFile, catKeyFileHEAD, + catLink, ) where import qualified Data.ByteString.Lazy as L @@ -77,21 +78,25 @@ catFileHandle = do catKey :: Ref -> FileMode -> Annex (Maybe Key) catKey = catKey' True -catKey' :: Bool -> Ref -> FileMode -> Annex (Maybe Key) -catKey' modeguaranteed ref mode +catKey' :: Bool -> Sha -> FileMode -> Annex (Maybe Key) +catKey' modeguaranteed sha mode | isSymLink mode = do - l <- fromInternalGitPath . decodeBS <$> get + l <- catLink modeguaranteed sha return $ if isLinkToAnnex l then fileKey $ takeFileName l else Nothing | otherwise = return Nothing + +{- Gets a symlink target. -} +catLink :: Bool -> Sha -> Annex String +catLink modeguaranteed sha = fromInternalGitPath . decodeBS <$> get where -- If the mode is not guaranteed to be correct, avoid -- buffering the whole file content, which might be large. -- 8192 is enough if it really is a symlink. get - | modeguaranteed = catObject ref - | otherwise = L.take 8192 <$> catObject ref + | modeguaranteed = catObject sha + | otherwise = L.take 8192 <$> catObject sha {- Looks up the key corresponding to the Ref using the running cat-file. - diff --git a/Annex/Content.hs b/Annex/Content.hs index aaae595aa9..8ad3d5e65e 100644 --- a/Annex/Content.hs +++ b/Annex/Content.hs @@ -218,7 +218,7 @@ getViaTmpUnchecked = finishGetViaTmp (return True) getViaTmpChecked :: Annex Bool -> Key -> (FilePath -> Annex Bool) -> Annex Bool getViaTmpChecked check key action = - prepGetViaTmpChecked key $ + prepGetViaTmpChecked key False $ finishGetViaTmp check key action {- Prepares to download a key via a tmp file, and checks that there is @@ -229,8 +229,8 @@ getViaTmpChecked check key action = - - Wen there's enough free space, runs the download action. -} -prepGetViaTmpChecked :: Key -> Annex Bool -> Annex Bool -prepGetViaTmpChecked key getkey = do +prepGetViaTmpChecked :: Key -> a -> Annex a -> Annex a +prepGetViaTmpChecked key unabletoget getkey = do tmp <- fromRepo $ gitAnnexTmpObjectLocation key e <- liftIO $ doesFileExist tmp @@ -242,7 +242,7 @@ prepGetViaTmpChecked key getkey = do -- The tmp file may not have been left writable when e $ thawContent tmp getkey - , return False + , return unabletoget ) finishGetViaTmp :: Annex Bool -> Key -> (FilePath -> Annex Bool) -> Annex Bool diff --git a/Annex/Direct.hs b/Annex/Direct.hs index 6e14c6b9bf..e6b941e0f9 100644 --- a/Annex/Direct.hs +++ b/Annex/Direct.hs @@ -36,6 +36,7 @@ import Annex.Exception import Annex.VariantFile import Git.Index import Annex.Index +import Annex.LockFile {- Uses git ls-files to find files that need to be committed, and stages - them into the index. Returns True if some changes were staged. -} @@ -150,13 +151,16 @@ addDirect file cache = do - directory, and the merge is staged into a copy of the index. - Then the work tree is updated to reflect the merge, and - finally, the merge is committed and the real index updated. + - + - A lock file is used to avoid races with any other caller of mergeDirect. + - + - To avoid other git processes from making change to the index while our + - merge is in progress, the index lock file is used as the temp index + - file. This is the same as what git does when updating the index + - normally. -} -mergeDirect :: Maybe Git.Ref -> Maybe Git.Ref -> Git.Branch -> Annex Bool -> Annex Bool -mergeDirect startbranch oldref branch resolvemerge = do - -- Use the index lock file as the temp index file. - -- This is actually what git does when updating the index, - -- and so it will prevent other git processes from making - -- any changes to the index while our merge is in progress. +mergeDirect :: Maybe Git.Ref -> Maybe Git.Ref -> Git.Branch -> Annex Bool -> Git.Branch.CommitMode -> Annex Bool +mergeDirect startbranch oldref branch resolvemerge commitmode = exclusively $ do reali <- fromRepo indexFile tmpi <- fromRepo indexFileLock liftIO $ copyFile reali tmpi @@ -168,19 +172,23 @@ mergeDirect startbranch oldref branch resolvemerge = do createDirectoryIfMissing True d withIndexFile tmpi $ do - merged <- stageMerge d branch + merged <- stageMerge d branch commitmode r <- if merged then return True else resolvemerge mergeDirectCleanup d (fromMaybe Git.Sha.emptyTree oldref) - mergeDirectCommit merged startbranch branch + mergeDirectCommit merged startbranch branch commitmode + liftIO $ rename tmpi reali + return r + where + exclusively = withExclusiveLock gitAnnexMergeLock {- Stage a merge into the index, avoiding changing HEAD or the current - branch. -} -stageMerge :: FilePath -> Git.Branch -> Annex Bool -stageMerge d branch = do +stageMerge :: FilePath -> Git.Branch -> Git.Branch.CommitMode -> Annex Bool +stageMerge d branch commitmode = do -- XXX A bug in git makes stageMerge unsafe to use if the git repo -- is configured with core.symlinks=false -- Using mergeNonInteractive is not ideal though, since it will @@ -190,7 +198,7 @@ stageMerge d branch = do -- merger <- ifM (coreSymlinks <$> Annex.getGitConfig) ( return Git.Merge.stageMerge - , return Git.Merge.mergeNonInteractive + , return $ \ref -> Git.Merge.mergeNonInteractive ref commitmode ) inRepo $ \g -> merger branch $ g { location = Local { gitdir = Git.localGitDir g, worktree = Just d } } @@ -198,8 +206,8 @@ stageMerge d branch = do {- Commits after a direct mode merge is complete, and after the work - tree has been updated by mergeDirectCleanup. -} -mergeDirectCommit :: Bool -> Maybe Git.Ref -> Git.Branch -> Annex () -mergeDirectCommit allowff old branch = do +mergeDirectCommit :: Bool -> Maybe Git.Ref -> Git.Branch -> Git.Branch.CommitMode -> Annex () +mergeDirectCommit allowff old branch commitmode = do void preCommitDirect d <- fromRepo Git.localGitDir let merge_head = d "MERGE_HEAD" @@ -211,7 +219,7 @@ mergeDirectCommit allowff old branch = do msg <- liftIO $ catchDefaultIO ("merge " ++ fromRef branch) $ readFile merge_msg - void $ inRepo $ Git.Branch.commit False msg + void $ inRepo $ Git.Branch.commit commitmode False msg Git.Ref.headRef [Git.Ref.headRef, branch] ) liftIO $ mapM_ nukeFile [merge_head, merge_msg, merge_mode] @@ -346,7 +354,11 @@ toDirectGen k f = do void $ addAssociatedFile k f modifyContent loc $ do thawContent loc - replaceFile f $ liftIO . moveFile loc + replaceFileOr f + (liftIO . moveFile loc) + $ \tmp -> do -- rollback + liftIO (moveFile tmp loc) + freezeContent loc fromdirect loc = do replaceFile f $ liftIO . void . copyFileExternal loc diff --git a/Annex/Journal.hs b/Annex/Journal.hs index 4196a82256..f34a7be1bf 100644 --- a/Annex/Journal.hs +++ b/Annex/Journal.hs @@ -17,10 +17,7 @@ import Common.Annex import Annex.Exception import qualified Git import Annex.Perms - -#ifdef mingw32_HOST_OS -import Utility.WinLock -#endif +import Annex.LockFile {- Records content for a file in the branch to the journal. - @@ -80,9 +77,18 @@ getJournalFilesStale = do getDirectoryContents $ gitAnnexJournalDir g return $ filter (`notElem` [".", ".."]) fs +withJournalHandle :: (DirectoryHandle -> IO a) -> Annex a +withJournalHandle a = do + d <- fromRepo gitAnnexJournalDir + bracketIO (openDirectory d) closeDirectory (liftIO . a) + {- Checks if there are changes in the journal. -} journalDirty :: Annex Bool -journalDirty = not . null <$> getJournalFilesStale +journalDirty = do + d <- fromRepo gitAnnexJournalDir + liftIO $ + (not <$> isDirectoryEmpty d) + `catchIO` (const $ doesDirectoryExist d) {- Produces a filename to use in the journal for a file on the branch. - @@ -112,19 +118,4 @@ data JournalLocked = ProduceJournalLocked {- Runs an action that modifies the journal, using locking to avoid - contention with other git-annex processes. -} lockJournal :: (JournalLocked -> Annex a) -> Annex a -lockJournal a = do - lockfile <- fromRepo gitAnnexJournalLock - createAnnexDirectory $ takeDirectory lockfile - mode <- annexFileMode - bracketIO (lock lockfile mode) unlock (const $ a ProduceJournalLocked) - where -#ifndef mingw32_HOST_OS - lock lockfile mode = do - l <- noUmask mode $ createFile lockfile mode - waitToSetLock l (WriteLock, AbsoluteSeek, 0, 0) - return l - unlock = closeFd -#else - lock lockfile _mode = waitToLock $ lockExclusive lockfile - unlock = dropLock -#endif +lockJournal a = withExclusiveLock gitAnnexJournalLock $ a ProduceJournalLocked diff --git a/Annex/Link.hs b/Annex/Link.hs index 26991e9118..25166bff5c 100644 --- a/Annex/Link.hs +++ b/Annex/Link.hs @@ -68,6 +68,9 @@ getAnnexLinkTarget file = ifM (coreSymlinks <$> Annex.getGitConfig) then "" else s +makeAnnexLink :: LinkTarget -> FilePath -> Annex () +makeAnnexLink = makeGitLink + {- Creates a link on disk. - - On a filesystem that does not support symlinks, writes the link target @@ -75,8 +78,8 @@ getAnnexLinkTarget file = ifM (coreSymlinks <$> Annex.getGitConfig) - it's staged as such, so use addAnnexLink when adding a new file or - modified link to git. -} -makeAnnexLink :: LinkTarget -> FilePath -> Annex () -makeAnnexLink linktarget file = ifM (coreSymlinks <$> Annex.getGitConfig) +makeGitLink :: LinkTarget -> FilePath -> Annex () +makeGitLink linktarget file = ifM (coreSymlinks <$> Annex.getGitConfig) ( liftIO $ do void $ tryIO $ removeFile file createSymbolicLink linktarget file diff --git a/Annex/LockFile.hs b/Annex/LockFile.hs new file mode 100644 index 0000000000..8114e94f2b --- /dev/null +++ b/Annex/LockFile.hs @@ -0,0 +1,87 @@ +{- git-annex lock files. + - + - Copyright 2012, 2014 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Annex.LockFile ( + lockFileShared, + unlockFile, + getLockPool, + withExclusiveLock, +) where + +import Common.Annex +import Annex +import Types.LockPool +import qualified Git +import Annex.Exception +import Annex.Perms + +import qualified Data.Map as M + +#ifdef mingw32_HOST_OS +import Utility.WinLock +#endif + +{- Create a specified lock file, and takes a shared lock, which is retained + - in the pool. -} +lockFileShared :: FilePath -> Annex () +lockFileShared file = go =<< fromLockPool file + where + go (Just _) = noop -- already locked + go Nothing = do +#ifndef mingw32_HOST_OS + mode <- annexFileMode + lockhandle <- liftIO $ noUmask mode $ + openFd file ReadOnly (Just mode) defaultFileFlags + liftIO $ waitToSetLock lockhandle (ReadLock, AbsoluteSeek, 0, 0) +#else + lockhandle <- liftIO $ waitToLock $ lockShared file +#endif + changeLockPool $ M.insert file lockhandle + +unlockFile :: FilePath -> Annex () +unlockFile file = maybe noop go =<< fromLockPool file + where + go lockhandle = do +#ifndef mingw32_HOST_OS + liftIO $ closeFd lockhandle +#else + liftIO $ dropLock lockhandle +#endif + changeLockPool $ M.delete file + +getLockPool :: Annex LockPool +getLockPool = getState lockpool + +fromLockPool :: FilePath -> Annex (Maybe LockHandle) +fromLockPool file = M.lookup file <$> getLockPool + +changeLockPool :: (LockPool -> LockPool) -> Annex () +changeLockPool a = do + m <- getLockPool + changeState $ \s -> s { lockpool = a m } + +{- Runs an action with an exclusive lock held. If the lock is already + - held, blocks until it becomes free. -} +withExclusiveLock :: (Git.Repo -> FilePath) -> Annex a -> Annex a +withExclusiveLock getlockfile a = do + lockfile <- fromRepo getlockfile + createAnnexDirectory $ takeDirectory lockfile + mode <- annexFileMode + bracketIO (lock lockfile mode) unlock (const a) + where +#ifndef mingw32_HOST_OS + lock lockfile mode = do + l <- noUmask mode $ createFile lockfile mode + waitToSetLock l (WriteLock, AbsoluteSeek, 0, 0) + return l + unlock = closeFd +#else + lock lockfile _mode = waitToLock $ lockExclusive lockfile + unlock = dropLock +#endif diff --git a/Annex/LockPool.hs b/Annex/LockPool.hs deleted file mode 100644 index 5fc167d287..0000000000 --- a/Annex/LockPool.hs +++ /dev/null @@ -1,60 +0,0 @@ -{- git-annex lock pool - - - - Copyright 2012, 2014 Joey Hess - - - - Licensed under the GNU GPL version 3 or higher. - -} - -{-# LANGUAGE CPP #-} - -module Annex.LockPool where - -import Common.Annex -import Annex -import Types.LockPool - -import qualified Data.Map as M - -#ifndef mingw32_HOST_OS -import Annex.Perms -#else -import Utility.WinLock -#endif - -{- Create a specified lock file, and takes a shared lock. -} -lockFile :: FilePath -> Annex () -lockFile file = go =<< fromPool file - where - go (Just _) = noop -- already locked - go Nothing = do -#ifndef mingw32_HOST_OS - mode <- annexFileMode - lockhandle <- liftIO $ noUmask mode $ - openFd file ReadOnly (Just mode) defaultFileFlags - liftIO $ waitToSetLock lockhandle (ReadLock, AbsoluteSeek, 0, 0) -#else - lockhandle <- liftIO $ waitToLock $ lockShared file -#endif - changePool $ M.insert file lockhandle - -unlockFile :: FilePath -> Annex () -unlockFile file = maybe noop go =<< fromPool file - where - go lockhandle = do -#ifndef mingw32_HOST_OS - liftIO $ closeFd lockhandle -#else - liftIO $ dropLock lockhandle -#endif - changePool $ M.delete file - -getPool :: Annex LockPool -getPool = getState lockpool - -fromPool :: FilePath -> Annex (Maybe LockHandle) -fromPool file = M.lookup file <$> getPool - -changePool :: (LockPool -> LockPool) -> Annex () -changePool a = do - m <- getPool - changeState $ \s -> s { lockpool = a m } diff --git a/Annex/MakeRepo.hs b/Annex/MakeRepo.hs new file mode 100644 index 0000000000..a1f797a76b --- /dev/null +++ b/Annex/MakeRepo.hs @@ -0,0 +1,88 @@ +{- making local repositories (used by webapp mostly) + - + - Copyright 2012-2014 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Annex.MakeRepo where + +import Assistant.WebApp.Common +import Annex.Init +import qualified Git.Construct +import qualified Git.Config +import qualified Git.Command +import qualified Git.Branch +import qualified Annex +import Annex.UUID +import Annex.Direct +import Types.StandardGroups +import Logs.PreferredContent +import qualified Annex.Branch + +{- Makes a new git repository. Or, if a git repository already + - exists, returns False. -} +makeRepo :: FilePath -> Bool -> IO Bool +makeRepo path bare = ifM (probeRepoExists path) + ( return False + , do + (transcript, ok) <- + processTranscript "git" (toCommand params) Nothing + unless ok $ + error $ "git init failed!\nOutput:\n" ++ transcript + return True + ) + where + baseparams = [Param "init", Param "--quiet"] + params + | bare = baseparams ++ [Param "--bare", File path] + | otherwise = baseparams ++ [File path] + +{- Runs an action in the git repository in the specified directory. -} +inDir :: FilePath -> Annex a -> IO a +inDir dir a = do + state <- Annex.new =<< Git.Config.read =<< Git.Construct.fromPath dir + Annex.eval state a + +{- Creates a new repository, and returns its UUID. -} +initRepo :: Bool -> Bool -> FilePath -> Maybe String -> Maybe StandardGroup -> IO UUID +initRepo True primary_assistant_repo dir desc mgroup = inDir dir $ do + initRepo' desc mgroup + {- Initialize the master branch, so things that expect + - to have it will work, before any files are added. -} + unlessM (Git.Config.isBare <$> gitRepo) $ + void $ inRepo $ Git.Branch.commitCommand Git.Branch.AutomaticCommit + [ Param "--quiet" + , Param "--allow-empty" + , Param "-m" + , Param "created repository" + ] + {- Repositories directly managed by the assistant use direct mode. + - + - Automatic gc is disabled, as it can be slow. Insted, gc is done + - once a day. + -} + when primary_assistant_repo $ do + setDirect True + inRepo $ Git.Command.run + [Param "config", Param "gc.auto", Param "0"] + getUUID +{- Repo already exists, could be a non-git-annex repo though so + - still initialize it. -} +initRepo False _ dir desc mgroup = inDir dir $ do + initRepo' desc mgroup + getUUID + +initRepo' :: Maybe String -> Maybe StandardGroup -> Annex () +initRepo' desc mgroup = unlessM isInitialized $ do + initialize desc + u <- getUUID + maybe noop (defaultStandardGroup u) mgroup + {- Ensure branch gets committed right away so it is + - available for merging immediately. -} + Annex.Branch.commit "update" + +{- Checks if a git repo exists at a location. -} +probeRepoExists :: FilePath -> IO Bool +probeRepoExists dir = isJust <$> + catchDefaultIO Nothing (Git.Construct.checkForRepo dir) diff --git a/Annex/MetaData.hs b/Annex/MetaData.hs index f382f0ab1a..22e9e7e50a 100644 --- a/Annex/MetaData.hs +++ b/Annex/MetaData.hs @@ -7,6 +7,7 @@ module Annex.MetaData ( genMetaData, + dateMetaData, module X ) where @@ -37,20 +38,18 @@ genMetaData :: Key -> FilePath -> FileStatus -> Annex () genMetaData key file status = do maybe noop (flip copyMetaData key) =<< catKeyFileHEAD file whenM (annexGenMetaData <$> Annex.getGitConfig) $ do - metadata <- getCurrentMetaData key - let metadata' = genMetaData' status metadata - unless (metadata' == emptyMetaData) $ - addMetaData key metadata' + curr <- getCurrentMetaData key + addMetaData key (dateMetaData mtime curr) + where + mtime = posixSecondsToUTCTime $ realToFrac $ modificationTime status -{- Generates metadata from the FileStatus. +{- Generates metadata for a file's date stamp. - Does not overwrite any existing metadata values. -} -genMetaData' :: FileStatus -> MetaData -> MetaData -genMetaData' status old = MetaData $ M.fromList $ filter isnew +dateMetaData :: UTCTime -> MetaData -> MetaData +dateMetaData mtime old = MetaData $ M.fromList $ filter isnew [ (yearMetaField, S.singleton $ toMetaValue $ show y) , (monthMetaField, S.singleton $ toMetaValue $ show m) ] where isnew (f, _) = S.null (currentMetaDataValues f old) - (y, m, _d) = toGregorian $ utctDay $ - posixSecondsToUTCTime $ realToFrac $ - modificationTime status + (y, m, _d) = toGregorian $ utctDay $ mtime diff --git a/Annex/ReplaceFile.hs b/Annex/ReplaceFile.hs index 8b15f5ce35..e734c4d64b 100644 --- a/Annex/ReplaceFile.hs +++ b/Annex/ReplaceFile.hs @@ -23,11 +23,16 @@ import Annex.Exception - Throws an IO exception when it was unable to replace the file. -} replaceFile :: FilePath -> (FilePath -> Annex ()) -> Annex () -replaceFile file a = do +replaceFile file action = replaceFileOr file action (liftIO . nukeFile) + +{- If unable to replace the file with the temp file, runs the + - rollback action, which is responsible for cleaning up the temp file. -} +replaceFileOr :: FilePath -> (FilePath -> Annex ()) -> (FilePath -> Annex ()) -> Annex () +replaceFileOr file action rollback = do tmpdir <- fromRepo gitAnnexTmpMiscDir void $ createAnnexDirectory tmpdir - bracketIO (setup tmpdir) nukeFile $ \tmpfile -> do - a tmpfile + bracketAnnex (liftIO $ setup tmpdir) rollback $ \tmpfile -> do + action tmpfile liftIO $ catchIO (rename tmpfile file) (fallback tmpfile) where setup tmpdir = do diff --git a/Annex/Ssh.hs b/Annex/Ssh.hs index 7b32c61962..246ac338d7 100644 --- a/Annex/Ssh.hs +++ b/Annex/Ssh.hs @@ -25,7 +25,7 @@ import Data.Hash.MD5 import System.Exit import Common.Annex -import Annex.LockPool +import Annex.LockFile import qualified Build.SysConfig as SysConfig import qualified Annex import qualified Git @@ -119,13 +119,13 @@ prepSocket socketfile = do -- If the lock pool is empty, this is the first ssh of this -- run. There could be stale ssh connections hanging around -- from a previous git-annex run that was interrupted. - whenM (not . any isLock . M.keys <$> getPool) + whenM (not . any isLock . M.keys <$> getLockPool) sshCleanup -- Cleanup at end of this run. Annex.addCleanup SshCachingCleanup sshCleanup liftIO $ createDirectoryIfMissing True $ parentDir socketfile - lockFile $ socket2lock socketfile + lockFileShared $ socket2lock socketfile enumSocketFiles :: Annex [FilePath] enumSocketFiles = go =<< sshCacheDir diff --git a/Annex/View.hs b/Annex/View.hs index 5cf21cdfec..b969816128 100644 --- a/Annex/View.hs +++ b/Annex/View.hs @@ -433,7 +433,7 @@ genViewBranch :: View -> Annex () -> Annex Git.Branch genViewBranch view a = withIndex $ do a let branch = branchView view - void $ inRepo $ Git.Branch.commit True (fromRef branch) branch [] + void $ inRepo $ Git.Branch.commit Git.Branch.AutomaticCommit True (fromRef branch) branch [] return branch {- Runs an action using the view index file. diff --git a/Assistant.hs b/Assistant.hs index 5dd6a7ece5..82f1572414 100644 --- a/Assistant.hs +++ b/Assistant.hs @@ -52,9 +52,12 @@ import qualified Utility.Daemon import Utility.ThreadScheduler import Utility.HumanTime import qualified Build.SysConfig as SysConfig -#ifndef mingw32_HOST_OS -import Utility.LogFile import Annex.Perms +import Utility.LogFile +#ifdef mingw32_HOST_OS +import Utility.Env +import Config.Files +import System.Environment (getArgs) #endif import System.Log.Logger @@ -72,19 +75,18 @@ startDaemon :: Bool -> Bool -> Maybe Duration -> Maybe String -> Maybe HostName startDaemon assistant foreground startdelay cannotrun listenhost startbrowser = do Annex.changeState $ \s -> s { Annex.daemon = True } pidfile <- fromRepo gitAnnexPidFile -#ifndef mingw32_HOST_OS logfile <- fromRepo gitAnnexLogFile + liftIO $ debugM desc $ "logging to " ++ logfile +#ifndef mingw32_HOST_OS createAnnexDirectory (parentDir logfile) - logfd <- liftIO $ openLog logfile + logfd <- liftIO $ handleToFd =<< openLog logfile if foreground then do origout <- liftIO $ catchMaybeIO $ fdToHandle =<< dup stdOutput origerr <- liftIO $ catchMaybeIO $ fdToHandle =<< dup stdError - let undaemonize a = do - debugM desc $ "logging to " ++ logfile - Utility.Daemon.foreground logfd (Just pidfile) a + let undaemonize = Utility.Daemon.foreground logfd (Just pidfile) start undaemonize $ case startbrowser of Nothing -> Nothing @@ -92,13 +94,29 @@ startDaemon assistant foreground startdelay cannotrun listenhost startbrowser = else start (Utility.Daemon.daemonize logfd (Just pidfile) False) Nothing #else - -- Windows is always foreground, and has no log file. + -- Windows doesn't daemonize, but does redirect output to the + -- log file. The only way to do so is to restart the program. when (foreground || not foreground) $ do - liftIO $ Utility.Daemon.lockPidFile pidfile - start id $ do - case startbrowser of - Nothing -> Nothing - Just a -> Just $ a Nothing Nothing + let flag = "GIT_ANNEX_OUTPUT_REDIR" + createAnnexDirectory (parentDir logfile) + ifM (liftIO $ isNothing <$> getEnv flag) + ( liftIO $ withFile devNull WriteMode $ \nullh -> do + loghandle <- openLog logfile + e <- getEnvironment + cmd <- readProgramFile + ps <- getArgs + (_, _, _, pid) <- createProcess (proc cmd ps) + { env = Just (addEntry flag "1" e) + , std_in = UseHandle nullh + , std_out = UseHandle loghandle + , std_err = UseHandle loghandle + } + exitWith =<< waitForProcess pid + , start (Utility.Daemon.foreground (Just pidfile)) $ + case startbrowser of + Nothing -> Nothing + Just a -> Just $ a Nothing Nothing + ) #endif where desc diff --git a/Assistant/Install.hs b/Assistant/Install.hs index 89025cdae0..84dc779d4c 100644 --- a/Assistant/Install.hs +++ b/Assistant/Install.hs @@ -92,9 +92,9 @@ installNautilus :: FilePath -> IO () #ifdef linux_HOST_OS installNautilus program = do scriptdir <- (\d -> d "nautilus" "scripts") <$> userDataDir - whenM (doesDirectoryExist scriptdir) $ do - genscript scriptdir "get" - genscript scriptdir "drop" + createDirectoryIfMissing True scriptdir + genscript scriptdir "get" + genscript scriptdir "drop" where genscript scriptdir action = installscript (scriptdir scriptname action) $ unlines diff --git a/Assistant/Sync.hs b/Assistant/Sync.hs index c748f6e1ac..4bc63241cd 100644 --- a/Assistant/Sync.hs +++ b/Assistant/Sync.hs @@ -96,7 +96,7 @@ reconnectRemotes notifypushes rs = void $ do =<< fromMaybe [] . M.lookup (Remote.uuid r) . connectRemoteNotifiers <$> getDaemonStatus -{- Updates the local sync branch, then pushes it to all remotes, in +{- Pushes the local sync branch to all remotes, in - parallel, along with the git-annex branch. This is the same - as "git annex sync", except in parallel, and will co-exist with use of - "git annex sync". @@ -148,7 +148,6 @@ pushToRemotes' now notifypushes remotes = do go _ _ _ _ [] = return [] -- no remotes, so nothing to do go shouldretry (Just branch) g u rs = do debug ["pushing to", show rs] - liftIO $ Command.Sync.updateBranch (Command.Sync.syncBranch branch) g (succeeded, failed) <- liftIO $ inParallel (push g branch) rs updatemap succeeded [] if null failed diff --git a/Assistant/Threads/Committer.hs b/Assistant/Threads/Committer.hs index 2755863431..afe4aa1442 100644 --- a/Assistant/Threads/Committer.hs +++ b/Assistant/Threads/Committer.hs @@ -35,6 +35,7 @@ import qualified Annex import Utility.InodeCache import Annex.Content.Direct import qualified Command.Sync +import qualified Git.Branch import Data.Time.Clock import Data.Tuple.Utils @@ -219,7 +220,11 @@ commitStaged = do v <- tryAnnex Annex.Queue.flush case v of Left _ -> return False - Right _ -> Command.Sync.commitStaged "" + Right _ -> do + ok <- Command.Sync.commitStaged Git.Branch.AutomaticCommit "" + when ok $ + Command.Sync.updateSyncBranch =<< inRepo Git.Branch.current + return ok {- OSX needs a short delay after a file is added before locking it down, - when using a non-direct mode repository, as pasting a file seems to diff --git a/Assistant/Threads/Merger.hs b/Assistant/Threads/Merger.hs index 03bcf0aad2..62dab59aff 100644 --- a/Assistant/Threads/Merger.hs +++ b/Assistant/Threads/Merger.hs @@ -78,12 +78,13 @@ onChange file changedbranch = fileToBranch file mergecurrent (Just current) - | equivBranches changedbranch current = do - debug - [ "merging", Git.fromRef changedbranch - , "into", Git.fromRef current - ] - void $ liftAnnex $ autoMergeFrom changedbranch (Just current) + | equivBranches changedbranch current = + whenM (liftAnnex $ inRepo $ Git.Branch.changed current changedbranch) $ do + debug + [ "merging", Git.fromRef changedbranch + , "into", Git.fromRef current + ] + void $ liftAnnex $ autoMergeFrom changedbranch (Just current) Git.Branch.AutomaticCommit mergecurrent _ = noop handleDesynced = case fromTaggedBranch changedbranch of diff --git a/Assistant/Threads/SanityChecker.hs b/Assistant/Threads/SanityChecker.hs index c4f2723f0e..b623183823 100644 --- a/Assistant/Threads/SanityChecker.hs +++ b/Assistant/Threads/SanityChecker.hs @@ -23,7 +23,7 @@ import Assistant.TransferQueue import Assistant.Types.UrlRenderer import qualified Annex.Branch import qualified Git.LsFiles -import qualified Git.Command +import qualified Git.Command.Batch import qualified Git.Config import Utility.ThreadScheduler import qualified Assistant.Threads.Watcher as Watcher @@ -167,7 +167,7 @@ dailyCheck urlrenderer = do - to have a lot of small objects and they should not be a - significant size. -} when (Git.Config.getMaybe "gc.auto" g == Just "0") $ - liftIO $ void $ Git.Command.runBatch batchmaker + liftIO $ void $ Git.Command.Batch.run batchmaker [ Param "-c", Param "gc.auto=670000" , Param "gc" , Param "--auto" @@ -224,7 +224,7 @@ checkLogSize n = do totalsize <- liftIO $ sum <$> mapM filesize logs when (totalsize > 2 * oneMegabyte) $ do notice ["Rotated logs due to size:", show totalsize] - liftIO $ openLog f >>= redirLog + liftIO $ openLog f >>= handleToFd >>= redirLog when (n < maxLogs + 1) $ do df <- liftIO $ getDiskFree $ takeDirectory f case df of diff --git a/Assistant/Upgrade.hs b/Assistant/Upgrade.hs index cb89b863b7..1456f8e5ac 100644 --- a/Assistant/Upgrade.hs +++ b/Assistant/Upgrade.hs @@ -33,6 +33,7 @@ import Utility.ThreadScheduler import Utility.Tmp import Utility.UserInfo import Utility.Gpg +import Utility.FileMode import qualified Utility.Lsof as Lsof import qualified Build.SysConfig import qualified Utility.Url as Url @@ -348,7 +349,7 @@ verifyDistributionSig :: FilePath -> IO Bool verifyDistributionSig sig = do p <- readProgramFile if isAbsolute p - then withTmpDir "git-annex-gpg.tmp" $ \gpgtmp -> do + then withUmask 0o0077 $ withTmpDir "git-annex-gpg.tmp" $ \gpgtmp -> do let trustedkeys = takeDirectory p "trustedkeys.gpg" boolSystem gpgcmd [ Param "--no-default-keyring" diff --git a/Assistant/WebApp/Configurators/Local.hs b/Assistant/WebApp/Configurators/Local.hs index 542f386148..fb16e7dd3c 100644 --- a/Assistant/WebApp/Configurators/Local.hs +++ b/Assistant/WebApp/Configurators/Local.hs @@ -14,13 +14,11 @@ import Assistant.WebApp.Gpg import Assistant.WebApp.MakeRemote import Assistant.Sync import Assistant.Restart -import Annex.Init +import Annex.MakeRepo import qualified Git -import qualified Git.Construct import qualified Git.Config import qualified Git.Command import qualified Git.Branch -import qualified Annex import Config.Files import Utility.FreeDesktop import Utility.DiskFree @@ -30,14 +28,12 @@ import Utility.Mounts import Utility.DataUnits import Remote (prettyUUID) import Annex.UUID -import Annex.Direct import Types.StandardGroups import Logs.PreferredContent import Logs.UUID import Utility.UserInfo import Config import Utility.Gpg -import qualified Annex.Branch import qualified Remote.GCrypt as GCrypt import qualified Types.Remote @@ -413,69 +409,6 @@ startFullAssistant path repogroup setup = do fromJust $ postFirstRun webapp redirect $ T.pack url -{- Makes a new git repository. Or, if a git repository already - - exists, returns False. -} -makeRepo :: FilePath -> Bool -> IO Bool -makeRepo path bare = ifM (probeRepoExists path) - ( return False - , do - (transcript, ok) <- - processTranscript "git" (toCommand params) Nothing - unless ok $ - error $ "git init failed!\nOutput:\n" ++ transcript - return True - ) - where - baseparams = [Param "init", Param "--quiet"] - params - | bare = baseparams ++ [Param "--bare", File path] - | otherwise = baseparams ++ [File path] - -{- Runs an action in the git repository in the specified directory. -} -inDir :: FilePath -> Annex a -> IO a -inDir dir a = do - state <- Annex.new =<< Git.Config.read =<< Git.Construct.fromPath dir - Annex.eval state a - -{- Creates a new repository, and returns its UUID. -} -initRepo :: Bool -> Bool -> FilePath -> Maybe String -> Maybe StandardGroup -> IO UUID -initRepo True primary_assistant_repo dir desc mgroup = inDir dir $ do - initRepo' desc mgroup - {- Initialize the master branch, so things that expect - - to have it will work, before any files are added. -} - unlessM (Git.Config.isBare <$> gitRepo) $ - void $ inRepo $ Git.Command.runBool - [ Param "commit" - , Param "--quiet" - , Param "--allow-empty" - , Param "-m" - , Param "created repository" - ] - {- Repositories directly managed by the assistant use direct mode. - - - - Automatic gc is disabled, as it can be slow. Insted, gc is done - - once a day. - -} - when primary_assistant_repo $ do - setDirect True - inRepo $ Git.Command.run - [Param "config", Param "gc.auto", Param "0"] - getUUID -{- Repo already exists, could be a non-git-annex repo though so - - still initialize it. -} -initRepo False _ dir desc mgroup = inDir dir $ do - initRepo' desc mgroup - getUUID - -initRepo' :: Maybe String -> Maybe StandardGroup -> Annex () -initRepo' desc mgroup = unlessM isInitialized $ do - initialize desc - u <- getUUID - maybe noop (defaultStandardGroup u) mgroup - {- Ensure branch gets committed right away so it is - - available for merging immediately. -} - Annex.Branch.commit "update" - {- Checks if the user can write to a directory. - - The directory may be in the process of being created; if so @@ -486,11 +419,6 @@ canWrite dir = do (return dir, return $ parentDir dir) catchBoolIO $ fileAccess tocheck False True False -{- Checks if a git repo exists at a location. -} -probeRepoExists :: FilePath -> IO Bool -probeRepoExists dir = isJust <$> - catchDefaultIO Nothing (Git.Construct.checkForRepo dir) - {- Gets the UUID of the git repo at a location, which may not exist, or - not be a git-annex repo. -} probeUUID :: FilePath -> IO (Maybe UUID) diff --git a/Assistant/WebApp/DashBoard.hs b/Assistant/WebApp/DashBoard.hs index 718021b0e1..bf2366161a 100644 --- a/Assistant/WebApp/DashBoard.hs +++ b/Assistant/WebApp/DashBoard.hs @@ -118,20 +118,22 @@ openFileBrowser = do path <- liftAnnex $ fromRepo Git.repoPath #ifdef darwin_HOST_OS let cmd = "open" - let params = [Param path] + let p = proc cmd [path] #else #ifdef mingw32_HOST_OS + {- Changing to the directory and then opening . works around + - spaces in directory name, etc. -} let cmd = "cmd" - let params = [Param $ "/c start " ++ path] + let p = (proc cmd ["/c start ."]) { cwd = Just path } #else let cmd = "xdg-open" - let params = [Param path] + let p = proc cmd [path] #endif #endif ifM (liftIO $ inPath cmd) ( do let run = void $ liftIO $ forkIO $ void $ - boolSystem cmd params + createProcess p run #ifdef mingw32_HOST_OS {- On windows, if the file browser is not diff --git a/Assistant/WebApp/Types.hs b/Assistant/WebApp/Types.hs index cc4518018c..974ec28ac3 100644 --- a/Assistant/WebApp/Types.hs +++ b/Assistant/WebApp/Types.hs @@ -154,9 +154,11 @@ data RemovableDrive = RemovableDrive data RepoKey = RepoKey KeyId | NoRepoKey deriving (Read, Show, Eq, Ord) +#if ! MIN_VERSION_path_pieces(0,1,4) instance PathPiece Bool where toPathPiece = pack . show fromPathPiece = readish . unpack +#endif instance PathPiece RemovableDrive where toPathPiece = pack . show diff --git a/Backend/Hash.hs b/Backend/Hash.hs index 41368a5bba..3ff496271a 100644 --- a/Backend/Hash.hs +++ b/Backend/Hash.hs @@ -44,6 +44,7 @@ genBackend hash = Just Backend , getKey = keyValue hash , fsckKey = Just $ checkKeyChecksum hash , canUpgradeKey = Just needsUpgrade + , fastMigrate = Just trivialMigrate } genBackendE :: Hash -> Maybe Backend @@ -129,6 +130,15 @@ needsUpgrade :: Key -> Bool needsUpgrade key = "\\" `isPrefixOf` keyHash key || any (not . validExtension) (takeExtensions $ keyName key) +{- Fast migration from hashE to hash backend. (Optimisation) -} +trivialMigrate :: Key -> Backend -> Maybe Key +trivialMigrate oldkey newbackend + | keyBackendName oldkey == name newbackend ++ "E" = Just $ oldkey + { keyName = keyHash oldkey + , keyBackendName = name newbackend + } + | otherwise = Nothing + hashFile :: Hash -> FilePath -> Integer -> Annex String hashFile hash file filesize = liftIO $ go hash where diff --git a/Backend/URL.hs b/Backend/URL.hs index a8161c98d0..4233c56bc0 100644 --- a/Backend/URL.hs +++ b/Backend/URL.hs @@ -24,6 +24,7 @@ backend = Backend , getKey = const $ return Nothing , fsckKey = Nothing , canUpgradeKey = Nothing + , fastMigrate = Nothing } {- Every unique url has a corresponding key. -} diff --git a/Backend/WORM.hs b/Backend/WORM.hs index 60db42f561..cc71238505 100644 --- a/Backend/WORM.hs +++ b/Backend/WORM.hs @@ -22,6 +22,7 @@ backend = Backend , getKey = keyValue , fsckKey = Nothing , canUpgradeKey = Nothing + , fastMigrate = Nothing } {- The key includes the file size, modification time, and the diff --git a/Build/BuildVersion.hs b/Build/BuildVersion.hs new file mode 100644 index 0000000000..0093f5b5b1 --- /dev/null +++ b/Build/BuildVersion.hs @@ -0,0 +1,6 @@ +{- Outputs the version of git-annex that was built, for use by + - autobuilders. Note that this includes the git rev. -} + +import Build.Version + +main = putStr =<< getVersion diff --git a/Build/Configure.hs b/Build/Configure.hs index 116a44215f..d5176bdf5d 100644 --- a/Build/Configure.hs +++ b/Build/Configure.hs @@ -17,7 +17,7 @@ import qualified Git.Version tests :: [TestCase] tests = - [ TestCase "version" getVersion + [ TestCase "version" (Config "packageversion" . StringConfig <$> getVersion) , TestCase "UPGRADE_LOCATION" getUpgradeLocation , TestCase "git" $ requireCmd "git" "git --version >/dev/null" , TestCase "git version" getGitVersion @@ -60,7 +60,7 @@ shaTestCases l = map make l Config key . MaybeStringConfig <$> search (shacmds n) where key = "sha" ++ show n - search [] = return Nothing + search [] = return Nothing search (c:cmds) = do sha <- externalSHA c n "/dev/null" if sha == Right knowngood diff --git a/Build/DistributionUpdate.hs b/Build/DistributionUpdate.hs index dd3cce0abe..3899f08588 100644 --- a/Build/DistributionUpdate.hs +++ b/Build/DistributionUpdate.hs @@ -1,6 +1,9 @@ -{- Builds distributon info files for each git-annex release in a directory - - tree, which must itself be part of a git-annex repository. Only files - - that are present have their info file created. +{- Downloads git-annex autobuilds and installs them into the git-annex + - repository in ~/lib/downloads that is used to distribute git-annex + - releases. + - + - Generates info files, containing the version (of the corresponding file + - from the autobuild). - - Also gpg signs the files. -} @@ -9,25 +12,87 @@ import Common.Annex import Types.Distribution import Build.Version import Utility.UserInfo -import Utility.Path +import Utility.Url import qualified Git.Construct import qualified Annex import Annex.Content import Backend import Git.Command +import Data.Default import Data.Time.Clock +import Data.Char -- git-annex distribution signing key (for Joey Hess) signingKey :: String signingKey = "89C809CB" -main = do - state <- Annex.new =<< Git.Construct.fromPath =<< getRepoDir - Annex.eval state makeinfos +-- URL to an autobuilt git-annex file, and the place to install +-- it in the repository. +autobuilds :: [(URLString, FilePath)] +autobuilds = + (map linuxarch ["i386", "amd64", "armel"]) ++ + (map androidversion ["4.0", "4.3"]) ++ + [ (autobuild "x86_64-apple-mavericks/git-annex.dmg", "git-annex/OSX/current/10.9_Mavericks/git-annex.dmg") + , (autobuild "windows/git-annex-installer.exe", "git-annex/windows/current/git-annex-installer.exe") + ] + where + linuxarch a = + ( autobuild (a ++ "/git-annex-standalone-" ++ a ++ ".tar.gz") + , "git-annex/linux/current/git-annex-standalone-" ++ a ++ ".tar.gz" + ) + androidversion v = + ( autobuild ("android/" ++ v ++ "/git-annex.apk") + , "git-annex/android/current/" ++ v ++ "/git-annex.apk" + ) + autobuild f = "https://downloads.kitenet.net/git-annex/autobuild/" ++ f -makeinfos :: Annex () -makeinfos = do +main :: IO () +main = do + repodir <- getRepoDir + updated <- catMaybes <$> mapM (getbuild repodir) autobuilds + state <- Annex.new =<< Git.Construct.fromPath repodir + Annex.eval state (makeinfos updated) + +-- Download a build from the autobuilder, and return its version. +-- It's very important that the version matches the build, otherwise +-- auto-upgrades can loop reatedly. So, check build-version before +-- and after downloading the file. +getbuild :: FilePath -> (URLString, FilePath) -> IO (Maybe (FilePath, Version)) +getbuild repodir (url, f) = do + bv1 <- getbv + let dest = repodir f + let tmp = dest ++ ".tmp" + nukeFile tmp + createDirectoryIfMissing True (parentDir dest) + let oops s = do + nukeFile tmp + putStrLn $ "*** " ++ s + return Nothing + ifM (download url tmp def) + ( do + bv2 <- getbv + case bv2 of + Nothing -> oops $ "no build-version file for " ++ url + (Just v) + | bv2 == bv1 -> do + nukeFile dest + renameFile tmp dest + -- remove git rev part of version + let v' = takeWhile (/= '-') v + return $ Just (f, v') + | otherwise -> oops $ "build version changed while downloading " ++ url ++ " " ++ show (bv1, bv2) + , oops $ "failed to download " ++ url + ) + where + bvurl = takeDirectory url ++ "/build-version" + getbv = do + bv <- catchDefaultIO "" $ readProcess "curl" ["--silent", bvurl] + return $ if null bv || any (not . versionchar) bv then Nothing else Just bv + versionchar c = isAlphaNum c || c == '.' || c == '-' + +makeinfos :: [(FilePath, Version)] -> Annex () +makeinfos updated = do version <- liftIO getChangelogVersion void $ inRepo $ runBool [ Param "commit" @@ -37,25 +102,24 @@ makeinfos = do ] basedir <- liftIO getRepoDir now <- liftIO getCurrentTime - liftIO $ putStrLn $ "building info files for version " ++ version ++ " in " ++ basedir - fs <- liftIO $ dirContentsRecursiveSkipping (const False) True (basedir "git-annex") - forM_ fs $ \f -> do - v <- lookupFile f + liftIO $ putStrLn $ "building info files in " ++ basedir + forM_ updated $ \(f, bv) -> do + v <- lookupFile (basedir f) case v of Nothing -> noop Just k -> whenM (inAnnex k) $ do liftIO $ putStrLn f - let infofile = f ++ ".info" + let infofile = basedir f ++ ".info" liftIO $ writeFile infofile $ show $ GitAnnexDistribution - { distributionUrl = mkUrl basedir f + { distributionUrl = mkUrl f , distributionKey = k - , distributionVersion = version + , distributionVersion = bv , distributionReleasedate = now , distributionUrgentUpgrade = Nothing } void $ inRepo $ runBool [Param "add", File infofile] signFile infofile - signFile f + signFile (basedir f) void $ inRepo $ runBool [ Param "commit" , Param "-m" @@ -70,7 +134,7 @@ makeinfos = do , Params "sync" ] - {- Check for out of date info files. -} + -- Check for out of date info files. infos <- liftIO $ filter (".info" `isSuffixOf`) <$> dirContentsRecursive (basedir "git-annex") ds <- liftIO $ forM infos (readish <$$> readFile) @@ -88,8 +152,8 @@ getRepoDir = do home <- liftIO myHomeDir return $ home "lib" "downloads" -mkUrl :: FilePath -> FilePath -> String -mkUrl basedir f = "https://downloads.kitenet.net/" ++ relPathDirToFile basedir f +mkUrl :: FilePath -> String +mkUrl f = "https://downloads.kitenet.net/" ++ f signFile :: FilePath -> Annex () signFile f = do diff --git a/Build/EvilLinker.hs b/Build/EvilLinker.hs index 1b57ba959b..cf0f771e53 100644 --- a/Build/EvilLinker.hs +++ b/Build/EvilLinker.hs @@ -20,7 +20,7 @@ import Data.Maybe import Data.List import Utility.Monad -import Utility.Process +import Utility.Process hiding (env) import Utility.Env data CmdParams = CmdParams diff --git a/Build/NullSoftInstaller.hs b/Build/NullSoftInstaller.hs index b3d323ce23..b8fc826058 100644 --- a/Build/NullSoftInstaller.hs +++ b/Build/NullSoftInstaller.hs @@ -37,13 +37,16 @@ main = do mustSucceed "ln" [File "dist/build/git-annex/git-annex.exe", File gitannex] let license = tmpdir licensefile mustSucceed "sh" [Param "-c", Param $ "zcat standalone/licences.gz > '" ++ license ++ "'"] - extrafiles <- forM (cygwinPrograms ++ cygwinDlls) $ \f -> do + extrabins <- forM (cygwinPrograms ++ cygwinDlls) $ \f -> do p <- searchPath f when (isNothing p) $ print ("unable to find in PATH", f) return p - writeFile nsifile $ makeInstaller gitannex license $ - catMaybes extrafiles + webappscript <- vbsLauncher tmpdir "git-annex-webapp" "git-annex webapp" + autostartscript <- vbsLauncher tmpdir "git-annex-autostart" "git annex assistant --autostart" + writeFile nsifile $ makeInstaller gitannex license + (catMaybes extrabins) + [ webappscript, autostartscript ] mustSucceed "makensis" [File nsifile] removeFile nsifile -- left behind if makensis fails where @@ -54,6 +57,17 @@ main = do True -> return () False -> error $ cmd ++ " failed" +{- Generates a .vbs launcher which runs a command without any visible DOS + - box. -} +vbsLauncher :: FilePath -> String -> String -> IO String +vbsLauncher tmpdir basename cmd = do + let f = tmpdir basename ++ ".vbs" + writeFile f $ unlines + [ "Set objshell=CreateObject(\"Wscript.Shell\")" + , "objShell.Run(\"" ++ cmd ++ "\"), 0, False" + ] + return f + gitannexprogram :: FilePath gitannexprogram = "git-annex.exe" @@ -67,11 +81,14 @@ uninstaller :: FilePath uninstaller = "git-annex-uninstall.exe" gitInstallDir :: Exp FilePath -gitInstallDir = fromString "$PROGRAMFILES\\Git\\bin" +gitInstallDir = fromString "$PROGRAMFILES\\Git" startMenuItem :: Exp FilePath startMenuItem = "$SMPROGRAMS/git-annex.lnk" +autoStartItem :: Exp FilePath +autoStartItem = "$SMSTARTUP/git-annex-autostart.lnk" + needGit :: Exp String needGit = strConcat [ fromString "You need git installed to use git-annex. Looking at " @@ -81,8 +98,8 @@ needGit = strConcat , fromString "You can install git from http:////git-scm.com//" ] -makeInstaller :: FilePath -> FilePath -> [FilePath] -> String -makeInstaller gitannex license extrafiles = nsis $ do +makeInstaller :: FilePath -> FilePath -> [FilePath] -> [FilePath] -> String +makeInstaller gitannex license extrabins launchers = nsis $ do name "git-annex" outFile $ str installer {- Installing into the same directory as git avoids needing to modify @@ -101,30 +118,46 @@ makeInstaller gitannex license extrafiles = nsis $ do -- Start menu shortcut Development.NSIS.createDirectory "$SMPROGRAMS" createShortcut startMenuItem - [ Target "$INSTDIR/git-annex.exe" - , Parameters "webapp" - , IconFile "$INSTDIR/git-annex.exe" + [ Target "wscript.exe" + , Parameters "\"$INSTDIR/git-annex-webapp.vbs\"" + , StartOptions "SW_SHOWNORMAL" + , IconFile "$INSTDIR/cmd/git-annex.exe" , IconIndex 2 - , StartOptions "SW_SHOWMINIMIZED" , KeyboardShortcut "ALT|CONTROL|a" , Description "git-annex webapp" ] - -- Groups of files to install - section "main" [] $ do - setOutPath "$INSTDIR" + createShortcut autoStartItem + [ Target "wscript.exe" + , Parameters "\"$INSTDIR/git-annex-autostart.vbs\"" + , StartOptions "SW_SHOWNORMAL" + , IconFile "$INSTDIR/cmd/git-annex.exe" + , IconIndex 2 + , Description "git-annex autostart" + ] + section "bins" [] $ do + setOutPath "$INSTDIR\\bin" + mapM_ addfile extrabins + section "cmd" [] $ do + setOutPath "$INSTDIR\\cmd" addfile gitannex + section "meta" [] $ do + setOutPath "$INSTDIR" addfile license - mapM_ addfile extrafiles + mapM_ addfile launchers writeUninstaller $ str uninstaller uninstall $ do delete [RebootOK] $ startMenuItem - mapM_ (\f -> delete [RebootOK] $ fromString $ "$INSTDIR/" ++ f) $ - [ gitannexprogram - , licensefile + delete [RebootOK] $ autoStartItem + removefilesFrom "$INSTDIR/bin" extrabins + removefilesFrom "$INSTDIR/cmd" [gitannex] + removefilesFrom "$INSTDIR" $ + launchers ++ + [ license , uninstaller - ] ++ cygwinPrograms ++ cygwinDlls + ] where addfile f = file [] (str f) + removefilesFrom d = mapM_ (\f -> delete [RebootOK] $ fromString $ d ++ "/" ++ takeFileName f) cygwinPrograms :: [FilePath] cygwinPrograms = map (\p -> p ++ ".exe") bundledPrograms diff --git a/Build/Version.hs b/Build/Version.hs index 7ff2fe662e..da9d1bbcba 100644 --- a/Build/Version.hs +++ b/Build/Version.hs @@ -10,10 +10,11 @@ import System.Directory import Data.Char import System.Process -import Build.TestConfig import Utility.Monad import Utility.Exception +type Version = String + {- Set when making an official release. (Distribution vendors should set - this too.) -} isReleaseBuild :: IO Bool @@ -25,10 +26,10 @@ isReleaseBuild = isJust <$> catchMaybeIO (getEnv "RELEASE_BUILD") - - If git or a git repo is not available, or something goes wrong, - or this is a release build, just use the version from the changelog. -} -getVersion :: Test +getVersion :: IO Version getVersion = do changelogversion <- getChangelogVersion - version <- ifM (isReleaseBuild) + ifM (isReleaseBuild) ( return changelogversion , catchDefaultIO changelogversion $ do let major = takeWhile (/= '.') changelogversion @@ -40,9 +41,8 @@ getVersion = do then return changelogversion else return $ concat [ major, ".", autoversion ] ) - return $ Config "packageversion" (StringConfig version) -getChangelogVersion :: IO String +getChangelogVersion :: IO Version getChangelogVersion = do changelog <- readFile "debian/changelog" let verline = takeWhile (/= '\n') changelog diff --git a/CmdLine/GitAnnex.hs b/CmdLine/GitAnnex.hs index e4dd29b67f..4c9377df9d 100644 --- a/CmdLine/GitAnnex.hs +++ b/CmdLine/GitAnnex.hs @@ -54,6 +54,7 @@ import qualified Command.Whereis import qualified Command.List import qualified Command.Log import qualified Command.Merge +import qualified Command.ResolveMerge import qualified Command.Info import qualified Command.Status import qualified Command.Migrate @@ -164,6 +165,7 @@ cmds = concat , Command.List.def , Command.Log.def , Command.Merge.def + , Command.ResolveMerge.def , Command.Info.def , Command.Status.def , Command.Migrate.def diff --git a/Command/AddUrl.hs b/Command/AddUrl.hs index 7ffb869973..c21ce928f5 100644 --- a/Command/AddUrl.hs +++ b/Command/AddUrl.hs @@ -97,15 +97,17 @@ performQuvi relaxed pageurl videourl file = ifAnnexed file addurl geturl where quviurl = setDownloader pageurl QuviDownloader addurl key = next $ cleanup quviurl file key Nothing - geturl = next $ addUrlFileQuvi relaxed quviurl videourl file + geturl = next $ isJust <$> addUrlFileQuvi relaxed quviurl videourl file #endif #ifdef WITH_QUVI -addUrlFileQuvi :: Bool -> URLString -> URLString -> FilePath -> Annex Bool +addUrlFileQuvi :: Bool -> URLString -> URLString -> FilePath -> Annex (Maybe Key) addUrlFileQuvi relaxed quviurl videourl file = do key <- Backend.URL.fromUrl quviurl Nothing ifM (pure relaxed <||> Annex.getState Annex.fast) - ( cleanup quviurl file key Nothing + ( do + cleanup' quviurl file key Nothing + return (Just key) , do {- Get the size, and use that to check - disk space. However, the size info is not @@ -113,7 +115,7 @@ addUrlFileQuvi relaxed quviurl videourl file = do - might change and we want to be able to download - it later. -} sizedkey <- addSizeUrlKey videourl key - prepGetViaTmpChecked sizedkey $ do + prepGetViaTmpChecked sizedkey Nothing $ do tmp <- fromRepo $ gitAnnexTmpObjectLocation key showOutput ok <- Transfer.notifyTransfer Transfer.Download (Just file) $ @@ -121,15 +123,17 @@ addUrlFileQuvi relaxed quviurl videourl file = do liftIO $ createDirectoryIfMissing True (parentDir tmp) downloadUrl [videourl] tmp if ok - then cleanup quviurl file key (Just tmp) - else return False + then do + cleanup' quviurl file key (Just tmp) + return (Just key) + else return Nothing ) #endif perform :: Bool -> URLString -> FilePath -> CommandPerform perform relaxed url file = ifAnnexed file addurl geturl where - geturl = next $ addUrlFile relaxed url file + geturl = next $ isJust <$> addUrlFile relaxed url file addurl key | relaxed = do setUrlPresent key url @@ -149,7 +153,7 @@ perform relaxed url file = ifAnnexed file addurl geturl stop ) -addUrlFile :: Bool -> URLString -> FilePath -> Annex Bool +addUrlFile :: Bool -> URLString -> FilePath -> Annex (Maybe Key) addUrlFile relaxed url file = do liftIO $ createDirectoryIfMissing True (parentDir file) ifM (Annex.getState Annex.fast <||> pure relaxed) @@ -159,13 +163,13 @@ addUrlFile relaxed url file = do download url file ) -download :: URLString -> FilePath -> Annex Bool +download :: URLString -> FilePath -> Annex (Maybe Key) download url file = do {- Generate a dummy key to use for this download, before we can - examine the file and find its real key. This allows resuming - downloads, as the dummy key for a given url is stable. -} dummykey <- addSizeUrlKey url =<< Backend.URL.fromUrl url Nothing - prepGetViaTmpChecked dummykey $ do + prepGetViaTmpChecked dummykey Nothing $ do tmp <- fromRepo $ gitAnnexTmpObjectLocation dummykey showOutput ifM (runtransfer dummykey tmp) @@ -178,9 +182,11 @@ download url file = do } k <- genKey source backend case k of - Nothing -> return False - Just (key, _) -> cleanup url file key (Just tmp) - , return False + Nothing -> return Nothing + Just (key, _) -> do + cleanup' url file key (Just tmp) + return (Just key) + , return Nothing ) where runtransfer dummykey tmp = Transfer.notifyTransfer Transfer.Download (Just file) $ @@ -200,6 +206,11 @@ addSizeUrlKey url key = do cleanup :: URLString -> FilePath -> Key -> Maybe FilePath -> Annex Bool cleanup url file key mtmp = do + cleanup' url file key mtmp + return True + +cleanup' :: URLString -> FilePath -> Key -> Maybe FilePath -> Annex () +cleanup' url file key mtmp = do when (isJust mtmp) $ logStatus key InfoPresent setUrlPresent key url @@ -210,9 +221,8 @@ cleanup url file key mtmp = do - must already exist, so flush the queue. -} Annex.Queue.flush maybe noop (moveAnnex key) mtmp - return True -nodownload :: Bool -> URLString -> FilePath -> Annex Bool +nodownload :: Bool -> URLString -> FilePath -> Annex (Maybe Key) nodownload relaxed url file = do (exists, size) <- if relaxed then pure (True, Nothing) @@ -220,10 +230,11 @@ nodownload relaxed url file = do if exists then do key <- Backend.URL.fromUrl url size - cleanup url file key Nothing + cleanup' url file key Nothing + return (Just key) else do warning $ "unable to access url: " ++ url - return False + return Nothing url2file :: URI -> Maybe Int -> Int -> FilePath url2file url pathdepth pathmax = case pathdepth of diff --git a/Command/Assistant.hs b/Command/Assistant.hs index 496df1dd2e..8316a9948c 100644 --- a/Command/Assistant.hs +++ b/Command/Assistant.hs @@ -14,6 +14,7 @@ import Annex.Init import Config.Files import qualified Build.SysConfig import Utility.HumanTime +import Assistant.Install import System.Environment @@ -50,6 +51,7 @@ start foreground stopdaemon autostart startdelay liftIO $ autoStart startdelay stop | otherwise = do + liftIO ensureInstalled ensureInitialized Command.Watch.start True foreground stopdaemon startdelay diff --git a/Command/Direct.hs b/Command/Direct.hs index 9727549b63..a5165a4a2a 100644 --- a/Command/Direct.hs +++ b/Command/Direct.hs @@ -12,8 +12,8 @@ import Control.Exception.Extensible import Common.Annex import Command import qualified Git -import qualified Git.Command import qualified Git.LsFiles +import qualified Git.Branch import Config import Annex.Direct import Annex.Exception @@ -33,9 +33,8 @@ perform :: CommandPerform perform = do showStart "commit" "" showOutput - _ <- inRepo $ Git.Command.runBool - [ Param "commit" - , Param "-a" + _ <- inRepo $ Git.Branch.commitCommand Git.Branch.ManualCommit + [ Param "-a" , Param "-m" , Param "commit before switching to direct mode" ] diff --git a/Command/ImportFeed.hs b/Command/ImportFeed.hs index 29f2fb148c..e78588518b 100644 --- a/Command/ImportFeed.hs +++ b/Command/ImportFeed.hs @@ -33,6 +33,9 @@ import Annex.Quvi import qualified Utility.Quvi as Quvi import Command.AddUrl (addUrlFileQuvi) #endif +import Types.MetaData +import Logs.MetaData +import Annex.MetaData def :: [Command] def = [notBareRepo $ withOptions [templateOption, relaxedOption] $ @@ -165,12 +168,14 @@ performDownload relaxed cache todownload = case location todownload of Nothing -> return True Just f -> do showStart "addurl" f - ok <- getter f - if ok - then do + mk <- getter f + case mk of + Just key -> do + whenM (annexGenMetaData <$> Annex.getGitConfig) $ + addMetaData key $ extractMetaData todownload showEndOk return True - else do + Nothing -> do showEndFail checkFeedBroken (feedurl todownload) @@ -198,32 +203,19 @@ performDownload relaxed cache todownload = case location todownload of ( return Nothing , tryanother ) - + defaultTemplate :: String defaultTemplate = "${feedtitle}/${itemtitle}${extension}" {- Generates a filename to use for a feed item by filling out the template. - The filename may not be unique. -} feedFile :: Utility.Format.Format -> ToDownload -> String -> FilePath -feedFile tmpl i extension = Utility.Format.format tmpl $ M.fromList - [ field "feedtitle" $ getFeedTitle $ feed i - , fieldMaybe "itemtitle" $ getItemTitle $ item i - , fieldMaybe "feedauthor" $ getFeedAuthor $ feed i - , fieldMaybe "itemauthor" $ getItemAuthor $ item i - , fieldMaybe "itemsummary" $ getItemSummary $ item i - , fieldMaybe "itemdescription" $ getItemDescription $ item i - , fieldMaybe "itemrights" $ getItemRights $ item i - , fieldMaybe "itemid" $ snd <$> getItemId (item i) - , fieldMaybe "itempubdate" $ pubdate $ item i - , ("extension", sanitizeFilePath extension) - ] +feedFile tmpl i extension = Utility.Format.format tmpl $ + M.map sanitizeFilePath $ M.fromList $ extractFields i ++ + [ ("extension", extension) + , extractField "itempubdate" [pubdate $ item i] + ] where - field k v = - 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 - #if MIN_VERSION_feed(0,3,9) pubdate itm = case getItemPublishDate itm :: Maybe (Maybe UTCTime) of Just (Just d) -> Just $ @@ -234,11 +226,46 @@ feedFile tmpl i extension = Utility.Format.format tmpl $ M.fromList pubdate _ = Nothing #endif +extractMetaData :: ToDownload -> MetaData +extractMetaData i = case getItemPublishDate (item i) :: Maybe (Maybe UTCTime) of + Just (Just d) -> unionMetaData meta (dateMetaData d meta) + _ -> meta + where + tometa (k, v) = (mkMetaFieldUnchecked k, S.singleton (toMetaValue v)) + meta = MetaData $ M.fromList $ map tometa $ extractFields i + +{- Extract fields from the feed and item, that are both used as metadata, + - and to generate the filename. -} +extractFields :: ToDownload -> [(String, String)] +extractFields i = map (uncurry extractField) + [ ("feedtitle", [feedtitle]) + , ("itemtitle", [itemtitle]) + , ("feedauthor", [feedauthor]) + , ("itemauthor", [itemauthor]) + , ("itemsummary", [getItemSummary $ item i]) + , ("itemdescription", [getItemDescription $ item i]) + , ("itemrights", [getItemRights $ item i]) + , ("itemid", [snd <$> getItemId (item i)]) + , ("title", [itemtitle, feedtitle]) + , ("author", [itemauthor, feedauthor]) + ] + where + feedtitle = Just $ getFeedTitle $ feed i + itemtitle = getItemTitle $ item i + feedauthor = getFeedAuthor $ feed i + itemauthor = getItemAuthor $ item i + +extractField :: String -> [Maybe String] -> (String, String) +extractField k [] = (k, "none") +extractField k (Just v:_) + | not (null v) = (k, v) +extractField k (_:rest) = extractField k rest + {- Called when there is a problem with a feed. - Throws an error if the feed is broken, otherwise shows a warning. -} feedProblem :: URLString -> String -> Annex () feedProblem url message = ifM (checkFeedBroken url) - ( error $ message ++ " (having repeated problems with this feed!)" + ( error $ message ++ " (having repeated problems with feed: " ++ url ++ ")" , warning $ "warning: " ++ message ) diff --git a/Command/Indirect.hs b/Command/Indirect.hs index acf40c974e..4ce4c2c383 100644 --- a/Command/Indirect.hs +++ b/Command/Indirect.hs @@ -12,7 +12,7 @@ import Control.Exception.Extensible import Common.Annex import Command import qualified Git -import qualified Git.Command +import qualified Git.Branch import qualified Git.LsFiles import Git.FileMode import Config @@ -49,9 +49,8 @@ perform = do showStart "commit" "" whenM stageDirect $ do showOutput - void $ inRepo $ Git.Command.runBool - [ Param "commit" - , Param "-m" + void $ inRepo $ Git.Branch.commitCommand Git.Branch.ManualCommit + [ Param "-m" , Param "commit before switching to indirect mode" ] showEndOk diff --git a/Command/Migrate.hs b/Command/Migrate.hs index 18e6e0748f..cea9e9426d 100644 --- a/Command/Migrate.hs +++ b/Command/Migrate.hs @@ -11,7 +11,7 @@ import Common.Annex import Command import Backend import qualified Types.Key -import qualified Types.Backend +import Types.Backend (canUpgradeKey, fastMigrate) import Types.KeySource import Annex.Content import qualified Command.ReKey @@ -51,8 +51,7 @@ start file key = do upgradableKey :: Backend -> Key -> Bool upgradableKey backend key = isNothing (Types.Key.keySize key) || backendupgradable where - backendupgradable = maybe False (\a -> a key) - (Types.Backend.canUpgradeKey backend) + backendupgradable = maybe False (\a -> a key) (canUpgradeKey backend) {- Store the old backend's key in the new backend - The old backend's key is not dropped from it, because there may @@ -67,15 +66,22 @@ perform :: FilePath -> Key -> Backend -> Backend -> CommandPerform perform file oldkey oldbackend newbackend = go =<< genkey where go Nothing = stop - go (Just newkey) = stopUnless checkcontent $ finish newkey + go (Just (newkey, knowngoodcontent)) + | knowngoodcontent = finish newkey + | otherwise = stopUnless checkcontent $ finish newkey checkcontent = Command.Fsck.checkBackend oldbackend oldkey $ Just file finish newkey = stopUnless (Command.ReKey.linkKey oldkey newkey) $ next $ Command.ReKey.cleanup file oldkey newkey - genkey = do - content <- calcRepo $ gitAnnexLocation oldkey - let source = KeySource - { keyFilename = file - , contentLocation = content - , inodeCache = Nothing - } - liftM fst <$> genKey source (Just newbackend) + genkey = case maybe Nothing (\fm -> fm oldkey newbackend) (fastMigrate oldbackend) of + Just newkey -> return $ Just (newkey, True) + Nothing -> do + content <- calcRepo $ gitAnnexLocation oldkey + let source = KeySource + { keyFilename = file + , contentLocation = content + , inodeCache = Nothing + } + v <- genKey source (Just newbackend) + return $ case v of + Just (newkey, _) -> Just (newkey, False) + _ -> Nothing diff --git a/Command/ResolveMerge.hs b/Command/ResolveMerge.hs new file mode 100644 index 0000000000..a50e2aa9d2 --- /dev/null +++ b/Command/ResolveMerge.hs @@ -0,0 +1,40 @@ +{- git-annex command + - + - Copyright 2014 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Command.ResolveMerge where + +import Common.Annex +import Command +import qualified Git +import Git.Sha +import qualified Git.Branch +import Annex.AutoMerge + +def :: [Command] +def = [command "resolvemerge" paramNothing seek SectionPlumbing + "resolve merge conflicts"] + +seek :: CommandSeek +seek ps = withNothing start ps + +start :: CommandStart +start = do + showStart "resolvemerge" "" + us <- fromMaybe nobranch <$> inRepo Git.Branch.current + d <- fromRepo Git.localGitDir + let merge_head = d "MERGE_HEAD" + them <- fromMaybe (error nomergehead) . extractSha + <$> liftIO (readFile merge_head) + ifM (resolveMerge (Just us) them) + ( do + void $ commitResolvedMerge Git.Branch.ManualCommit + next $ next $ return True + , error "Merge conflict could not be automatically resolved." + ) + where + nobranch = error "No branch is currently checked out." + nomergehead = error "No SHA found in .git/merge_head" diff --git a/Command/Sync.hs b/Command/Sync.hs index a5d6d46f1d..50c6fbe696 100644 --- a/Command/Sync.hs +++ b/Command/Sync.hs @@ -127,14 +127,12 @@ commit = next $ next $ ifM isDirect showStart "commit" "" void stageDirect void preCommitDirect - commitStaged commitmessage + commitStaged Git.Branch.ManualCommit commitmessage , do showStart "commit" "" Annex.Branch.commit "update" - -- Commit will fail when the tree is clean, so ignore failure. - _ <- inRepo $ tryIO . Git.Command.runQuiet - [ Param "commit" - , Param "-a" + inRepo $ Git.Branch.commitQuiet Git.Branch.ManualCommit + [ Param "-a" , Param "-m" , Param commitmessage ] @@ -143,14 +141,14 @@ commit = next $ next $ ifM isDirect where commitmessage = "git-annex automatic sync" -commitStaged :: String -> Annex Bool -commitStaged commitmessage = go =<< inRepo Git.Branch.currentUnsafe +commitStaged :: Git.Branch.CommitMode -> String -> Annex Bool +commitStaged commitmode commitmessage = go =<< inRepo Git.Branch.currentUnsafe where go Nothing = return False go (Just branch) = do runAnnexHook preCommitAnnexHook parent <- inRepo $ Git.Ref.sha branch - void $ inRepo $ Git.Branch.commit False commitmessage branch + void $ inRepo $ Git.Branch.commit commitmode False commitmessage branch (maybeToList parent) return True @@ -169,11 +167,16 @@ mergeLocal (Just branch) = go =<< needmerge go False = stop go True = do showStart "merge" $ Git.Ref.describe syncbranch - next $ next $ autoMergeFrom syncbranch (Just branch) + next $ next $ autoMergeFrom syncbranch (Just branch) Git.Branch.ManualCommit pushLocal :: Maybe Git.Ref -> CommandStart -pushLocal Nothing = stop -pushLocal (Just branch) = do +pushLocal b = do + updateSyncBranch b + stop + +updateSyncBranch :: Maybe Git.Ref -> Annex () +updateSyncBranch Nothing = noop +updateSyncBranch (Just branch) = do -- Update the sync branch to match the new state of the branch inRepo $ updateBranch $ syncBranch branch -- In direct mode, we're operating on some special direct mode @@ -181,7 +184,6 @@ pushLocal (Just branch) = do -- branch. whenM isDirect $ inRepo $ updateBranch $ fromDirectBranch branch - stop updateBranch :: Git.Ref -> Git.Repo -> IO () updateBranch syncbranch g = @@ -217,7 +219,7 @@ mergeRemote remote b = case b of Just thisbranch -> and <$> (mapM (merge (Just thisbranch)) =<< tomerge (branchlist b)) where - merge thisbranch = flip autoMergeFrom thisbranch . remoteBranch remote + merge thisbranch br = autoMergeFrom (remoteBranch remote br) thisbranch Git.Branch.ManualCommit tomerge = filterM (changed remote) branchlist Nothing = [] branchlist (Just branch) = [branch, syncBranch branch] diff --git a/Command/Unannex.hs b/Command/Unannex.hs index daa14ce855..9cb88564cc 100644 --- a/Command/Unannex.hs +++ b/Command/Unannex.hs @@ -16,6 +16,7 @@ import qualified Annex import Annex.Content import Annex.Content.Direct import qualified Git.Command +import qualified Git.Branch import qualified Git.Ref import qualified Git.DiffTree as DiffTree import Utility.CopyFile @@ -45,9 +46,8 @@ wrapUnannex a = ifM isDirect ) ) where - commit = inRepo $ Git.Command.run - [ Param "commit" - , Param "-q" + commit = inRepo $ Git.Branch.commitCommand Git.Branch.ManualCommit + [ Param "-q" , Param "--allow-empty" , Param "--no-verify" , Param "-m", Param "content removed from git annex" diff --git a/Command/Uninit.hs b/Command/Uninit.hs index 76022df26f..4433de6d01 100644 --- a/Command/Uninit.hs +++ b/Command/Uninit.hs @@ -16,6 +16,10 @@ import qualified Command.Unannex import qualified Annex.Branch import Annex.Content import Annex.Init +import Utility.FileMode + +import System.IO.HVFS +import System.IO.HVFS.Utils def :: [Command] def = [addCheck check $ command "uninit" paramPaths seek @@ -56,6 +60,7 @@ finish = do annexdir <- fromRepo gitAnnexDir annexobjectdir <- fromRepo gitAnnexObjectDir leftovers <- removeUnannexed =<< getKeysPresent InAnnex + liftIO $ prepareRemoveAnnexDir annexdir if null leftovers then liftIO $ removeDirectoryRecursive annexdir else error $ unlines @@ -82,6 +87,12 @@ finish = do [Param "branch", Param "-D", Param $ Git.fromRef Annex.Branch.name] liftIO exitSuccess +{- Turn on write bits in all remaining files in the annex directory, in + - preparation for removal. -} +prepareRemoveAnnexDir :: FilePath -> IO () +prepareRemoveAnnexDir annexdir = + recurseDir SystemFS annexdir >>= mapM_ (void . tryIO . allowWrite) + {- Keys that were moved out of the annex have a hard link still in the - annex, with > 1 link count, and those can be removed. - diff --git a/Command/Unused.hs b/Command/Unused.hs index 6737109f6f..bf98e53bcd 100644 --- a/Command/Unused.hs +++ b/Command/Unused.hs @@ -10,9 +10,6 @@ module Command.Unused where import qualified Data.Set as S -import Data.BloomFilter -import Data.BloomFilter.Easy -import Data.BloomFilter.Hash import Control.Monad.ST import qualified Data.Map as M @@ -36,6 +33,7 @@ import Annex.CatFile import Types.Key import Git.FilePath import Logs.View (is_branchView) +import Utility.Bloom def :: [Command] def = [withOptions [unusedFromOption] $ command "unused" paramNothing seek diff --git a/Command/Vicfg.hs b/Command/Vicfg.hs index d7d5229da2..5ec6bbf723 100644 --- a/Command/Vicfg.hs +++ b/Command/Vicfg.hs @@ -139,9 +139,11 @@ genCfg cfg descs = unlines $ intercalate [""] grouplist = unwords $ map fromStandardGroup [minBound..] preferredcontent = settings cfg descs cfgPreferredContentMap - [ com "Repository preferred contents" ] + [ com "Repository preferred contents" + , com "(Set to \"standard\" to use a repository's group's preferred contents)" + ] (\(s, u) -> line "wanted" u s) - (\u -> line "wanted" u "standard") + (\u -> line "wanted" u "") requiredcontent = settings cfg descs cfgRequiredContentMap [ com "Repository required contents" ] @@ -153,7 +155,7 @@ genCfg cfg descs = unlines $ intercalate [""] , com "(Used by repositories with \"groupwanted\" in their preferred contents)" ] (\(s, g) -> gline g s) - (\g -> gline g "standard") + (\g -> gline g "") where gline g value = [ unwords ["groupwanted", g, "=", value] ] allgroups = S.unions $ stdgroups : M.elems (cfgGroupMap cfg) diff --git a/Git/Branch.hs b/Git/Branch.hs index 7c7e44d758..0b7d888b8d 100644 --- a/Git/Branch.hs +++ b/Git/Branch.hs @@ -14,6 +14,7 @@ import Git import Git.Sha import Git.Command import qualified Git.Ref +import qualified Git.BuildVersion {- The currently checked out branch. - @@ -103,6 +104,31 @@ fastForward branch (first:rest) repo = (False, True) -> findbest c rs -- worse (False, False) -> findbest c rs -- same +{- The user may have set commit.gpgsign, indending all their manual + - commits to be signed. But signing automatic/background commits could + - easily lead to unwanted gpg prompts or failures. + -} +data CommitMode = ManualCommit | AutomaticCommit + deriving (Eq) + +applyCommitMode :: CommitMode -> [CommandParam] -> [CommandParam] +applyCommitMode commitmode ps + | commitmode == AutomaticCommit && not (Git.BuildVersion.older "2.0.0") = + Param "--no-gpg-sign" : ps + | otherwise = ps + +{- Commit via the usual git command. -} +commitCommand :: CommitMode -> [CommandParam] -> Repo -> IO Bool +commitCommand = commitCommand' runBool + +{- Commit will fail when the tree is clean. This suppresses that error. -} +commitQuiet :: CommitMode -> [CommandParam] -> Repo -> IO () +commitQuiet commitmode ps = void . tryIO . commitCommand' runQuiet commitmode ps + +commitCommand' :: ([CommandParam] -> Repo -> IO a) -> CommitMode -> [CommandParam] -> Repo -> IO a +commitCommand' runner commitmode ps = runner $ + Param "commit" : applyCommitMode commitmode ps + {- Commits the index into the specified branch (or other ref), - with the specified parent refs, and returns the committed sha. - @@ -112,30 +138,31 @@ fastForward branch (first:rest) repo = - Unlike git-commit, does not run any hooks, or examine the work tree - in any way. -} -commit :: Bool -> String -> Branch -> [Ref] -> Repo -> IO (Maybe Sha) -commit allowempty message branch parentrefs repo = do +commit :: CommitMode -> Bool -> String -> Branch -> [Ref] -> Repo -> IO (Maybe Sha) +commit commitmode allowempty message branch parentrefs repo = do tree <- getSha "write-tree" $ pipeReadStrict [Param "write-tree"] repo ifM (cancommit tree) ( do - sha <- getSha "commit-tree" $ pipeWriteRead - (map Param $ ["commit-tree", fromRef tree] ++ ps) - (Just $ flip hPutStr message) repo + sha <- getSha "commit-tree" $ + pipeWriteRead ([Param "commit-tree", Param (fromRef tree)] ++ ps) sendmsg repo update branch sha repo return $ Just sha , return Nothing ) where - ps = concatMap (\r -> ["-p", fromRef r]) parentrefs + ps = applyCommitMode commitmode $ + map Param $ concatMap (\r -> ["-p", fromRef r]) parentrefs cancommit tree | allowempty = return True | otherwise = case parentrefs of [p] -> maybe False (tree /=) <$> Git.Ref.tree p repo _ -> return True + sendmsg = Just $ flip hPutStr message -commitAlways :: String -> Branch -> [Ref] -> Repo -> IO Sha -commitAlways message branch parentrefs repo = fromJust - <$> commit True message branch parentrefs repo +commitAlways :: CommitMode -> String -> Branch -> [Ref] -> Repo -> IO Sha +commitAlways commitmode message branch parentrefs repo = fromJust + <$> commit commitmode True message branch parentrefs repo {- A leading + makes git-push force pushing a branch. -} forcePush :: String -> String diff --git a/Git/Command.hs b/Git/Command.hs index 39a3c68498..30d2dcbf90 100644 --- a/Git/Command.hs +++ b/Git/Command.hs @@ -13,7 +13,6 @@ import Common import Git import Git.Types import qualified Utility.CoProcess as CoProcess -import Utility.Batch {- Constructs a git command line operating on the specified repo. -} gitCommandLine :: [CommandParam] -> Repo -> [CommandParam] @@ -31,12 +30,6 @@ runBool :: [CommandParam] -> Repo -> IO Bool runBool params repo = assertLocal repo $ boolSystemEnv "git" (gitCommandLine params repo) (gitEnv repo) -{- Runs git in batch mode. -} -runBatch :: BatchCommandMaker -> [CommandParam] -> Repo -> IO Bool -runBatch batchmaker params repo = assertLocal repo $ do - let (cmd, params') = batchmaker ("git", gitCommandLine params repo) - boolSystemEnv cmd params' (gitEnv repo) - {- Runs git in the specified repo, throwing an error if it fails. -} run :: [CommandParam] -> Repo -> IO () run params repo = assertLocal repo $ diff --git a/Git/Command/Batch.hs b/Git/Command/Batch.hs new file mode 100644 index 0000000000..9cc1760082 --- /dev/null +++ b/Git/Command/Batch.hs @@ -0,0 +1,19 @@ +{- running batch git commands + - + - Copyright 2010-2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Git.Command.Batch where + +import Common +import Git +import Git.Command +import Utility.Batch + +{- Runs git in batch mode. -} +run :: BatchCommandMaker -> [CommandParam] -> Repo -> IO Bool +run batchmaker params repo = assertLocal repo $ do + let (cmd, params') = batchmaker ("git", gitCommandLine params repo) + boolSystemEnv cmd params' (gitEnv repo) diff --git a/Git/GCrypt.hs b/Git/GCrypt.hs index fb99cf6199..c2a5a98fe2 100644 --- a/Git/GCrypt.hs +++ b/Git/GCrypt.hs @@ -99,6 +99,9 @@ getParticiantList globalconfigrepo repo remotename = KeyIds $ parse $ firstJust remoteParticipantConfigKey :: RemoteName -> String remoteParticipantConfigKey = remoteConfigKey "gcrypt-participants" +remotePublishParticipantConfigKey :: RemoteName -> String +remotePublishParticipantConfigKey = remoteConfigKey "gcrypt-publish-participants" + remoteSigningKey :: RemoteName -> String remoteSigningKey = remoteConfigKey "gcrypt-signingkey" diff --git a/Git/Merge.hs b/Git/Merge.hs index d661db9787..12dfa7c1fc 100644 --- a/Git/Merge.hs +++ b/Git/Merge.hs @@ -11,14 +11,19 @@ import Common import Git import Git.Command import Git.BuildVersion +import Git.Branch (CommitMode(..)) {- Avoids recent git's interactive merge. -} -mergeNonInteractive :: Ref -> Repo -> IO Bool -mergeNonInteractive branch +mergeNonInteractive :: Ref -> CommitMode -> Repo -> IO Bool +mergeNonInteractive branch commitmode | older "1.7.7.6" = merge [Param $ fromRef branch] - | otherwise = merge [Param "--no-edit", Param $ fromRef branch] + | otherwise = merge $ [Param "--no-edit", Param $ fromRef branch] where - merge ps = runBool $ Param "merge" : ps + merge ps = runBool $ cp ++ [Param "merge"] ++ ps + cp + | commitmode == AutomaticCommit = + [Param "-c", Param "commit.gpgsign=false"] + | otherwise = [] {- Stage the merge into the index, but do not commit it.-} stageMerge :: Ref -> Repo -> IO Bool diff --git a/Git/Queue.hs b/Git/Queue.hs index 2ec3a2b1e2..9b87a18ea4 100644 --- a/Git/Queue.hs +++ b/Git/Queue.hs @@ -82,16 +82,16 @@ new lim = Queue 0 (fromMaybe defaultLimit lim) M.empty -} addCommand :: String -> [CommandParam] -> [FilePath] -> Queue -> Repo -> IO Queue addCommand subcommand params files q repo = - updateQueue action different (length newfiles) q repo + updateQueue action different (length files) q repo where key = actionKey action action = CommandAction { getSubcommand = subcommand , getParams = params - , getFiles = newfiles + , getFiles = allfiles } - newfiles = map File files ++ maybe [] getFiles (M.lookup key $ items q) - + allfiles = map File files ++ maybe [] getFiles (M.lookup key $ items q) + different (CommandAction { getSubcommand = s }) = s /= subcommand different _ = True diff --git a/Locations.hs b/Locations.hs index 95aba169c0..d397a97be6 100644 --- a/Locations.hs +++ b/Locations.hs @@ -42,6 +42,7 @@ module Locations ( gitAnnexJournalDir, gitAnnexJournalLock, gitAnnexPreCommitLock, + gitAnnexMergeLock, gitAnnexIndex, gitAnnexIndexStatus, gitAnnexViewIndex, @@ -262,6 +263,10 @@ gitAnnexJournalLock r = gitAnnexDir r "journal.lck" gitAnnexPreCommitLock :: Git.Repo -> FilePath gitAnnexPreCommitLock r = gitAnnexDir r "precommit.lck" +{- Lock file for direct mode merge. -} +gitAnnexMergeLock :: Git.Repo -> FilePath +gitAnnexMergeLock r = gitAnnexDir r "merge.lck" + {- .git/annex/index is used to stage changes to the git-annex branch -} gitAnnexIndex :: Git.Repo -> FilePath gitAnnexIndex r = gitAnnexDir r "index" diff --git a/Logs/MetaData.hs b/Logs/MetaData.hs index b682ca005e..250317090f 100644 --- a/Logs/MetaData.hs +++ b/Logs/MetaData.hs @@ -95,10 +95,12 @@ addMetaData k metadata = addMetaData' k metadata =<< liftIO getPOSIXTime - will tend to be generated across the different log files, and so - git will be able to pack the data more efficiently. -} addMetaData' :: Key -> MetaData -> POSIXTime -> Annex () -addMetaData' k (MetaData m) now = Annex.Branch.change (metaDataLogFile k) $ - showLog . simplifyLog - . S.insert (LogEntry now metadata) - . parseLog +addMetaData' k d@(MetaData m) now + | d == emptyMetaData = noop + | otherwise = Annex.Branch.change (metaDataLogFile k) $ + showLog . simplifyLog + . S.insert (LogEntry now metadata) + . parseLog where metadata = MetaData $ M.filterWithKey (\f _ -> not (isLastChangedField f)) m diff --git a/Makefile b/Makefile index e56cd7cdaf..5c47e94866 100644 --- a/Makefile +++ b/Makefile @@ -59,7 +59,7 @@ retest: git-annex # hothasktags chokes on some template haskell etc, so ignore errors tags: - find . | grep -v /.git/ | grep -v /tmp/ | grep -v /dist/ | grep -v /doc/ | egrep '\.hs$$' | xargs hothasktags > tags 2>/dev/null + (for f in $$(find . | grep -v /.git/ | grep -v /tmp/ | grep -v /dist/ | grep -v /doc/ | egrep '\.hs$$'); do hothasktags -c --cpp -c -traditional -c --include=dist/build/autogen/cabal_macros.h $$f; done) 2>/dev/null | sort > tags # If ikiwiki is available, build static html docs suitable for being # shipped in the software package. @@ -83,7 +83,8 @@ clean: rm -rf tmp dist git-annex $(mans) configure *.tix .hpc \ doc/.ikiwiki html dist tags Build/SysConfig.hs build-stamp \ Setup Build/InstallDesktopFile Build/EvilSplicer \ - Build/Standalone Build/OSXMkLibs Build/LinuxMkLibs Build/DistributionUpdate \ + Build/Standalone Build/OSXMkLibs Build/LinuxMkLibs \ + Build/DistributionUpdate Build/BuildVersion \ git-union-merge .tasty-rerun-log find . -name \*.o -exec rm {} \; find . -name \*.hi -exec rm {} \; @@ -255,7 +256,7 @@ hdevtools: distributionupdate: git pull cabal configure - ghc --make Build/DistributionUpdate -XPackageImports -optP-include -optPdist/build/autogen/cabal_macros.h + ghc -Wall --make Build/DistributionUpdate -XPackageImports -optP-include -optPdist/build/autogen/cabal_macros.h ./Build/DistributionUpdate .PHONY: git-annex git-union-merge git-recover-repository tags build-stamp diff --git a/Remote/GCrypt.hs b/Remote/GCrypt.hs index 60c2df73e4..b2dd6cdaf5 100644 --- a/Remote/GCrypt.hs +++ b/Remote/GCrypt.hs @@ -263,10 +263,14 @@ shellOrRsync r ashell arsync = case method of - participants, which gcrypt requires is the case, and may not be - depending on system configuration. - - - (For shared encryption, gcrypt's default behavior is used.) -} + - (For shared encryption, gcrypt's default behavior is used.) + - + - Also, sets gcrypt-publish-participants to avoid unncessary gpg + - passphrase prompts. + -} setGcryptEncryption :: RemoteConfig -> String -> Annex () setGcryptEncryption c remotename = do - let participants = ConfigKey $ Git.GCrypt.remoteParticipantConfigKey remotename + let participants = remoteconfig Git.GCrypt.remoteParticipantConfigKey case extractCipher c of Nothing -> noCrypto Just (EncryptedCipher _ _ (KeyIds { keyIds = ks})) -> do @@ -278,6 +282,10 @@ setGcryptEncryption c remotename = do (k:_) -> setConfig signingkey k Just (SharedCipher _) -> unsetConfig participants + setConfig (remoteconfig Git.GCrypt.remotePublishParticipantConfigKey) + (Git.Config.boolConfig True) + where + remoteconfig n = ConfigKey $ n remotename store :: Remote -> Remote.Rsync.RsyncOpts -> (Cipher, Key) -> Key -> MeterUpdate -> Annex Bool store r rsyncopts (cipher, enck) k p diff --git a/Remote/Git.hs b/Remote/Git.hs index 5dcd3bf152..4498ec907c 100644 --- a/Remote/Git.hs +++ b/Remote/Git.hs @@ -191,20 +191,11 @@ tryGitConfigRead r | Git.repoIsHttp r = store geturlconfig | Git.GCrypt.isEncrypted r = handlegcrypt =<< getConfigMaybe (remoteConfig r "uuid") | Git.repoIsUrl r = return r - | otherwise = store $ safely $ do - s <- Annex.new r - Annex.eval s $ do - Annex.BranchState.disableUpdate - ensureInitialized - Annex.getState Annex.repo + | otherwise = store $ liftIO $ + readlocalannexconfig `catchNonAsync` (const $ return r) where haveconfig = not . M.null . Git.config - -- Reading config can fail due to IO error or - -- for other reasons; catch all possible exceptions. - safely a = either (const $ return r) return - =<< liftIO (try a :: IO (Either SomeException Git.Repo)) - pipedconfig cmd params = do v <- Git.Config.fromPipe r cmd params case v of @@ -283,6 +274,16 @@ tryGitConfigRead r Just v -> store $ liftIO $ setUUID r $ genUUIDInNameSpace gCryptNameSpace v + {- The local repo may not yet be initialized, so try to initialize + - it if allowed. However, if that fails, still return the read + - git config. -} + readlocalannexconfig = do + s <- Annex.new r + Annex.eval s $ do + Annex.BranchState.disableUpdate + void $ tryAnnex $ ensureInitialized + Annex.getState Annex.repo + {- Checks if a given remote has the content for a key inAnnex. - If the remote cannot be accessed, or if it cannot determine - whether it has the content, returns a Left error message. diff --git a/Remote/Helper/Hooks.hs b/Remote/Helper/Hooks.hs index b7deae5770..c3ff970c62 100644 --- a/Remote/Helper/Hooks.hs +++ b/Remote/Helper/Hooks.hs @@ -15,7 +15,7 @@ import Common.Annex import Types.Remote import Types.CleanupActions import qualified Annex -import Annex.LockPool +import Annex.LockFile #ifndef mingw32_HOST_OS import Annex.Perms #else @@ -48,7 +48,7 @@ runHooks :: Remote -> Maybe String -> Maybe String -> Annex a -> Annex a runHooks r starthook stophook a = do dir <- fromRepo gitAnnexRemotesDir let lck = dir remoteid ++ ".lck" - whenM (notElem lck . M.keys <$> getPool) $ do + whenM (notElem lck . M.keys <$> getLockPool) $ do liftIO $ createDirectoryIfMissing True dir firstrun lck a @@ -63,7 +63,7 @@ runHooks r starthook stophook a = do -- of it from running the stophook. If another -- instance is shutting down right now, this -- will block waiting for its exclusive lock to clear. - lockFile lck + lockFileShared lck -- The starthook is run even if some other git-annex -- is already running, and ran it before. diff --git a/Remote/S3.hs b/Remote/S3.hs index c883e2a5b1..c30d07b8a3 100644 --- a/Remote/S3.hs +++ b/Remote/S3.hs @@ -255,20 +255,28 @@ iaMunge = (>>= munge) | isSpace c = [] | otherwise = "&" ++ show (ord c) ++ ";" +{- Generate the bucket if it does not already exist, including creating the + - UUID file within the bucket. + - + - To check if the bucket exists, ask for its location. However, some ACLs + - can allow read/write to buckets, but not querying location, so first + - check if the UUID file already exists and we can skip doing anything. + -} genBucket :: RemoteConfig -> UUID -> Annex () genBucket c u = do conn <- s3ConnectionRequired c u showAction "checking bucket" - loc <- liftIO $ getBucketLocation conn bucket - case loc of - Right _ -> writeUUIDFile c u - Left err@(NetworkError _) -> s3Error err - Left (AWSError _ _) -> do - showAction $ "creating bucket in " ++ datacenter - res <- liftIO $ createBucketIn conn bucket datacenter - case res of - Right _ -> writeUUIDFile c u - Left err -> s3Error err + unlessM ((== Right True) <$> checkUUIDFile c u conn) $ do + loc <- liftIO $ getBucketLocation conn bucket + case loc of + Right _ -> writeUUIDFile c u + Left err@(NetworkError _) -> s3Error err + Left (AWSError _ _) -> do + showAction $ "creating bucket in " ++ datacenter + res <- liftIO $ createBucketIn conn bucket datacenter + case res of + Right _ -> writeUUIDFile c u + Left err -> s3Error err where bucket = fromJust $ getBucket c datacenter = fromJust $ M.lookup "datacenter" c @@ -284,20 +292,38 @@ genBucket c u = do writeUUIDFile :: RemoteConfig -> UUID -> Annex () writeUUIDFile c u = do conn <- s3ConnectionRequired c u - go conn =<< liftIO (tryNonAsync $ getObject conn $ mkobject L.empty) + v <- checkUUIDFile c u conn + case v of + Left e -> error e + Right True -> return () + Right False -> do + let object = setStorageClass (getStorageClass c) (mkobject uuidb) + either s3Error return =<< liftIO (sendObject conn object) where - go _conn (Right (Right o)) = unless (obj_data o == uuidb) $ - error $ "This bucket is already in use by a different S3 special remote, with UUID: " ++ show (obj_data o) - go conn _ = do - let object = setStorageClass (getStorageClass c) (mkobject uuidb) - either s3Error return =<< liftIO (sendObject conn object) - - file = filePrefix c ++ "annex-uuid" + file = uuidFile c uuidb = L.fromChunks [T.encodeUtf8 $ T.pack $ fromUUID u] bucket = fromJust $ getBucket c mkobject = S3Object bucket file "" (getXheaders c) +{- Checks if the UUID file exists in the bucket and has the specified UUID already. -} +checkUUIDFile :: RemoteConfig -> UUID -> AWSConnection -> Annex (Either String Bool) +checkUUIDFile c u conn = check <$> liftIO (tryNonAsync $ getObject conn $ mkobject L.empty) + where + check (Right (Right o)) + | obj_data o == uuidb = Right True + | otherwise = Left $ "This bucket is already in use by a different S3 special remote, with UUID: " ++ show (obj_data o) + check _ = Right False + + uuidb = L.fromChunks [T.encodeUtf8 $ T.pack $ fromUUID u] + bucket = fromJust $ getBucket c + file = uuidFile c + + mkobject = S3Object bucket file "" (getXheaders c) + +uuidFile :: RemoteConfig -> FilePath +uuidFile c = filePrefix c ++ "annex-uuid" + s3ConnectionRequired :: RemoteConfig -> UUID -> Annex AWSConnection s3ConnectionRequired c u = maybe (error "Cannot connect to S3") return =<< s3Connection c u diff --git a/Test.hs b/Test.hs index 95f8db6638..3ae5e323b9 100644 --- a/Test.hs +++ b/Test.hs @@ -22,9 +22,7 @@ import qualified Options.Applicative.Types as Opt #endif import Control.Exception.Extensible import qualified Data.Map as M -import System.IO.HVFS (SystemFS(..)) import qualified Text.JSON -import System.Path import Common @@ -78,6 +76,7 @@ import qualified Utility.Hash import qualified Utility.Scheduled import qualified Utility.HumanTime import qualified Utility.ThreadScheduler +import qualified Command.Uninit #ifndef mingw32_HOST_OS import qualified CmdLine.GitAnnex as GitAnnex import qualified Remote.Helper.Encryptable @@ -218,10 +217,11 @@ unitTests note gettestenv = testGroup ("Unit Tests " ++ note) , check "conflict resolution" test_conflict_resolution , check "conflict resolution movein regression" test_conflict_resolution_movein_regression , check "conflict resolution (mixed directory and file)" test_mixed_conflict_resolution - , check "conflict resolution symlinks" test_conflict_resolution_symlinks + , check "conflict resolution symlink bit" test_conflict_resolution_symlink_bit , check "conflict resolution (uncommitted local file)" test_uncommitted_conflict_resolution , check "conflict resolution (removed file)" test_remove_conflict_resolution - , check "conflict resolution (nonannexed)" test_nonannexed_conflict_resolution + , check "conflict resolution (nonannexed file)" test_nonannexed_file_conflict_resolution + , check "conflict resolution (nonannexed symlink)" test_nonannexed_symlink_conflict_resolution , check "map" test_map , check "uninit" test_uninit , check "uninit (in git-annex branch)" test_uninit_inbranch @@ -857,6 +857,7 @@ test_conflict_resolution testenv = let v = filter (variantprefix `isPrefixOf`) l length v == 2 @? (what ++ " not exactly 2 variant files in: " ++ show l) + conflictor `notElem` l @? ("conflictor still present after conflict resolution") indir testenv d $ do git_annex testenv "get" v @? "get failed" git_annex_expectoutput testenv "find" v v @@ -946,14 +947,14 @@ test_remove_conflict_resolution testenv = do length v == 1 @? (what ++ " too many variant files in: " ++ show v) -{- Check merge confalict resolution when a file is annexed in one repo, - - and checked directly into git in the other repo. - - - - This test requires indirect mode to set it up, but tests both direct and - - indirect mode. - -} -test_nonannexed_conflict_resolution :: TestEnv -> Assertion -test_nonannexed_conflict_resolution testenv = do + {- Check merge confalict resolution when a file is annexed in one repo, + - and checked directly into git in the other repo. + - + - This test requires indirect mode to set it up, but tests both direct and + - indirect mode. + -} +test_nonannexed_file_conflict_resolution :: TestEnv -> Assertion +test_nonannexed_file_conflict_resolution testenv = do check True False check False False check True True @@ -995,6 +996,57 @@ test_nonannexed_conflict_resolution testenv = do s == Just nonannexed_content @? (what ++ " wrong content for nonannexed file: " ++ show s) + +{- Check merge confalict resolution when a file is annexed in one repo, + - and is a non-git-annex symlink in the other repo. + - + - Test can only run when coreSymlinks is supported, because git needs to + - be able to check out the non-git-annex symlink. + -} +test_nonannexed_symlink_conflict_resolution :: TestEnv -> Assertion +test_nonannexed_symlink_conflict_resolution testenv = do + check True False + check False False + check True True + check False True + where + check inr1 switchdirect = withtmpclonerepo testenv False $ \r1 -> + withtmpclonerepo testenv False $ \r2 -> do + whenM (checkRepo (Types.coreSymlinks <$> Annex.getGitConfig) r1 + <&&> isInDirect r1 <&&> isInDirect r2) $ do + indir testenv r1 $ do + disconnectOrigin + writeFile conflictor "conflictor" + git_annex testenv "add" [conflictor] @? "add conflicter failed" + git_annex testenv "sync" [] @? "sync failed in r1" + indir testenv r2 $ do + disconnectOrigin + createSymbolicLink symlinktarget "conflictor" + boolSystem "git" [Params "add", File conflictor] @? "git add conflictor failed" + git_annex testenv "sync" [] @? "sync failed in r2" + pair testenv r1 r2 + let l = if inr1 then [r1, r2] else [r2, r1] + forM_ l $ \r -> indir testenv r $ do + when switchdirect $ + git_annex testenv "direct" [] @? "failed switching to direct mode" + git_annex testenv "sync" [] @? "sync failed" + checkmerge ("r1" ++ show switchdirect) r1 + checkmerge ("r2" ++ show switchdirect) r2 + conflictor = "conflictor" + symlinktarget = "dummy-target" + variantprefix = conflictor ++ ".variant" + checkmerge what d = do + l <- getDirectoryContents d + let v = filter (variantprefix `isPrefixOf`) l + not (null v) + @? (what ++ " conflictor variant file missing in: " ++ show l ) + length v == 1 + @? (what ++ " too many variant files in: " ++ show v) + conflictor `elem` l @? (what ++ " conflictor file missing in: " ++ show l) + s <- catchMaybeIO (readSymbolicLink (d conflictor)) + s == Just symlinktarget + @? (what ++ " wrong target for nonannexed symlink: " ++ show s) + {- Check merge conflict resolution when there is a local file, - that is not staged or committed, that conflicts with what's being added - from the remmote. @@ -1045,8 +1097,8 @@ test_uncommitted_conflict_resolution testenv = do {- On Windows/FAT, repeated conflict resolution sometimes - lost track of whether a file was a symlink. -} -test_conflict_resolution_symlinks :: TestEnv -> Assertion -test_conflict_resolution_symlinks testenv = do +test_conflict_resolution_symlink_bit :: TestEnv -> Assertion +test_conflict_resolution_symlink_bit testenv = do withtmpclonerepo testenv False $ \r1 -> withtmpclonerepo testenv False $ \r2 -> do withtmpclonerepo testenv False $ \r3 -> do @@ -1360,10 +1412,13 @@ intmpclonerepoInDirect testenv a = intmpclonerepo testenv $ Annex.Init.initialize Nothing Config.isDirect -isInDirect :: FilePath -> IO Bool -isInDirect d = do +checkRepo :: Types.Annex a -> FilePath -> IO a +checkRepo getval d = do s <- Annex.new =<< Git.Construct.fromPath d - not <$> Annex.eval s Config.isDirect + Annex.eval s getval + +isInDirect :: FilePath -> IO Bool +isInDirect = checkRepo (not <$> Config.isDirect) intmpbareclonerepo :: TestEnv -> Assertion -> Assertion intmpbareclonerepo testenv a = withtmpclonerepo testenv True $ \r -> indir testenv r a @@ -1406,9 +1461,9 @@ clonerepo testenv old new bare = do ensuretmpdir let b = if bare then " --bare" else "" boolSystem "git" [Params ("clone -q" ++ b), File old, File new] @? "git clone failed" + configrepo testenv new indir testenv new $ git_annex testenv "init" ["-q", new] @? "git annex init failed" - configrepo testenv new unless bare $ indir testenv new $ handleforcedirect testenv @@ -1416,8 +1471,11 @@ clonerepo testenv old new bare = do configrepo :: TestEnv -> FilePath -> IO () configrepo testenv dir = indir testenv dir $ do + -- ensure git is set up to let commits happen boolSystem "git" [Params "config user.name", Param "Test User"] @? "git config failed" boolSystem "git" [Params "config user.email test@example.com"] @? "git config failed" + -- avoid signed commits by test suite + boolSystem "git" [Params "config commit.gpgsign false"] @? "git config failed" handleforcedirect :: TestEnv -> IO () handleforcedirect testenv = when (M.lookup "FORCEDIRECT" testenv == Just "1") $ @@ -1434,11 +1492,7 @@ cleanup = cleanup' False cleanup' :: Bool -> FilePath -> IO () cleanup' final dir = whenM (doesDirectoryExist dir) $ do - -- Allow all files and directories to be written to, so - -- they can be deleted. Both git and git-annex use file - -- permissions to prevent deletion. - recurseDir SystemFS dir >>= - mapM_ (void . tryIO . Utility.FileMode.allowWrite) + Command.Uninit.prepareRemoveAnnexDir dir -- This sometimes fails on Windows, due to some files -- being still opened by a subprocess. catchIO (removeDirectoryRecursive dir) $ \e -> diff --git a/Types/Backend.hs b/Types/Backend.hs index c7d962db06..7eb59b6e28 100644 --- a/Types/Backend.hs +++ b/Types/Backend.hs @@ -17,6 +17,7 @@ data BackendA a = Backend , getKey :: KeySource -> a (Maybe Key) , fsckKey :: Maybe (Key -> FilePath -> a Bool) , canUpgradeKey :: Maybe (Key -> Bool) + , fastMigrate :: Maybe (Key -> BackendA a -> Maybe Key) } instance Show (BackendA a) where diff --git a/Utility/Bloom.hs b/Utility/Bloom.hs new file mode 100644 index 0000000000..e3000de3d7 --- /dev/null +++ b/Utility/Bloom.hs @@ -0,0 +1,60 @@ +{- bloomfilter compatability wrapper + - + - Copyright 2014 Joey Hess + - + - License: BSD-2-clause + -} + +{-# LANGUAGE CPP #-} + +module Utility.Bloom ( + Bloom, + suggestSizing, + Hashable, + cheapHashes, + notElemB, + + newMB, + insertMB, + unsafeFreezeMB, +) where + +#if MIN_VERSION_bloomfilter(2,0,0) +import qualified Data.BloomFilter.Mutable as MBloom +import qualified Data.BloomFilter as Bloom +#else +import qualified Data.BloomFilter as Bloom +#endif +import Data.BloomFilter.Easy (suggestSizing, Bloom) +import Data.BloomFilter.Hash (Hashable, cheapHashes) +import Control.Monad.ST.Safe (ST) + +#if MIN_VERSION_bloomfilter(2,0,0) + +notElemB :: a -> Bloom a -> Bool +notElemB = Bloom.notElem + +newMB :: (a -> [Bloom.Hash]) -> Int -> ST s (MBloom.MBloom s a) +newMB = MBloom.new + +insertMB :: MBloom.MBloom s a -> a -> ST s () +insertMB = MBloom.insert + +unsafeFreezeMB :: MBloom.MBloom s a -> ST s (Bloom a) +unsafeFreezeMB = Bloom.unsafeFreeze + +#else + +notElemB :: a -> Bloom a -> Bool +notElemB = Bloom.notElemB + +newMB :: (a -> [Bloom.Hash]) -> Int -> ST s (Bloom.MBloom s a) +newMB = Bloom.newMB + +insertMB :: Bloom.MBloom s a -> a -> ST s () +insertMB = Bloom.insertMB + +unsafeFreezeMB :: Bloom.MBloom s a -> ST s (Bloom a) +unsafeFreezeMB = Bloom.unsafeFreezeMB + +#endif diff --git a/Utility/Daemon.hs b/Utility/Daemon.hs index 23d18d2b60..228263911a 100644 --- a/Utility/Daemon.hs +++ b/Utility/Daemon.hs @@ -21,6 +21,8 @@ import Utility.WinLock #ifndef mingw32_HOST_OS import System.Posix import Control.Concurrent.Async +#else +import System.Exit #endif #ifndef mingw32_HOST_OS @@ -54,15 +56,26 @@ daemonize logfd pidfile changedirectory a = do wait =<< asyncWithUnmask (\unmask -> unmask a) out out = exitImmediately ExitSuccess +#endif {- To run an action that is normally daemonized in the forground. -} +#ifndef mingw32_HOST_OS foreground :: Fd -> Maybe FilePath -> IO () -> IO () foreground logfd pidfile a = do +#else +foreground :: Maybe FilePath -> IO () -> IO () +foreground pidfile a = do +#endif maybe noop lockPidFile pidfile +#ifndef mingw32_HOST_OS _ <- tryIO createSession redirLog logfd +#endif a +#ifndef mingw32_HOST_OS exitImmediately ExitSuccess +#else + exitWith ExitSuccess #endif {- Locks the pid file, with an exclusive, non-blocking lock, diff --git a/Utility/Directory.hs b/Utility/Directory.hs index d92327c095..ade5ef8111 100644 --- a/Utility/Directory.hs +++ b/Utility/Directory.hs @@ -1,4 +1,4 @@ -{- directory manipulation +{- directory traversal and manipulation - - Copyright 2011-2014 Joey Hess - @@ -11,12 +11,20 @@ module Utility.Directory where import System.IO.Error import System.Directory -import Control.Exception (throw) +import Control.Exception (throw, bracket) import Control.Monad import Control.Monad.IfElse import System.FilePath import Control.Applicative +import Control.Concurrent import System.IO.Unsafe (unsafeInterleaveIO) +import Data.Maybe + +#ifdef mingw32_HOST_OS +import qualified System.Win32 as Win32 +#else +import qualified System.Posix as Posix +#endif import Utility.PosixFiles import Utility.SafeCommand @@ -133,3 +141,90 @@ nukeFile file = void $ tryWhenExists go #else go = removeFile file #endif + +#ifndef mingw32_HOST_OS +data DirectoryHandle = DirectoryHandle IsOpen Posix.DirStream +#else +data DirectoryHandle = DirectoryHandle IsOpen Win32.HANDLE Win32.FindData (MVar ()) +#endif + +type IsOpen = MVar () -- full when the handle is open + +openDirectory :: FilePath -> IO DirectoryHandle +openDirectory path = do +#ifndef mingw32_HOST_OS + dirp <- Posix.openDirStream path + isopen <- newMVar () + return (DirectoryHandle isopen dirp) +#else + (h, fdat) <- Win32.findFirstFile (path "*") + -- Indicate that the fdat contains a filename that readDirectory + -- has not yet returned, by making the MVar be full. + -- (There's always at least a "." entry.) + alreadyhave <- newMVar () + isopen <- newMVar () + return (DirectoryHandle isopen h fdat alreadyhave) +#endif + +closeDirectory :: DirectoryHandle -> IO () +#ifndef mingw32_HOST_OS +closeDirectory (DirectoryHandle isopen dirp) = + whenOpen isopen $ + Posix.closeDirStream dirp +#else +closeDirectory (DirectoryHandle isopen h _ alreadyhave) = + whenOpen isopen $ do + _ <- tryTakeMVar alreadyhave + Win32.findClose h +#endif + where + whenOpen :: IsOpen -> IO () -> IO () + whenOpen mv f = do + v <- tryTakeMVar mv + when (isJust v) f + +{- |Reads the next entry from the handle. Once the end of the directory +is reached, returns Nothing and automatically closes the handle. +-} +readDirectory :: DirectoryHandle -> IO (Maybe FilePath) +#ifndef mingw32_HOST_OS +readDirectory hdl@(DirectoryHandle _ dirp) = do + e <- Posix.readDirStream dirp + if null e + then do + closeDirectory hdl + return Nothing + else return (Just e) +#else +readDirectory hdl@(DirectoryHandle _ h fdat mv) = do + -- If the MVar is full, then the filename in fdat has + -- not yet been returned. Otherwise, need to find the next + -- file. + r <- tryTakeMVar mv + case r of + Just () -> getfn + Nothing -> do + more <- Win32.findNextFile h fdat + if more + then getfn + else do + closeDirectory hdl + return Nothing + where + getfn = do + filename <- Win32.getFindDataFileName fdat + return (Just filename) +#endif + +-- True only when directory exists and contains nothing. +-- Throws exception if directory does not exist. +isDirectoryEmpty :: FilePath -> IO Bool +isDirectoryEmpty d = bracket (openDirectory d) closeDirectory check + where + check h = do + v <- readDirectory h + case v of + Nothing -> return True + Just f + | not (dirCruft f) -> return False + | otherwise -> check h diff --git a/Utility/ExternalSHA.hs b/Utility/ExternalSHA.hs index 1ab93262d2..595acd8cff 100644 --- a/Utility/ExternalSHA.hs +++ b/Utility/ExternalSHA.hs @@ -14,6 +14,7 @@ import Utility.SafeCommand import Utility.Process import Utility.FileSystemEncoding import Utility.Misc +import Utility.Exception import Data.List import Data.Char @@ -22,7 +23,7 @@ import System.IO externalSHA :: String -> Int -> FilePath -> IO (Either String String) externalSHA command shasize file = do - ls <- lines <$> readsha (toCommand [File file]) + ls <- lines <$> catchDefaultIO "" (readsha (toCommand [File file])) return $ sanitycheck =<< parse ls where {- sha commands output the filename, so need to set fileEncoding -} diff --git a/Utility/LogFile.hs b/Utility/LogFile.hs index e84b72b2ea..e4f90d4188 100644 --- a/Utility/LogFile.hs +++ b/Utility/LogFile.hs @@ -15,13 +15,10 @@ import Common import System.Posix.Types #endif -#ifndef mingw32_HOST_OS -openLog :: FilePath -> IO Fd +openLog :: FilePath -> IO Handle openLog logfile = do rotateLog logfile - openFd logfile WriteOnly (Just stdFileMode) - defaultFileFlags { append = True } -#endif + openFile logfile AppendMode rotateLog :: FilePath -> IO () rotateLog logfile = go 0 diff --git a/Utility/ThreadScheduler.hs b/Utility/ThreadScheduler.hs index fc026d7e64..e6a81aebd9 100644 --- a/Utility/ThreadScheduler.hs +++ b/Utility/ThreadScheduler.hs @@ -57,8 +57,7 @@ unboundDelay time = do waitForTermination :: IO () waitForTermination = do #ifdef mingw32_HOST_OS - runEvery (Seconds 600) $ - void getLine + forever $ threadDelaySeconds (Seconds 6000) #else lock <- newEmptyMVar let check sig = void $ diff --git a/debian/changelog b/debian/changelog index 7a4f9d71e9..81d222d07c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,74 @@ +git-annex (5.20140717) unstable; urgency=high + + * Fix minor FD leak in journal code. Closes: #754608 + * direct: Fix handling of case where a work tree subdirectory cannot + be written to due to permissions. + * migrate: Avoid re-checksumming when migrating from hashE to hash backend. + * uninit: Avoid failing final removal in some direct mode repositories + due to file modes. + * S3: Deal with AWS ACL configurations that do not allow creating or + checking the location of a bucket, but only reading and writing content to + it. + * resolvemerge: New plumbing command that runs the automatic merge conflict + resolver. + * Deal with change in git 2.0 that made indirect mode merge conflict + resolution leave behind old files. + * sync: Fix git sync with local git remotes even when they don't have an + annex.uuid set. (The assistant already did so.) + * Set gcrypt-publish-participants when setting up a gcrypt repository, + to avoid unncessary passphrase prompts. + This is a security/usability tradeoff. To avoid exposing the gpg key + ids who can decrypt the repository, users can unset + gcrypt-publish-participants. + * Install nautilus hooks even when ~/.local/share/nautilus/ does not yet + exist, since it is not automatically created for Gnome 3 users. + * Windows: Move .vbs files out of git\bin, to avoid that being in the + PATH, which caused some weird breakage. (Thanks, divB) + * Windows: Fix locking issue that prevented the webapp starting + (since 5.20140707). + + -- Joey Hess Thu, 17 Jul 2014 11:27:25 -0400 + +git-annex (5.20140709) unstable; urgency=medium + + * Fix race in direct mode merge code that could cause all files in the + repository to be removed. It should be able to recover repositories + experiencing this bug without data loss. See: + http://git-annex.branchable.com/bugs/bad_merge_commit_deleting_all_files/ + * Fix git version that supported --no-gpg-sign. + * Fix bug in automatic merge conflict resolution, when one side is an + annexed symlink, and the other side is a non-annexed symlink. + * Really fix bug that caused the assistant to make many unncessary + empty merge commits. + + -- Joey Hess Wed, 09 Jul 2014 15:28:03 -0400 + +git-annex (5.20140707) unstable; urgency=medium + + * assistant: Fix bug, introduced in last release, that caused the assistant + to make many unncessary empty merge commits. + * assistant: Fix one-way assistant->assistant sync in direct mode. + * Fix bug in annex.queuesize calculation that caused much more + queue flushing than necessary. + * importfeed: When annex.genmetadata is set, metadata from the feed + is added to files that are imported from it. + * Support users who have set commit.gpgsign, by disabling gpg signatures + for git-annex branch commits and commits made by the assistant. + * Fix memory leak when committing millions of changes to the git-annex + branch, eg after git-annex add has run on 2 million files in one go. + * Support building with bloomfilter 2.0.0. + * Run standalone install process when the assistant is started + (was only being run when the webapp was opened). + * Android: patch git to avoid fchmod, which fails on /sdcard. + * Windows: Got rid of that pesky DOS box when starting the webapp. + * Windows: Added Startup menu item so assistant starts automatically + on login. + * Windows: Fix opening file browser from webapp when repo is in a + directory with spaces. + * Windows: Assistant now logs to daemon.log. + + -- Joey Hess Mon, 07 Jul 2014 12:24:13 -0400 + git-annex (5.20140613) unstable; urgency=medium * Ignore setsid failures. diff --git a/doc/backends.mdwn b/doc/backends.mdwn index 79bacd68e7..baa96c149e 100644 --- a/doc/backends.mdwn +++ b/doc/backends.mdwn @@ -5,8 +5,8 @@ to retrieve the file's content (its value). Multiple pluggable key-value backends are supported, and a single repository can use different ones for different files. -* `SHA256E` -- The default backend for new files, combines a SHA256 hash of - the file's content with the file's extension. This allows +* `SHA256E` -- The default backend for new files, combines a 256 bit SHA-2 + hash of the file's content with the file's extension. This allows verifying that the file content is right, and can avoid duplicates of files with the same content. Its need to generate checksums can make it slower for large files. @@ -16,12 +16,13 @@ can use different ones for different files. the same basename, size, and modification time has the same content. This is the least expensive backend, recommended for really large files or slow systems. -* `SHA512`, `SHA512E` -- Best currently available hash, for the very paranoid. +* `SHA512`, `SHA512E` -- Best SHA-2 hash, for the very paranoid. * `SHA1`, `SHA1E` -- Smaller hash than `SHA256` for those who want a checksum but are not concerned about security. * `SHA384`, `SHA384E`, `SHA224`, `SHA224E` -- Hashes for people who like unusual sizes. -* `SKEIN512`, `SKEIN256` -- [Skein hash](http://en.wikipedia.org/wiki/Skein_hash), +* `SKEIN512`, `SKEIN512E`, `SKEIN256`, `SKEIN256E` + -- [Skein hash](http://en.wikipedia.org/wiki/Skein_hash), a well-regarded SHA3 hash competition finalist. The `annex.backends` git-config setting can be used to list the backends diff --git a/doc/bugs/Android_fails_on_Google_Nexus_10_Jellybean.mdwn b/doc/bugs/Android_fails_on_Google_Nexus_10_Jellybean.mdwn new file mode 100644 index 0000000000..c7f5e582c7 --- /dev/null +++ b/doc/bugs/Android_fails_on_Google_Nexus_10_Jellybean.mdwn @@ -0,0 +1,166 @@ +### Please describe the problem. + +Install seems to die because /data/app-lib not found. Sorry, I did not copy. Git-annex log is below. + +I tried To run git-annex second time, here's what terminal says. + + +Falling back to hardcoded app location; cannot find expected files in /data/app-lib +git annex webapp +u0_a36@manta:/sdcard/git-annex.home $ git annex webapp +WARNING: linker: git-annex has text relocations. This is wasting memory and is a security risk. Please fix. +error: fchmod on /sdcard/mediashare/.git/config.lock failed: Operation not permitted +error: fchmod on /sdcard/mediashare/.git/config.lock failed: Operation not permitted + +From git terminal, can start web viewer, it offers to make repo. I chose /sdcard/mediashare, result is browser fail: + +git [Param "config",Param "annex.uuid",Param "380f6ec2-a7b0-43db-9447-f0de1b5a1b5b"] failed + +The install did create /sdcard/mediashare. I did have the sdcard directory all along. + +I can't say for sure what else is in file system. ES File manager shows /data exists, but it is empty. But tablet not easy to diagnose + +### What steps will reproduce the problem? + +Install git-annex.apk from website. I downloaded 20140620. + +### What version of git-annex are you using? On what operating system? + +Android 4.4.2 on Nexus tablet. + +### Please provide any additional information below. + +Git-anex-install.log. it is only file in /sdcard/git-annex.home. note it says it is installing to /data/data/. I may manually create that structure and see if a reinstall ends differently. + +[[!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 +Installation starting to /data/data/ga.androidterm +1bebb0d66f3f7c5ac4889b86669cab04ebee9bba +installing busybox +installing git-annex +installing git-shell +installing git-upload-pack +installing git +installing gpg +installing rsync +installing ssh +installing ssh-keygen +linking ./bin/git-upload-archive to git +linking ./bin/git-receive-pack to git +linking ./libexec/git-core/git-help to git +linking ./libexec/git-core/git-fsck to git +linking ./libexec/git-core/git-cat-file to git +linking ./libexec/git-core/git-init to git +linking ./libexec/git-core/git-checkout-index to git +linking ./libexec/git-core/git-notes to git +linking ./libexec/git-core/git-grep to git +linking ./libexec/git-core/git-blame to git +linking ./libexec/git-core/git-verify-tag to git +linking ./libexec/git-core/git-write-tree to git +linking ./libexec/git-core/git-log to git +linking ./libexec/git-core/git-stage to git +linking ./libexec/git-core/git-update-ref to git +linking ./libexec/git-core/git-status to git +linking ./libexec/git-core/git-show-branch to git +linking ./libexec/git-core/git-merge-file to git +linking ./libexec/git-core/git-for-each-ref to git +linking ./libexec/git-core/git to git +linking ./libexec/git-core/git-replace to git +linking ./libexec/git-core/git-update-index to git +linking ./libexec/git-core/git-annotate to git +linking ./libexec/git-core/git-patch-id to git +linking ./libexec/git-core/git-merge-recursive to git +linking ./libexec/git-core/git-rm to git +linking ./libexec/git-core/git-ls-tree to git +linking ./libexec/git-core/git-update-server-info to git +linking ./libexec/git-core/git-diff-tree to git +linking ./libexec/git-core/git-merge-tree to git +linking ./libexec/git-core/git-mktag to git +linking ./libexec/git-core/git-rev-list to git +linking ./libexec/git-core/git-column to git +linking ./libexec/git-core/git-apply to git +linking ./libexec/git-core/git-var to git +linking ./libexec/git-core/git-rev-parse to git +linking ./libexec/git-core/git-archive to git +linking ./libexec/git-core/git-verify-pack to git +linking ./libexec/git-core/git-push to git +linking ./libexec/git-core/git-commit to git +linking ./libexec/git-core/git-tag to git +linking ./libexec/git-core/git-pack-refs to git +linking ./libexec/git-core/git-fmt-merge-msg to git +linking ./libexec/git-core/git-fast-export to git +linking ./libexec/git-core/git-remote-ext to git +linking ./libexec/git-core/git-mailsplit to git +linking ./libexec/git-core/git-send-pack to git +linking ./libexec/git-core/git-diff-index to git +linking ./libexec/git-core/git-mailinfo to git +linking ./libexec/git-core/git-revert to git +linking ./libexec/git-core/git-diff-files to git +linking ./libexec/git-core/git-merge-ours to git +linking ./libexec/git-core/git-show-ref to git +linking ./libexec/git-core/git-diff to git +linking ./libexec/git-core/git-clean to git +linking ./libexec/git-core/git-bundle to git +linking ./libexec/git-core/git-check-mailmap to git +linking ./libexec/git-core/git-describe to git +linking ./libexec/git-core/git-branch to git +linking ./libexec/git-core/git-checkout to git +linking ./libexec/git-core/git-name-rev to git +linking ./libexec/git-core/git-gc to git +linking ./libexec/git-core/git-fetch to git +linking ./libexec/git-core/git-whatchanged to git +linking ./libexec/git-core/git-cherry to git +linking ./libexec/git-core/git-reflog to git +linking ./libexec/git-core/git-hash-object to git +linking ./libexec/git-core/git-init-db to git +linking ./libexec/git-core/git-rerere to git +linking ./libexec/git-core/git-reset to git +linking ./libexec/git-core/git-stripspace to git +linking ./libexec/git-core/git-prune to git +linking ./libexec/git-core/git-mktree to git +linking ./libexec/git-core/git-unpack-file to git +linking ./libexec/git-core/git-remote to git +linking ./libexec/git-core/git-commit-tree to git +linking ./libexec/git-core/git-symbolic-ref to git +linking ./libexec/git-core/git-credential to git +linking ./libexec/git-core/git-check-ignore to git +linking ./libexec/git-core/git-shortlog to git +linking ./libexec/git-core/git-fetch-pack to git +linking ./libexec/git-core/git-clone to git +linking ./libexec/git-core/git-mv to git +linking ./libexec/git-core/git-read-tree to git +linking ./libexec/git-core/git-merge-subtree to git +linking ./libexec/git-core/git-ls-remote to git +linking ./libexec/git-core/git-config to git +linking ./libexec/git-core/git-cherry-pick to git +linking ./libexec/git-core/git-merge to git +linking ./libexec/git-core/git-prune-packed to git +linking ./libexec/git-core/git-count-objects to git +linking ./libexec/git-core/git-merge-base to git +linking ./libexec/git-core/git-index-pack to git +linking ./libexec/git-core/git-repack to git +linking ./libexec/git-core/git-show to git +linking ./libexec/git-core/git-fsck-objects to git +linking ./libexec/git-core/git-format-patch to git +linking ./libexec/git-core/git-bisect--helper to git +linking ./libexec/git-core/git-upload-archive to git +linking ./libexec/git-core/git-ls-files to git +linking ./libexec/git-core/git-check-attr to git +linking ./libexec/git-core/git-get-tar-commit-id to git +linking ./libexec/git-core/git-remote-fd to git +linking ./libexec/git-core/git-unpack-objects to git +linking ./libexec/git-core/git-add to git +linking ./libexec/git-core/git-check-ref-format to git +linking ./libexec/git-core/git-merge-index to git +linking ./libexec/git-core/git-pack-objects to git +linking ./libexec/git-core/git-receive-pack to git +linking ./libexec/git-core/git-pack-redundant 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. +"""]] + +> [[fixed|done]] --[[Joey]] diff --git a/doc/bugs/Android_fails_on_Google_Nexus_10_Jellybean/comment_1_b41666c032aeb2d0de35023328391edb._comment b/doc/bugs/Android_fails_on_Google_Nexus_10_Jellybean/comment_1_b41666c032aeb2d0de35023328391edb._comment new file mode 100644 index 0000000000..cc0fcf30e4 --- /dev/null +++ b/doc/bugs/Android_fails_on_Google_Nexus_10_Jellybean/comment_1_b41666c032aeb2d0de35023328391edb._comment @@ -0,0 +1,25 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 1" + date="2014-07-03T20:10:41Z" + content=""" +This is not an installation problem; the /data/app-lib message is a red herring. + +Is /sdcard/mediashare a directory that already existed? If so, perhaps it's some \"mediashare\" thing that has a even more crippled filesystem than usual. Seems possible, but I don't know. Want to rule it out.. + +The actual failure seems to be when git tries to write to its config.lock file, and changes its permissions. This is a recent change in git, commit daa22c6f8da466bd7a438f1bc27375fd737ffcf3, \"config: preserve config file permissions on edits\". + +[[!language C \"\"\" ++ if (fchmod(fd, st.st_mode & 07777) < 0) { ++ error(\"fchmod on %s failed: %s\", ++ lock->filename, strerror(errno)); ++ ret = CONFIG_NO_WRITE; ++ goto out_free; ++ } +\"\"\"]] + +This seems utterly innocuous; the config file has some mode, and this just sets that same mode back (excluding some high bit flags). But Android goes out of its way to make /sdcard the most craptacular filesystem in use on any Linux system, so I'm not really surprised that it might just refuse all fchmod even when it's a no-op. (This is the only fchmod call currently in git.) + +I've patched the bundled git to work around this. Will be a while until there is an updated autobuild.. +"""]] diff --git a/doc/bugs/Android_fails_on_Google_Nexus_10_Jellybean/comment_2_95ebed938df3db2b6d4ebe4c666c08f8._comment b/doc/bugs/Android_fails_on_Google_Nexus_10_Jellybean/comment_2_95ebed938df3db2b6d4ebe4c666c08f8._comment new file mode 100644 index 0000000000..392f7007fe --- /dev/null +++ b/doc/bugs/Android_fails_on_Google_Nexus_10_Jellybean/comment_2_95ebed938df3db2b6d4ebe4c666c08f8._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 2" + date="2014-07-04T17:52:35Z" + content=""" +This problem should be fixed in the most recent daily build of git-annex for android. Testing appreciated. +"""]] diff --git a/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files.mdwn b/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files.mdwn new file mode 100644 index 0000000000..ebf2380729 --- /dev/null +++ b/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files.mdwn @@ -0,0 +1,64 @@ +### Please describe the problem. + +The assistant/webapp doesn't drop files from the local (source) repository after transferring it to the 2 backup repositories (numcopies 2), but they are listed with: + + git annex find --want-drop + +### What steps will reproduce the problem? + +#### mintcream #### + + git init annex + cd ~/annex + git commit -m "create" --allow-empty + git annex init mintcream + git annex numcopies 2 + git annex group here source + git config annex.autocommit false + git annex webapp + +#### liquorice #### + + git init annex + cd ~/annex + git annex init liquorice + git annex group here backup + +#### candyfloss #### + + git init annex + cd ~/annex + git annex init candyfloss + git annex group here backup + +#### mintcream #### + + (add both backup repositories in webapp as "remote repositories") + (copy files into ~/annex directory) + git annex add + git commit -m "add some files" + (use "sync now" to prod assistant into noticing the commit) + +### What was I expecting to happen? ### + +The assistant to transfer the files to liquorice and candyfloss, then for the assistant to drop the files from mintcream. + +### What actually happened? ### + +The assistant transfers the files to liquorice and candyfloss. No files are dropped from mintcream. + +### What version of git-annex are you using? On what operating system? + +git-annex version: 5.20140707-g923b436 + +Arch Linux (git-annex-bin from AUR) + +### Please provide any additional information below. + +I wish to retain control of the commits on "master" (annex.autocommit false) but want the assistant to handle moving/dropping the files as required in the background. + + git annex drop --auto + +works as expected. + +> [[done]]; user misconfiguration. --[[Joey]] diff --git a/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_1_f32fbae29e4db039804c0853256c238c._comment b/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_1_f32fbae29e4db039804c0853256c238c._comment new file mode 100644 index 0000000000..61c62703c6 --- /dev/null +++ b/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_1_f32fbae29e4db039804c0853256c238c._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 1" + date="2014-07-10T18:48:17Z" + content=""" +Reproduced. `git annex sync --content` has the same problem. + +Of course, both it and the assistant *do* check if files can be dropped. For some reason, it is deciding it is not safe to drop the file. +"""]] diff --git a/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_2_405bfa00dfd433352c263afe75e94b2c._comment b/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_2_405bfa00dfd433352c263afe75e94b2c._comment new file mode 100644 index 0000000000..d7d288b39d --- /dev/null +++ b/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_2_405bfa00dfd433352c263afe75e94b2c._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="user misconfiguration" + date="2014-07-10T19:02:00Z" + content=""" +Reason is simple: You manually put the repository into the source group, but its preferred content is not set to \"standard\". No matter what group a repository is in, you have to set its preferred content to something, or git-annex will default to assuming you want the repo to retain all files. + +So, `git annex wanted mintcream standard` and away you go. You'll also want to set that for the other 2 repos probably.. +"""]] diff --git a/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_3_c8cac8d800199ca4d8a65ba72abf678e._comment b/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_3_c8cac8d800199ca4d8a65ba72abf678e._comment new file mode 100644 index 0000000000..81b25c8f07 --- /dev/null +++ b/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_3_c8cac8d800199ca4d8a65ba72abf678e._comment @@ -0,0 +1,40 @@ +[[!comment format=mdwn + username="CandyAngel" + ip="81.111.193.130" + subject="comment 3" + date="2014-07-11T10:41:23Z" + content=""" +Ohhh I see! + +I was expecting \"standard\" to be the default because of what vicfg shows.. + + # Repository preferred contents + # (for web) + #wanted 00000000-0000-0000-0000-000000000001 = standard + # (for test) + #wanted 025d4d21-7648-426c-a406-bb7f27688afe = standard + + # Group preferred contents + # (Used by repositories with \"groupwanted\" in their preferred contents) + #groupwanted archive = standard + #groupwanted backup = standard + #groupwanted client = standard + #groupwanted incrementalbackup = standard + #groupwanted manual = standard + #groupwanted public = standard + #groupwanted smallarchive = standard + #groupwanted source = standard + #groupwanted transfer = standard + +In my experience with configuration files, a commented out line like this: + + #wanted 025d4d21-7648-426c-a406-bb7f27688afe = standard + +without any \"this is an example\" text above it means \"this is the default setting\". Everything in vicfg looks like it is the current settings, rather than just placeholders.. + +I understand why you need to set the wanted explicitly (at least from the command line), but the way information is shown in vicfg led me to interact with it incorrectly. Would it be worth adding a disclaimer that commented lines are examples, not defaults? As far as I am aware, the logic I explained above (commented line == default) is the \"norm\" in *nix configuration files, which would make vicfg non-intuitive. + +All I need to do now is not be so bothered by how messy the git-annex branch looks when the assistant is running things! :D + +Thankies +"""]] diff --git a/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_4_ee5fa8a22d1571b0040aa97c4979ef92._comment b/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_4_ee5fa8a22d1571b0040aa97c4979ef92._comment new file mode 100644 index 0000000000..237182879c --- /dev/null +++ b/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_4_ee5fa8a22d1571b0040aa97c4979ef92._comment @@ -0,0 +1,14 @@ +[[!comment format=mdwn + username="CandyAngel" + ip="81.111.193.130" + subject="comment 4" + date="2014-07-11T10:57:58Z" + content=""" +Actually, I'm still a little confused. + +If git-annex was presuming I wanted to keep all the files as you say, why were they listed in `git annex find --want-drop` and dropped by `git annex drop --auto`? + +Shouldn't they have been empty and a no-op respectively? + +There seems to be a difference in the behaviour between the command line (wanting to and actually dropping the files) and the assistant (wanting to keep them) for the same settings. +"""]] diff --git a/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_5_eef448b9e3dd1a717430a60d1001a7ee._comment b/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_5_eef448b9e3dd1a717430a60d1001a7ee._comment new file mode 100644 index 0000000000..11c690cb79 --- /dev/null +++ b/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_5_eef448b9e3dd1a717430a60d1001a7ee._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 5" + date="2014-07-11T18:27:44Z" + content=""" +The assistant defaults to assuming all files are wanted if there's no preferred content settings, while command-line dropping stuff defaults to assuming no files are wanted (or more accurately, that you'll drop anything you don't want and get anything you do) when there's no preferred content settings. So the default differs, but this only matters when not setting preferred contents. + +I agree that the vicfg could be misread, so have changed it. +"""]] diff --git a/doc/bugs/Assistant_merge_loop.mdwn b/doc/bugs/Assistant_merge_loop.mdwn new file mode 100644 index 0000000000..edff5e4b3e --- /dev/null +++ b/doc/bugs/Assistant_merge_loop.mdwn @@ -0,0 +1,19 @@ +The assistant appears to be in a merge loop with at least two of my repos. It's creating thousands of merge commits without any changes. One repository that contains around 600 files that change very very rarely now has 63528 commits. + +Here's a screenshot from tig: [[https://ssl.zerodogg.org/~zerodogg/private/tmp/Skjermdump_fra_2014-07-05_07:09:22-2014-07-05.png]] + +I can privately provide a copy of the git repo itself if needed. + +Using the standalone build, 64bit, on ArchLinux, Fedora 20 and Ubuntu 14.04. + + $ git annex version + git-annex version: 5.20140610-g5ec8bcf + build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash + key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL + remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external + local repository version: 5 + supported repository version: 5 + upgrade supported from repository versions: 0 1 2 4 + +> [[fixed|done]]. Note that 5.20140708 contained an incomplete fix for this +> bug. --[[Joey]] diff --git a/doc/bugs/Assistant_merge_loop/comment_10_8fe176691f0f61c15085d3c38f0ea50f._comment b/doc/bugs/Assistant_merge_loop/comment_10_8fe176691f0f61c15085d3c38f0ea50f._comment new file mode 100644 index 0000000000..1826e313a8 --- /dev/null +++ b/doc/bugs/Assistant_merge_loop/comment_10_8fe176691f0f61c15085d3c38f0ea50f._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawk9nck8WX8-ADF3Fdh5vFo4Qrw1I_bJcR8" + nickname="Jon Ander" + subject="comment 10" + date="2014-07-16T20:32:57Z" + content=""" +I have two computers with Debian testing (5.20140529) that aren't having the issue, and one with Debian Sid (5.20140709) that is still creating the empty merge commits +"""]] diff --git a/doc/bugs/Assistant_merge_loop/comment_11_6e3a78327c0b813415ebf85e298813d4._comment b/doc/bugs/Assistant_merge_loop/comment_11_6e3a78327c0b813415ebf85e298813d4._comment new file mode 100644 index 0000000000..7823176efc --- /dev/null +++ b/doc/bugs/Assistant_merge_loop/comment_11_6e3a78327c0b813415ebf85e298813d4._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 11" + date="2014-07-16T20:36:32Z" + content=""" +Has the assistant been restarted since git-annex was upgraded to the fixed version? + +Can you post a debug.log? +"""]] diff --git a/doc/bugs/Assistant_merge_loop/comment_1_ccf46511b924f86b488dba25060baa06._comment b/doc/bugs/Assistant_merge_loop/comment_1_ccf46511b924f86b488dba25060baa06._comment new file mode 100644 index 0000000000..c5f9c2187c --- /dev/null +++ b/doc/bugs/Assistant_merge_loop/comment_1_ccf46511b924f86b488dba25060baa06._comment @@ -0,0 +1,14 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 1" + date="2014-07-05T20:34:39Z" + content=""" +I am seeing some evidence of this in my own family's repo, where one node updated to 5.20140613 and started making series of empty commits with message \"merge refs/heads/synced/master\" and only 1 parent (so not really a merge). + +Quite likely [[!commit d6711800ad261fb4c37fc361bc84918d1e296bc4]] is at fault. Probably the fastForwardable check isn't quite right. + +This should only affect direct mode repositories. When only one node has the problem, it won't be bad, but if multiple nodes are doing this, their repos never converge and keep growing. + +Hmm, I think I have partially reproduced it with 2 direct mode repos, each having the other as a remote. `git annex sync` repeatedly in each does not add unncessary commits, but running the assistant in each does. In this particular case, it manages to converge eventually after several commits. +"""]] diff --git a/doc/bugs/Assistant_merge_loop/comment_2_afcbf3f8575e1a967c79693b94ef055c._comment b/doc/bugs/Assistant_merge_loop/comment_2_afcbf3f8575e1a967c79693b94ef055c._comment new file mode 100644 index 0000000000..eb3deb2ee3 --- /dev/null +++ b/doc/bugs/Assistant_merge_loop/comment_2_afcbf3f8575e1a967c79693b94ef055c._comment @@ -0,0 +1,12 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 2" + date="2014-07-05T21:17:17Z" + content=""" +Well, it looks like this is as simple as the assistant trying to merge refs/remotes/$foo/synced/master into the current branch, when that ref is behind or the same as the current branch. Nothing to merge, so it does some pointless work and then the fastForwardable check runs -- and that check looks for refs between the \"old\" and \"new\" refs. Since the \"new\" is behind the \"old\", there are no such commits, and the unnecessary empty commit results. + +The reason only the assistant is affected is because `git-annex sync` already checked Git.Branch.changed before trying to do any merging, which avoids the problem. + +Fix committed. +"""]] diff --git a/doc/bugs/Assistant_merge_loop/comment_3_07341221b2839fdc1c43634e011451d2._comment b/doc/bugs/Assistant_merge_loop/comment_3_07341221b2839fdc1c43634e011451d2._comment new file mode 100644 index 0000000000..1b69564838 --- /dev/null +++ b/doc/bugs/Assistant_merge_loop/comment_3_07341221b2839fdc1c43634e011451d2._comment @@ -0,0 +1,62 @@ +[[!comment format=mdwn + username="EskildHustvedt" + ip="80.202.103.55" + subject="comment 3" + date="2014-07-08T08:13:40Z" + content=""" +I'm still seeing this problem in 5.20140707-g923b436 + + [0 zerodogg@firefly annexed]$ git annex version + git-annex version: 5.20140707-g923b436 + build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash + key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL + remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external + local repository version: 5 + supported repository version: 5 + upgrade supported from repository versions: 0 1 2 4 + [0 zerodogg@firefly annexed]$ git graph | head -n20 + * d4bf68f - (HEAD, annex/direct/master) merge refs/remotes/serenity/synced/master (3 minutes ago) + |\ + * | d03f280 - merge refs/remotes/browncoats/synced/master (3 minutes ago) + |/ + * e6863b8 - (serenity/synced/master, browncoats/synced/master) merge refs/remotes/serenity/synced/master (3 minutes ago) + |\ + * \ 616d985 - merge refs/remotes/browncoats/synced/master (3 minutes ago) + |\ \ + | |/ + * | 3b39706 - merge refs/remotes/serenity/synced/master (3 minutes ago) + |\ \ + | |/ + * | 6d354cc - merge refs/remotes/browncoats/synced/master (4 minutes ago) + |\ \ + | |/ + * | 710c3c1 - merge refs/remotes/serenity/synced/master (4 minutes ago) + |\ \ + | |/ + * | 763930f - merge refs/remotes/browncoats/synced/master (4 minutes ago) + |/ + [0 zerodogg@firefly annexed]$ git annex assistant --stop + [0 zerodogg@firefly annexed]$ git annex assistant + [0 zerodogg@firefly annexed]$ git graph | head -n20 + * 947f1a2 - (HEAD, annex/direct/master) merge refs/remotes/serenity/synced/master (15 seconds ago) + |\ + * | 19c6043 - merge refs/remotes/browncoats/synced/master (18 seconds ago) + |/ + * b453741 - (serenity/synced/master, browncoats/synced/master) merge refs/remotes/serenity/synced/master (18 seconds ago) + |\ + * \ 6baaebd - merge refs/remotes/browncoats/synced/master (18 seconds ago) + |\ \ + | |/ + * | 03e4fa2 - merge refs/remotes/serenity/synced/master (24 seconds ago) + |\ \ + | |/ + * | 33302d8 - merge refs/remotes/browncoats/synced/master (24 seconds ago) + |\ \ + | |/ + * | d4bf68f - merge refs/remotes/serenity/synced/master (4 minutes ago) + |\ \ + | |/ + * | d03f280 - merge refs/remotes/browncoats/synced/master (4 minutes ago) + |/ + [0 zerodogg@firefly annexed]$ +"""]] diff --git a/doc/bugs/Assistant_merge_loop/comment_4_7ae215b478843d2a8c705cac385fcf22._comment b/doc/bugs/Assistant_merge_loop/comment_4_7ae215b478843d2a8c705cac385fcf22._comment new file mode 100644 index 0000000000..32468557b5 --- /dev/null +++ b/doc/bugs/Assistant_merge_loop/comment_4_7ae215b478843d2a8c705cac385fcf22._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="EskildHustvedt" + ip="80.202.103.55" + subject="comment 4" + date="2014-07-09T00:24:36Z" + content=""" +As far as I can see in my repo, the empty merges started on 2014-05-27, but then appear to resolve themselves after 40-50 commits on that day. They reappear again on 2014-06-03, and appears to have kept going daily ever since. +"""]] diff --git a/doc/bugs/Assistant_merge_loop/comment_5_11873461f093a266f0bb7e129bc21cde._comment b/doc/bugs/Assistant_merge_loop/comment_5_11873461f093a266f0bb7e129bc21cde._comment new file mode 100644 index 0000000000..188317bb85 --- /dev/null +++ b/doc/bugs/Assistant_merge_loop/comment_5_11873461f093a266f0bb7e129bc21cde._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 5" + date="2014-07-09T19:00:35Z" + content=""" +I have confirmed this is still happening, though I had certianly thought I had reproduced and fixed it. +"""]] diff --git a/doc/bugs/Assistant_merge_loop/comment_6_e7b6ecdd7e2b0222ea0baa0ed770e66d._comment b/doc/bugs/Assistant_merge_loop/comment_6_e7b6ecdd7e2b0222ea0baa0ed770e66d._comment new file mode 100644 index 0000000000..e408643cad --- /dev/null +++ b/doc/bugs/Assistant_merge_loop/comment_6_e7b6ecdd7e2b0222ea0baa0ed770e66d._comment @@ -0,0 +1,80 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawmN5jDf53oRJZsTo8Ahj2uXzCzq6HcvEro" + nickname="Gregory" + subject="confirmed?" + date="2014-07-15T01:29:00Z" + content=""" +I seem to be getting this behavior, in tandem with the [bad merge commit deleting all files](http://git-annex.branchable.com/bugs/bad_merge_commit_deleting_all_files/) on + + git-annex version: 5.20140709-gf15d2aa + build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash + key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL + remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external + local repository version: unknown + supported repository version: 5 + upgrade supported from repository versions: 0 1 2 4 + +Here is my log over the past couple weeks when I basically made no changes to the filesystem. + +git log --oneline --decorate --color --graph + +
+* b304ad7 (HEAD, origin/synced/master, origin/master, origin/HEAD, master) 
+* 568cf6c merge refs/remotes/diskb/synced/master
+* 5e426d0 merge refs/remotes/diskb/synced/master
+* b2fa076 merge refs/remotes/diskb/synced/master
+*   b66a37d merge refs/remotes/diskb/synced/master
+|\  
+* | 910cba5 merge refs/remotes/diskb/synced/master
+|/  
+* 60736c3 merge refs/remotes/diskb/synced/master
+*   a957439 merge refs/remotes/diskb/synced/master
+|\  
+* \   5c135c0 merge refs/remotes/diskb/synced/master
+|\ \  
+| |/  
+* |   52d8b66 merge refs/heads/synced/master
+|\ \  
+* | | d77f3a2 merge refs/remotes/diskb/synced/master
+| |/  
+|/|   
+* |   03bb56a merge refs/remotes/diskb/synced/master
+|\ \  
+* \ \   bb000db merge refs/heads/synced/master
+|\ \ \  
+| |/ /  
+|/| /   
+| |/    
+* | 3bc8520 merge refs/heads/synced/master
+|/  
+* 1c3ee7e 
+*   d3b096a merge refs/remotes/diskb/synced/master
+|\  
+* \   0fa0f6d merge refs/heads/synced/master
+|\ \  
+| |/  
+* |   173592c merge refs/remotes/diskb/synced/master
+|\ \  
+| |/  
+* |   3dd8086 merge refs/remotes/diskb/synced/master
+|\ \  
+| |/  
+* |   68be2a1 merge refs/heads/synced/master
+|\ \  
+| |/  
+* |   bb304f4 merge refs/remotes/diskb/synced/master
+|\ \  
+| |/  
+|/|   
+* | 1c9a2cd 
+* | 298b362 merge refs/heads/synced/master
+|/  
+*   4c23257 merge refs/remotes/diskb/synced/master
+|\  
+* | b709997 merge refs/remotes/diskb/synced/master
+|/  
+*   215f061 merge refs/remotes/diskb/synced/master
+|\  
+* \   e0f75b4 merge refs/heads/synced/master
+
+"""]] diff --git a/doc/bugs/Assistant_merge_loop/comment_7_7717d074611943b831f00ad10918b515._comment b/doc/bugs/Assistant_merge_loop/comment_7_7717d074611943b831f00ad10918b515._comment new file mode 100644 index 0000000000..9c70f26463 --- /dev/null +++ b/doc/bugs/Assistant_merge_loop/comment_7_7717d074611943b831f00ad10918b515._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 7" + date="2014-07-15T19:15:13Z" + content=""" +This bug and the other one are fixed in 5.20140709. I assume that your `git log` dates from an earlier version. +"""]] diff --git a/doc/bugs/Assistant_merge_loop/comment_8_5ce91ac76498539ada344d1639984302._comment b/doc/bugs/Assistant_merge_loop/comment_8_5ce91ac76498539ada344d1639984302._comment new file mode 100644 index 0000000000..c12c842644 --- /dev/null +++ b/doc/bugs/Assistant_merge_loop/comment_8_5ce91ac76498539ada344d1639984302._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawk9nck8WX8-ADF3Fdh5vFo4Qrw1I_bJcR8" + nickname="Jon Ander" + subject="comment 8" + date="2014-07-16T13:42:16Z" + content=""" +I'm still having this issue in 5.20140709 +"""]] diff --git a/doc/bugs/Assistant_merge_loop/comment_9_b09a5eaa2588559e19b3549bd3c8b496._comment b/doc/bugs/Assistant_merge_loop/comment_9_b09a5eaa2588559e19b3549bd3c8b496._comment new file mode 100644 index 0000000000..b6bfc68eb4 --- /dev/null +++ b/doc/bugs/Assistant_merge_loop/comment_9_b09a5eaa2588559e19b3549bd3c8b496._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 9" + date="2014-07-16T18:08:26Z" + content=""" +Are you sure that you have upgraded git-annex on every machine that uses that repository? You could have one old un-upgraded one still causing commits that would of course be visible on the rest. + +Also, what version exactly does `git-annex version` show? +"""]] diff --git a/doc/bugs/Git_annex_add_._dies_when_you_add_too_much.mdwn b/doc/bugs/Git_annex_add_._dies_when_you_add_too_much.mdwn index ae08a29c84..9443a4fbda 100644 --- a/doc/bugs/Git_annex_add_._dies_when_you_add_too_much.mdwn +++ b/doc/bugs/Git_annex_add_._dies_when_you_add_too_much.mdwn @@ -54,3 +54,5 @@ Linux quad 3.8.0-34-generic #49~precise1-Ubuntu SMP Wed Nov 13 18:05:00 UTC 2013 """]] > Ancient git-annex version. Doubt it affects current version. [[!tag moreinfo]] --[[Joey]] + +>> Actually, this is a dup of [[runs_of_of_memory_adding_2_million_files]] so [[done]] --[[Joey]] diff --git a/doc/bugs/Installation_fails:___34__Duplicate_instance_declarations__34__.mdwn b/doc/bugs/Installation_fails:___34__Duplicate_instance_declarations__34__.mdwn new file mode 100644 index 0000000000..db02036f45 --- /dev/null +++ b/doc/bugs/Installation_fails:___34__Duplicate_instance_declarations__34__.mdwn @@ -0,0 +1,35 @@ +### Please describe the problem. + +[380 of 462] Compiling Assistant.WebApp.Types ( Assistant/WebApp/Types.hs, dist/build/git-annex/git-annex-tmp/Assistant/WebApp/Types.o ) + +Assistant/WebApp/Types.hs:157:10: + Duplicate instance declarations: + instance PathPiece Bool + -- Defined at Assistant/WebApp/Types.hs:157:10 + instance PathPiece Bool + -- Defined in `path-pieces-0.1.4:Web.PathPieces' +cabal: Error: some packages failed to install: +git-annex-5.20140709 failed during the building phase. The exception was: +ExitFailure 1 + + +### What steps will reproduce the problem? + +cabal install git-annex --bindir=$HOME/bin + + +### What version of git-annex are you using? On what operating system? +git-annex-5.20140709, Fedora 20 + + +### 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. +"""]] + +> Already fixed in git yesterday. [[done]] --[[Joey]] diff --git a/doc/bugs/Merge_involving_symlink_yields_unexpected_results.mdwn b/doc/bugs/Merge_involving_symlink_yields_unexpected_results.mdwn new file mode 100644 index 0000000000..1ebd4039bc --- /dev/null +++ b/doc/bugs/Merge_involving_symlink_yields_unexpected_results.mdwn @@ -0,0 +1,51 @@ +### Please describe the problem. +When creating a symlink in repository A, and creating a regular file under the same name in repository B, syncing B will yield the result that the symlink is lost, and both the original filename and the .variant file will point to the same annex object containing the original content from B. + +Both A and B are indirect mode repos. + +### What steps will reproduce the problem? + +[[!format sh """ + +#Initial state: + +repo-A$ echo file1 +This is file 1. +repo-B$ echo file1 +This is file 1. + +#Make conflicting changes: + +repo-A$ ln -s file1 file2; git add file2; git commit -m "Add file2 as symlink." +repo-B$ echo "This is file 2." > file2; git annex add file2; git commit -m "Add file2 as regular file." + +#Sync it: + +repo-A$ git annex sync +repo-B$ git annex sync + +#Strange result in repo-B: + +repo-B$ ls -l file2* +file2 -> .git/annex/objects/$HASH1 +file2.variant1234 -> .git/annex/objects/$HASH1 +repo-B$ cat file2 file2.variantXXXX +This is file 2. +This is file 2. + +#Repo-A leaves the symlink change untouched and adds a .variant containing the new regular file data. + +repo-A$ ls -l file* +file2 -> file1 +file2.variant1234 -> .git/annex/objects/$HASH1 +repo-A$ cat file.variant1234 +This is file 2. +"""]] +### What version of git-annex are you using? On what operating system? +Linux 3.15.3 +git-annex 5.20140613 + + +[[!tag confirmed]] + +> [[fixed|done]] --[[Joey]] diff --git a/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_1_e8a2ea1b8573bee45b70bcc7ef7e3bed._comment b/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_1_e8a2ea1b8573bee45b70bcc7ef7e3bed._comment new file mode 100644 index 0000000000..624b39a795 --- /dev/null +++ b/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_1_e8a2ea1b8573bee45b70bcc7ef7e3bed._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="zardoz" + ip="134.147.14.84" + subject="comment 1" + date="2014-07-07T14:09:33Z" + content=""" +Sorry, the initial «echos» should have been «cat» of course. +"""]] diff --git a/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_2_b6182038292bd72dc4711e4575510172._comment b/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_2_b6182038292bd72dc4711e4575510172._comment new file mode 100644 index 0000000000..39f60f7753 --- /dev/null +++ b/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_2_b6182038292bd72dc4711e4575510172._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 2" + date="2014-07-07T17:17:49Z" + content=""" +Drat, so many bug fixes and test cases and this still got through? +"""]] diff --git a/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_3_c6ca13d475b3f846c95606c20e1a3052._comment b/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_3_c6ca13d475b3f846c95606c20e1a3052._comment new file mode 100644 index 0000000000..292d117435 --- /dev/null +++ b/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_3_c6ca13d475b3f846c95606c20e1a3052._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 3" + date="2014-07-07T17:19:03Z" + content=""" +Ah, I see, it's explicitly because the non-git-annex symlink is involved. Whew! +"""]] diff --git a/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_4_13179e0f72026092e48c13082818ce68._comment b/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_4_13179e0f72026092e48c13082818ce68._comment new file mode 100644 index 0000000000..49210ee559 --- /dev/null +++ b/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_4_13179e0f72026092e48c13082818ce68._comment @@ -0,0 +1,15 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="analysis" + date="2014-07-08T17:52:59Z" + content=""" +When resolveMerge' calls graftin to add A's file2 symlink to B's tree, it actually stages the right symlink (the non-annexed one). + +However, the work tree is left as-is, so it still has the annexed symlink in it. So git status shows file2 as modified. Later syncs will commit that. + +This is why the sync in A doesn't have the problem, as there things are the other way around, and git-annex makes the git-annex symlink, leaving the non-annexed symlink as-is in the work tree. + +So, graftin needs to update the work tree. But it's tricky because graftin is called in 3 situations: non-symlink file, directory, and non-annexed symlink. +Interestingly, in the other 2 cases, git-merge already takes care of updating the work tree -- it deletes the annexed symlink and puts in place either the non-symlink file or the directory. It's only the the case of a merge conflict involving 2 symlinks that git merge doesn't update the tree in this way. It's nice to be able to rely on git-merge in the other 2 cases, especially the directory case (avoids having to manually check out the directory). +"""]] diff --git a/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_5_585c8a5a13bb17032bfe30818345f936._comment b/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_5_585c8a5a13bb17032bfe30818345f936._comment new file mode 100644 index 0000000000..566a0aad8b --- /dev/null +++ b/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_5_585c8a5a13bb17032bfe30818345f936._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="zardoz" + ip="78.49.247.112" + subject="comment 5" + date="2014-07-08T19:17:29Z" + content=""" +Thanks for the swift fix + analysis! If I’m ever around, I’ll lend you a hand on your next truckload of firewood! ;> + +Cheers! +"""]] diff --git a/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X.mdwn b/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X.mdwn new file mode 100644 index 0000000000..0a3815cb96 --- /dev/null +++ b/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X.mdwn @@ -0,0 +1,24 @@ +### Please describe the problem. + +On indirect repos on OS X, when a symlink is moved asisstant does not pick it up it. Even though assistant syncs after delete/move changes are not committed. git annex status returns ?? for the moved files. when I run git annex add on the files it says it added them but instead they still show up as ??. the only way to solve the problem is to manually restart the daemon which commits them. + +### What steps will reproduce the problem? + +Moving an annex file. + + +### What version of git-annex are you using? On what operating system? + +5.20140703 g3cfcd54 + +### 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. +"""]] + +[[!tag moreinfo]] diff --git a/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_1_75c14b405929a8f771a7c261dcc4b7a2._comment b/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_1_75c14b405929a8f771a7c261dcc4b7a2._comment new file mode 100644 index 0000000000..5346cb9495 --- /dev/null +++ b/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_1_75c14b405929a8f771a7c261dcc4b7a2._comment @@ -0,0 +1,42 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="unable to reproduce, please provide transcript" + date="2014-07-11T19:36:37Z" + content=""" +I have tried to reproduce this problem on OSX, but it seems to work fine: + +
+oberon:xx joeyh$ git annex assistant 
+oberon:xx joeyh$ date > foo
+oberon:xx joeyh$ git log --stat
+commit 93a208c6aa0080e70a636181606f53af5f2c4441
+Author: Joey Hess 
+Date:   Fri Jul 11 15:33:50 2014 -0400
+
+ foo | 1 +
+ 1 file changed, 1 insertion(+)
+oberon:xx joeyh$ mv foo bar
+oberon:xx joeyh$ git log --stat
+commit 495592b2977ee96029db99761d20396577ff3c51
+Author: Joey Hess 
+Date:   Fri Jul 11 15:33:54 2014 -0400
+
+ bar | 1 +
+ foo | 1 -
+ 2 files changed, 1 insertion(+), 1 deletion(-)
+
+commit 93a208c6aa0080e70a636181606f53af5f2c4441
+Author: Joey Hess 
+Date:   Fri Jul 11 15:33:50 2014 -0400
+
+ foo | 1 +
+ 1 file changed, 1 insertion(+)
+oberon:xx joeyh$ git annex status
+oberon:xx joeyh$ 
+
+ +> when I run git annex add on the files it says it added them but instead they still show up as ?? + +This must be the root of whatever the problem is, so please provide a transcript of you doing that. +"""]] diff --git a/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_2_f52483415c623ea0649c3805728ce761._comment b/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_2_f52483415c623ea0649c3805728ce761._comment new file mode 100644 index 0000000000..9b7f17789a --- /dev/null +++ b/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_2_f52483415c623ea0649c3805728ce761._comment @@ -0,0 +1,35 @@ +[[!comment format=mdwn + username="https://me.yahoo.com/a/FHnTlSBo1eCGJRwueeKeB6.RCaPbGMPr5jxx8A--#ce0d8" + nickname="Hamza" + subject="comment 2" + date="2014-07-12T10:00:59Z" + content=""" +[[!format sh \"\"\" +host annex/(master) $ ls -a Staging/Rise* +Staging/Rise and Fall of the Berlin Wall - History Channel.mkv +host annex/(master) $ mv Staging/Rise\ and\ Fall\ of\ the\ Berlin\ Wall\ -\ History\ Channel.mkv Documentary/ +host annex/(master) $ git status +On branch master +Untracked files: + (use \"git add ...\" to include in what will be committed) + + Documentary/Rise and Fall of the Berlin Wall - History Channel.mkv + +nothing added to commit but untracked files present (use \"git add\" to track) +host annex/(master) $ ga status +D Documentary/Rise and Fall of the Berlin Wall - History Channel.mkv +host annex/(master) $ git annex add . +add Documentary/Rise and Fall of the Berlin Wall - History Channel.mkv ok +(Recording state in git...) +host annex/(master) $ ga status +D Documentary/Rise and Fall of the Berlin Wall - History Channel.mkv +host annex/(master) $ git annex sync +commit ok +pull server +ok +host annex/(master) $ ga status +D Documentary/Rise and Fall of the Berlin Wall - History Channel.mkv +host annex/(master) $ +\"\"\"]] + +"""]] diff --git a/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_3_fd73fbeef61df106f084ac235fca904a._comment b/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_3_fd73fbeef61df106f084ac235fca904a._comment new file mode 100644 index 0000000000..a659ad2c14 --- /dev/null +++ b/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_3_fd73fbeef61df106f084ac235fca904a._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="https://me.yahoo.com/a/FHnTlSBo1eCGJRwueeKeB6.RCaPbGMPr5jxx8A--#ce0d8" + nickname="Hamza" + subject="comment 3" + date="2014-07-12T10:03:07Z" + content=""" +BTW the mv operation is picked up by the assistant it start syncing immediately after mv but the symlink link is left dangling. I've also waited for the assistant to sync before readding the file. +"""]] diff --git a/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_4_c5e9843a956984efd22bad629930f6bd._comment b/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_4_c5e9843a956984efd22bad629930f6bd._comment new file mode 100644 index 0000000000..a437142af2 --- /dev/null +++ b/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_4_c5e9843a956984efd22bad629930f6bd._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 4" + date="2014-07-14T20:15:07Z" + content=""" +Well, I don't see the \"??\" that you were talking about before in your transcript. I do not understand why the file's status shows as \"D\" which means it's deleted. What does `git ls-files` say? Does this stange behavior persist if you stop the assistant from running and re-run the same git-annex commands? +"""]] diff --git a/doc/bugs/Mtime_of_objects_reset_when_synchronized_to_a_different_repository.mdwn b/doc/bugs/Mtime_of_objects_reset_when_synchronized_to_a_different_repository.mdwn new file mode 100644 index 0000000000..3925b7c105 --- /dev/null +++ b/doc/bugs/Mtime_of_objects_reset_when_synchronized_to_a_different_repository.mdwn @@ -0,0 +1,15 @@ +### Please describe the problem. +Files transferred from one repository to a standard remote by the assistant do not retain the original mtime + +### What steps will reproduce the problem? +Create manually two repositories, in my case on two external drives directly connected to my box, with normal remotes pointing to each other. +Activate git annex assistant and synchronize some files from one to the other. + +### What version of git-annex are you using? On what operating system? +Git annex version 5.20140610-g5ec8bcf on Ubuntu Linux 12.04 + +### Please provide any additional information below. +I've noticed how files synchronized from one repository to another do not retain the original mtime information. +Perhaps it's intended, but in my view retaining the time of modification of the object is essential. + +> [[done]]; dup and/or out of scope, --[[Joey]] diff --git a/doc/bugs/Mtime_of_objects_reset_when_synchronized_to_a_different_repository/comment_1_651965d8a9f0e0c07313c1a2916f77e5._comment b/doc/bugs/Mtime_of_objects_reset_when_synchronized_to_a_different_repository/comment_1_651965d8a9f0e0c07313c1a2916f77e5._comment new file mode 100644 index 0000000000..fcb5c4cc6d --- /dev/null +++ b/doc/bugs/Mtime_of_objects_reset_when_synchronized_to_a_different_repository/comment_1_651965d8a9f0e0c07313c1a2916f77e5._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="108.236.230.124" + subject="comment 1" + date="2014-07-02T17:07:33Z" + content=""" +git makes no attempt to maintain mtimes etc, and neither does git-annex. There are open todo items. There is metastore, etc. +"""]] diff --git a/doc/bugs/No_such_file_with_certain_filenames_using_WORM_backend.mdwn b/doc/bugs/No_such_file_with_certain_filenames_using_WORM_backend.mdwn new file mode 100644 index 0000000000..e68f6610aa --- /dev/null +++ b/doc/bugs/No_such_file_with_certain_filenames_using_WORM_backend.mdwn @@ -0,0 +1,61 @@ +### Please describe the problem. + +I get no such file errors when using WORM backend on files with a certain name. Doesn't like brackets? + +Default backend is fine (see output below). + +### What steps will reproduce the problem? + +See additional info + +### What version of git-annex are you using? On what operating system? + +git-annex version: 5.20140613-g5587055 +On Windows 8.1 +Tried with both Windows command prompt and Git Bash shell. + +### 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 + +git config --add annex.backends WORM +git annex add extras + +add extras/Extra Content - Reason Drum Takes/DT Key Map.pdf ok +add extras/Extra Content - Reason Drum Takes/DT Read Me.pdf ok +add extras/Extra Content - Reason Drum Takes/DT7 Rock - Love (136).reason ok +add extras/Extra Content - Reason Drum Takes/DT7 Rock - Peace (200).reason ok +add extras/Extra Content - Reason Drum Takes/Kit Samples/1. Bass Drum mic (BD)/DT6_BD_Bd_RG_R_G06.aif +git-annex: C:\Studio\.git\annex\objects\b43\d6d\WORM-s178174-m1363015489--extras%Extra Content - Reason Drum Takes%Kit S +amples%1. Bass Drum mic ,40BD,41%DT6_BD_Bd_RG_R_G06.aif\WORM-s178174-m1363015489--extras%Extra Content - Reason Drum Tak +es%Kit Samples%1. Bass Drum mic ,40BD,41%DT6_BD_Bd_RG_R_G06.aif.cache: openFile: does not exist (No such file or directo +ry) +failed +add extras/Extra Content - Reason Drum Takes/Kit Samples/1. Bass Drum mic (BD)/DT6_BD_Bd_RG_R_G09.aif +git-annex: C:\Studio\.git\annex\objects\e90\b5c\WORM-s199108-m1363015489--extras%Extra Content - Reason Drum Takes%Kit S +amples%1. Bass Drum mic ,40BD,41%DT6_BD_Bd_RG_R_G09.aif\WORM-s199108-m1363015489--extras%Extra Content - Reason Drum Tak +es%Kit Samples%1. Bass Drum mic ,40BD,41%DT6_BD_Bd_RG_R_G09.aif.cache: openFile: does not exist (No such file or directo +ry) +failed +add extras/Extra Content - Reason Drum Takes/Kit Samples/1. Bass Drum mic (BD)/DT6_BD_Bd_RG_R_G14.aif +git-annex: C:\Studio\.git\annex\objects\995\4e7\WORM-s201570-m1363015489--extras%Extra Content - Reason Drum Takes%Kit S +amples%1. Bass Drum mic ,40BD,41%DT6_BD_Bd_RG_R_G14.aif\WORM-s201570-m1363015489--extras%Extra Content - Reason Drum Tak +es%Kit Samples%1. Bass Drum mic ,40BD,41%DT6_BD_Bd_RG_R_G14.aif.cache: openFile: does not exist (No such file or directo +ry) +failed + +git config --unset annex.backends +git annex add extras + +add extras/Extra Content - Reason Drum Takes/DT Key Map.pdf ok +add extras/Extra Content - Reason Drum Takes/DT Read Me.pdf ok +add extras/Extra Content - Reason Drum Takes/DT7 Rock - Love (136).reason ok +add extras/Extra Content - Reason Drum Takes/DT7 Rock - Peace (200).reason ok +add extras/Extra Content - Reason Drum Takes/Kit Samples/1. Bass Drum mic (BD)/DT6_BD_Bd_RG_R_G06.aif ok +add extras/Extra Content - Reason Drum Takes/Kit Samples/1. Bass Drum mic (BD)/DT6_BD_Bd_RG_R_G09.aif ok +add extras/Extra Content - Reason Drum Takes/Kit Samples/1. Bass Drum mic (BD)/DT6_BD_Bd_RG_R_G14.aif ok + +# End of transcript or log. +"""]] diff --git a/doc/bugs/No_such_file_with_certain_filenames_using_WORM_backend/comment_1_a1db4ff3e8517d7cbe649bca1ed275d0._comment b/doc/bugs/No_such_file_with_certain_filenames_using_WORM_backend/comment_1_a1db4ff3e8517d7cbe649bca1ed275d0._comment new file mode 100644 index 0000000000..7136cabb02 --- /dev/null +++ b/doc/bugs/No_such_file_with_certain_filenames_using_WORM_backend/comment_1_a1db4ff3e8517d7cbe649bca1ed275d0._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 1" + date="2014-07-05T21:55:46Z" + content=""" +Hmm, the filename `WORM-s178174-m1363015489--extras%Extra\ Content\ -\ Reason\ Drum\ Takes%Kit\ Samples%1.\ Bass\ Drum\ mic\ ,40BD,41%DT6_BD_Bd_RG_R_G06.aif.cach` is a legal filename on FAT at least, dunno about NTFS.. +"""]] diff --git a/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass.mdwn b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass.mdwn new file mode 100644 index 0000000000..bb76e96e52 --- /dev/null +++ b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass.mdwn @@ -0,0 +1,119 @@ +### Please describe the problem. + +git-annex assistant on Mac OSX 10.8.5 fails to download new repo files from SSH remote/rsync shared-encryption annex after initial startup. The assistant does sync with the repo and create symlinks for new files, and file contents can manually be retrieved using 'git annex get $file' once the file is in the repository. However, assistant makes no subsequent attempt to download the new files until assistant is restarted. Once restarted, assistant downloads all new files for which is previously only had symlinks. + +git-annex whereis $file does not indicate that the files represented as symlinks are located on the Mac OSX clients in question until after files are manually retrieved or assistant is retarted and files are automatically downloaded, replacing the symlinks. + +git-annex assistant on Mac OSX does not have problems uploading files to the remote as they are added. + +git-annex 5.20140517.4 on Ubuntu 12.04 behaves as expected and downloads new files (with content) properly as they are added to the repo. + +### What steps will reproduce the problem? + +(all using git-annex webapp) + +--create client repo on Mac OSX, direct mode (used two 10.8.5 machines) + +--create client repo on Ubuntu, direct mode (used several 12.04 VMs) + +--create repo (transfer mode) on VPS + +--create shared encryption repo (backup mode) on same VPS + +--add VPS transfer repo to each client (shared encryption repo appears and syncing is enabled for each client) + +--create file in Mac OSX annex - file gets distributed to VPS backup repo and each linux system. Symlink is created on 2nd Mac OS X machine. + +--create file in Ubuntu VM annex - file gets distributed to VPS backup repo and each linux system. Symlink is created on both Mac OSX machines. + + + +### What version of git-annex are you using? On what operating system? +git-annex version: 5.20140421 (installed using brew), Mac OSX 10.8.5 + +I tested 5.20140613 (from brew) also and it appears to also not download new files automatically. + + + +### Please provide any additional information below. +I've tested a few things I thought might be related. Since restarting assistant seems to temporarily "fix" the problem, I thought there may be some SSH client caching problems... as in the existing connection not being reused properly. However, I disabled annex.sshcaching as described elsewhere and that did not have any affect. + +I've enabled XMPP and it only introduced more confusion as the XMPP messaging was not reliably consistent. + +daemon.log for Mac OS systems does not show the "Pusher" process getting initiated once new files are added to the repo if the assistant is currently running, however it is logged immediately after assistant is started if there are new files in the repo. + +daemon.log for Ubuntu systems does contain the Pusher process event following the repo sync that takes place once the file has been added to the repo. + + + +[[!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 + +MACOSX:user$git-annex assistant --autostart + +daemon.log: + +[2014-06-25 11:52:04 CDT] main: starting assistant version 5.20140421 +[2014-06-25 11:52:09 CDT] TransferScanner: Syncing with serverrepo + +Already up-to-date. +(scanning...) [2014-06-25 11:52:09 CDT] Watcher: Performing startup scan + +Already up-to-date. +(started...) +[2014-06-25 11:52:10 CDT] Committer: Committing changes to git +(Recording state in git...) +(gpg) +Already up-to-date. + +Already up-to-date. +[2014-06-25 11:52:11 CDT] Pusher: Syncing with serverrepo + +GPGHMACSHA1--3e18c6a4ee5aece84f4f00fc2e7fcb828d8fa7d8 +Everything up-to-date0.00kB/s 0:00:00 +Everything up-to-date4.56MB/s 0:00:00 + 8409197 100% 4.94MB/s 0:00:01 (xfer#1, to-check=0/1) + +sent 38 bytes received 8411383 bytes 2403263.14 bytes/sec +total size is 8409197 speedup is 1.00 +[2014-06-25 11:52:13 CDT] Transferrer: Downloaded 67-more-fromubuntu +[2014-06-25 11:52:14 CDT] Committer: Adding 67-more-fromubuntu +add /Users/user/computer_annex/67-more-fromubuntu ok +[2014-06-25 11:52:14 CDT] Committer: Committing changes to git +(Recording state in git...) +[2014-06-25 11:52:20 CDT] Pusher: Syncing with serverrepo +(Recording state in git...) +To ssh://user@git-annex-server.remotehost.net-user_.2Fhome.2Fuser.2Fserver_repo/home/user/server_repo/ + 7e375a8..1a64e4c git-annex -> synced/git-annex +[2014-06-25 11:52:36 CDT] RemoteControl: Syncing with serverrepo +From ssh://git-annex-server.remotehost.net-user_.2Fhome.2Fuser.2Fserver_repo/home/user/server_repo + 1a64e4c..dee9f84 synced/git-annex -> serverrepo/synced/git-annex + d424057..989003e synced/master -> serverrepo/synced/master +(merging serverrepo/synced/git-annex into git-annex...) + +<<>> + +Updating d424057..989003e +Fast-forward + 89-more-fromubuntu | 1 + + 1 file changed, 1 insertion(+) + create mode 120000 89-more-fromubuntu +[2014-06-25 11:58:42 CDT] RemoteControl: Syncing with serverrepo +From ssh://git-annex-server.remotehost.net-user_.2Fhome.2Fuser.2Fserver_repo/home/user/server_repo + dee9f84..b24c8bf synced/git-annex -> serverrepo/synced/git-annex +(merging serverrepo/synced/git-annex into git-annex...) +[2014-06-25 11:58:47 CDT] RemoteControl: Syncing with serverrepo +From ssh://git-annex-server.remotehost.net-user_.2Fhome.2Fuser.2Fserver_repo/home/user/server_repo + b24c8bf..6488b45 synced/git-annex -> serverrepo/synced/git-annex +(merging serverrepo/synced/git-annex into git-annex...) +[2014-06-25 11:58:56 CDT] RemoteControl: Syncing with serverrepo +From ssh://git-annex-server.remotehost.net-user_.2Fhome.2Fuser.2Fserver_repo/home/user/server_repo + 6488b45..c73c180 synced/git-annex -> serverrepo/synced/git-annex +(merging serverrepo/synced/git-annex into git-annex...) + + + + +# End of transcript or log. +"""]] diff --git a/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_10_3feba4ba84efb77bd4f8f46b6b4600f1._comment b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_10_3feba4ba84efb77bd4f8f46b6b4600f1._comment new file mode 100644 index 0000000000..37aa47c37e --- /dev/null +++ b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_10_3feba4ba84efb77bd4f8f46b6b4600f1._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawncukUQl56TwiBJb7dIyAqP1YirNg_wjR4" + nickname="Matthew" + subject="Actions -> Sync Now in webapp does properly download new files" + date="2014-07-17T13:50:06Z" + content=""" +confirmed - your understanding is correct +"""]] diff --git a/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_1_a33fcd088e419d8e6c459e42f21f8bbe._comment b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_1_a33fcd088e419d8e6c459e42f21f8bbe._comment new file mode 100644 index 0000000000..b78fd5aa07 --- /dev/null +++ b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_1_a33fcd088e419d8e6c459e42f21f8bbe._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawnu1NjsjNS3m0OxiYLKO-5SKNpSERxpi6k" + nickname="Matthew" + subject="comment 1" + date="2014-07-09T13:56:31Z" + content=""" +\"workaround\" is just a cron job that runs 'git annex sync --content' every N minutes... + +Is there any possible configuration error I've made that would cause the OSX clients to behave differently than the linux clients despite ostensibly being set up identically?? +"""]] diff --git a/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_2_47196f7e781137751ebd1a1d7083838a._comment b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_2_47196f7e781137751ebd1a1d7083838a._comment new file mode 100644 index 0000000000..ee5ad138e5 --- /dev/null +++ b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_2_47196f7e781137751ebd1a1d7083838a._comment @@ -0,0 +1,18 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 2" + date="2014-07-10T19:19:36Z" + content=""" +Could you please go into some more detail about these two things: + +> --create repo (transfer mode) on VPS +> +> --create shared encryption repo (backup mode) on same VPS + +It's not clear to me what kind of repositories these are. Are they bare git repositories? What version of git-annex, if any, is installed on that VPS? + +> git-annex whereis $file does not indicate that the files represented as symlinks are located on the Mac OSX clients in question until after files are manually retrieved + +Well, I'd not expect whereis to say that the file is in a repository until it's retrieved into that repository. However, does whereis, on the OSX clients, ever say that the file has reached one of the repos on the VPS? +"""]] diff --git a/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_3_672d98ee06e051430f8e01faa93bb4cf._comment b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_3_672d98ee06e051430f8e01faa93bb4cf._comment new file mode 100644 index 0000000000..e26492dd7c --- /dev/null +++ b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_3_672d98ee06e051430f8e01faa93bb4cf._comment @@ -0,0 +1,28 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawncukUQl56TwiBJb7dIyAqP1YirNg_wjR4" + nickname="Matthew" + subject="comment 3" + date="2014-07-11T17:06:43Z" + content=""" +I created an local repository on each of 2 OS X (10.8.5) systems running git-annex version 5.20140421, and each of 2 Ubuntu 12.04 systems running version 5.20140517.4 + +I then created a remote SSH repository by selecting \"Make an unencrypted git repository on the server\" - this repo is in \"transfer\" mode. + +On the 2nd OSX client, I added a remote SSH repository, providing the same host and path information and elected to \"combine\" my local repo with the remote repo so that files would stay in sync. + +I did the same on each of the linux clients. + +git-annex indicates that local repos on each machine are in direct mode and show all expected semi trusted repos: web, SSH remote, other clients that have combined with the SSH remote. + +git-annex indicates that the SSH remote repo is in indirect mode + +git indicates that all repos are in bare mode + +git-annex version 5.20140412ubuntu1 is installed on the VPS, and 'git-annex shell notify changes' processes are running. + +Agreed on the behavior of git-annex whereis… just pointing out that the location info is accurate. + +The 2nd, encrypted repo may have no bearing at all because even when I remove it, the client behavior on OSX doesn't change. + +Thanks for taking the time to consider this! +"""]] diff --git a/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_4_06fb3031b838cd443326f4ecd689b600._comment b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_4_06fb3031b838cd443326f4ecd689b600._comment new file mode 100644 index 0000000000..0f77607a04 --- /dev/null +++ b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_4_06fb3031b838cd443326f4ecd689b600._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawncukUQl56TwiBJb7dIyAqP1YirNg_wjR4" + nickname="Matthew" + subject="comment 4" + date="2014-07-11T17:11:41Z" + content=""" +I should add that in the web app on OSX, the behavior is consistent; syncing the local repository on an OSX client create a symlink (if that hasn't already been done in the background). resyncing \"here\" (local client) doesn't download the file. syncing the remote SSH repo, however does download the file content (as does git-annex sync --content) + +thanks! +"""]] diff --git a/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_5_42d447400c15acf6ca031d165b2c781c._comment b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_5_42d447400c15acf6ca031d165b2c781c._comment new file mode 100644 index 0000000000..04a5de75c8 --- /dev/null +++ b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_5_42d447400c15acf6ca031d165b2c781c._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawncukUQl56TwiBJb7dIyAqP1YirNg_wjR4" + nickname="Matthew" + subject="comment 5" + date="2014-07-11T18:10:06Z" + content=""" +Sorry to miss this previously, but, yes, whereis does indicate that it has made it to both of the remotes. +"""]] diff --git a/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_6_edd7d5d5c761ff665840f0ef7bea50c9._comment b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_6_edd7d5d5c761ff665840f0ef7bea50c9._comment new file mode 100644 index 0000000000..9b28909867 --- /dev/null +++ b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_6_edd7d5d5c761ff665840f0ef7bea50c9._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 6" + date="2014-07-16T20:51:36Z" + content=""" +5.20140421 happens to be the very first version of git-annex to support notifychanges. I forget what bugs that first attempt may have had. Have you tried upgrading the macs to a newer version? + + +"""]] diff --git a/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_7_18e5334ab89efcf89ba8847436d55065._comment b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_7_18e5334ab89efcf89ba8847436d55065._comment new file mode 100644 index 0000000000..197fca67af --- /dev/null +++ b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_7_18e5334ab89efcf89ba8847436d55065._comment @@ -0,0 +1,13 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawncukUQl56TwiBJb7dIyAqP1YirNg_wjR4" + nickname="Matthew" + subject="comment 7" + date="2014-07-16T21:23:00Z" + content=""" +git-annex version: 5.20140613 also behaves the same way, however it generates a new log message during the sync attempt: + +Automatic merge went well; stopped before committing as requested + + + +"""]] diff --git a/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_8_35b2bbdc24a7bd686527cd1839dee7d0._comment b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_8_35b2bbdc24a7bd686527cd1839dee7d0._comment new file mode 100644 index 0000000000..f551fe6275 --- /dev/null +++ b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_8_35b2bbdc24a7bd686527cd1839dee7d0._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 8" + date="2014-07-16T22:23:50Z" + content=""" +Hmm, it looks to me like the transfer scan may not be getting run after the git branches get pulled. I would expect to see \"starting scan of\" in the debug log when it does that scan. Do you see that in the log? + +AIUI, when you click on Actions -> Sync Now in the webapp for the repository that contains the content, it gets downloaded right? That does the same scan that should be automatically run after a branch is pulled. +"""]] diff --git a/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_9_a771c6b453e6a4b3895dd69a53093440._comment b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_9_a771c6b453e6a4b3895dd69a53093440._comment new file mode 100644 index 0000000000..bf57b46be3 --- /dev/null +++ b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_9_a771c6b453e6a4b3895dd69a53093440._comment @@ -0,0 +1,246 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawncukUQl56TwiBJb7dIyAqP1YirNg_wjR4" + nickname="Matthew" + subject="comment 9" + date="2014-07-17T01:58:29Z" + content=""" +Hi Joey, + +Thanks for taking the time to follow up on this - I sincerely appreciate it! + +Only immediately after I start the assistant does the \"starting scan of\" message get logged: + +[2014-07-16 20:38:07 CDT] TransferScanner: starting scan of [Remote { name =\"hostrepo\" }] + +and, at that point, new files are downloaded. + +If the assistant has been running for a while, I then create a new file in an annex on another machine, and the OS X assistant has synced and then created a symlink for new files, the following log is generated (NOTE the groovy scroodled first line if it's at all of interest...): + + +[2014-07-16 20:30:[312 0C1D4T-] 0c7a-ll1:6 g2i0t: 3[0\":--3g1i tC-DdTi]r =R/eUmsoetresC/omnhtirlotly:/ sShYiNnCiIeNrG_ asnsnhe:x///.mgaitte\"o,@\"g-i-tw-oarnkn-etxr-egeo=t/aU.sienrfsr/omnhtiiletrys/.snheitn-imeart_eaon_ngeoxt\"a,_\"r-ecp\"o,/\"~c/ogroet.ab_arreep=of/a +lse\",\"fetch\",\"hostrepo\"] + +[2014-07-16 20:30:31 CDT] RemoteControl: Syncing with hostrepo +From ssh://git-annex-host.vpshost.net-someuser_host_repo/~/host_repo + fdd1eff..e1057e0 synced/git-annex -> hostrepo/synced/git-annex + fa3cfb0..e4ba411 synced/master -> hostrepo/synced/master + +[2014-07-16 20:30:32 CDT] RemoteControl: DONESYNCING ssh://someuser@git-annex-host.vpshost.net-someuser_host_repo/~/host_repo/ 1 + +[2014-07-16 20:30:32 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"git-annex\"] + +[2014-07-16 20:30:32 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"] + +[2014-07-16 20:30:32 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..fdd1effb8d2b8073e94725874e16056d6557f199\",\"--oneline\",\"-n1\"] + +[2014-07-16 20:30:32 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..bfef6b84186d59431377343ab968e255db8c76fa\",\"--oneline\",\"-n1\"] + +[2014-07-16 20:30:32 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..e1057e037f03ba804f021c8c39073b2efd1fad08\",\"--oneline\",\"-n1\"] +(merging hostrepo/synced/git-annex into git-annex...) + +[2014-07-16 20:30:32 CDT] feed: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-index\",\"-z\",\"--index-info\"] + +[2014-07-16 20:30:32 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"diff-index\",\"--raw\",\"-z\",\"-r\",\"--no-renames\",\"-l0\",\"--cached\",\"e1057e037f03ba804f021c8c39073b2efd1fad08\"] + +[2014-07-16 20:30:32 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"e1057e037f03ba804f021c8c39073b2efd1fad08..refs/heads/git-annex\",\"--oneline\",\"-n1\"] + +[2014-07-16 20:30:32 CDT] call: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-ref\",\"refs/heads/git-annex\",\"e1057e037f03ba804f021c8c39073b2efd1fad08\"] + +[2014-07-16 20:30:32 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"ls-tree\",\"--full-tree\",\"-z\",\"--\",\"refs/heads/git-annex\",\"uuid.log\",\"remote.log\",\"trust.log\",\"group.log\",\"numcopies.log\",\"schedule.log\",\"preferred-content.log\",\"required-content.log\",\"group-preferred-content.log\"] + +[2014-07-16 20:30:32 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"symbolic-ref\",\"HEAD\"] + +[2014-07-16 20:30:32 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"refs/heads/annex/direct/master\"] + +[2014-07-16 20:30:32 CDT] Merger: merging refs/remotes/hostrepo/synced/master into refs/heads/annex/direct/master + +[2014-07-16 20:30:32 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/annex/direct/master\"] + +[2014-07-16 20:30:32 CDT] call: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex/.git/annex/merge/\",\"-c\",\"core.bare=false\",\"merge\",\"--no-edit\",\"refs/remotes/hostrepo/synced/master\"] + +Updating fa3cfb0..e4ba411 +Fast-forward + from-ubuntu | 1 + + 1 file changed, 1 insertion(+) + create mode 120000 from-ubuntu + +[2014-07-16 20:30:32 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"diff-tree\",\"-z\",\"--raw\",\"--no-renames\",\"-l0\",\"-r\",\"fa3cfb01cc4493ed8a7cf84dff38bbba1fc042f9\",\"HEAD\"] + +[2014-07-16 20:30:33 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"git-annex\"] + +[2014-07-16 20:30:33 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"] + +[2014-07-16 20:30:33 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..e1057e037f03ba804f021c8c39073b2efd1fad08\",\"--oneline\",\"-n1\"] + +[2014-07-16 20:30:33 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..bfef6b84186d59431377343ab968e255db8c76fa\",\"--oneline\",\"-n1\"] + +[2014-07-16 20:30:33 CDT] feed: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-index\",\"-z\",\"--index-info\"] + +[2014-07-16 20:30:33 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"diff-index\",\"--raw\",\"-z\",\"-r\",\"--no-renames\",\"-l0\",\"--cached\",\"refs/heads/git-annex\"] + +[2014-07-16 20:30:45 CDT][ cal2l0:1 4g-i0t7 -[16\" -2-0g:i3t0-:di4r5= /CUDsTe]r sR/emmhoitletCyo/nsthrionli:e rS_YaNnCnIeNxG/ .sgsiht:\"/,/\"m-a-tweoor@kg-ittr-eaen=n/eUxs-egrost/am.hiinlftryo/nsthiienrise.rn_eatn-nmeaxt\"e,o\"_-gco\"t,a\"_croerpeo./b~a/rgeo=tfaa_lrseep\"o,/\" +fetch\",\"hostrepo\"] + +[2014-07-16 20:30:45 CDT] RemoteControl: Syncing with hostrepo +From ssh://git-annex-host.vpshost.net-someuser_host_repo/~/host_repo + e1057e0..d44a67a synced/git-annex -> hostrepo/synced/git-annex + +[2014-07-16 20:30:47 CDT] RemoteControl: DONESYNCING ssh://someuser@git-annex-host.vpshost.net-someuser_host_repo/~/host_repo/ 1 + +[2014-07-16 20:30:47 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"git-annex\"] + +[2014-07-16 20:30:47 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"] + +[2014-07-16 20:30:47 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..e1057e037f03ba804f021c8c39073b2efd1fad08\",\"--oneline\",\"-n1\"] + +[2014-07-16 20:30:47 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..bfef6b84186d59431377343ab968e255db8c76fa\",\"--oneline\",\"-n1\"] + +[2014-07-16 20:30:47 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..d44a67a5795c28e423a9ac018bead9dac793be5c\",\"--oneline\",\"-n1\"] +(merging hostrepo/synced/git-annex into git-annex...) + +[2014-07-16 20:30:47 CDT] feed: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-index\",\"-z\",\"--index-info\"] + +[2014-07-16 20:30:47 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"diff-index\",\"--raw\",\"-z\",\"-r\",\"--no-renames\",\"-l0\",\"--cached\",\"d44a67a5795c28e423a9ac018bead9dac793be5c\"] + +[2014-07-16 20:30:47 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"d44a67a5795c28e423a9ac018bead9dac793be5c..refs/heads/git-annex\",\"--oneline\",\"-n1\"] + +[2014-07-16 20:30:47 CDT] call: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-ref\",\"refs/heads/git-annex\",\"d44a67a5795c28e423a9ac018bead9dac793be5c\"] + +[2014-07-16 20:30:48 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"git-annex\"] + +[2014-07-16 20:30:48 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"] + +[2014-07-16 20:30:48 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..d44a67a5795c28e423a9ac018bead9dac793be5c\",\"--oneline\",\"-n1\"] + +[2014-07-16 20:30:48 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..bfef6b84186d59431377343ab968e255db8c76fa\",\"--oneline\",\"-n1\"] + +[2014-07-16 20:30:48 CDT] feed: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-index\",\"-z\",\"--index-info\"] + +[2014-07-16 20:30:48 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"diff-index\",\"--raw\",\"-z\",\"-r\",\"--no-renames\",\"-l0\",\"--cached\",\"refs/heads/git-annex\"] + +[2014-07-16 20:30:51 CD[T]2 0c1a4l-l:0 7g-it1 6[ \"2-0-:g3i0t:-d5i1r =C/DUTs]e rRse/mmohtielCtoyn/tsrhoiln:i eSrY_NaCnInNeGx /s.sghi:t/\"/,m\"a-t-ewoo@rgki-tt-raenen=e/xU-sgeortsa/.mihniflrtoyn/tsiheirnsi.enre_ta-nmnaetxe\"o,_\"g-oct\"a,_\"rceoproe/.~b/agroet=af_arlespeo\"/, +\"fetch\",\"hostrepo\"] + +[2014-07-16 20:30:51 CDT] RemoteControl: Syncing with hostrepo +From ssh://git-annex-host.vpshost.net-someuser_host_repo/~/host_repo + d44a67a..660d71a synced/git-annex -> hostrepo/synced/git-annex + +[2014-07-16 20:30:51 CDT] RemoteControl: DONESYNCING ssh://someuser@git-annex-host.vpshost.net-someuser_host_repo/~/host_repo/ 1 + +[2014-07-16 20:30:51 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"git-annex\"] + +[2014-07-16 20:30:51 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"] + +[2014-07-16 20:30:51 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..d44a67a5795c28e423a9ac018bead9dac793be5c\",\"--oneline\",\"-n1\"] + +[2014-07-16 20:30:51 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..bfef6b84186d59431377343ab968e255db8c76fa\",\"--oneline\",\"-n1\"] + +[2014-07-16 20:30:52 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..660d71ac55b47061c531e5c8fa2af7910f2e13aa\",\"--oneline\",\"-n1\"] +(merging hostrepo/synced/git-annex into git-annex...) + +[2014-07-16 20:30:52 CDT] feed: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-index\",\"-z\",\"--index-info\"] + +[2014-07-16 20:30:52 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"diff-index\",\"--raw\",\"-z\",\"-r\",\"--no-renames\",\"-l0\",\"--cached\",\"660d71ac55b47061c531e5c8fa2af7910f2e13aa\"] + +[2014-07-16 20:30:52 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"660d71ac55b47061c531e5c8fa2af7910f2e13aa..refs/heads/git-annex\",\"--oneline\",\"-n1\"] + +[2014-07-16 20:30:52 CDT] call: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-ref\",\"refs/heads/git-annex\",\"660d71ac55b47061c531e5c8fa2af7910f2e13aa\"] + +[2014-07-16 20:30:52 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"git-annex\"] + +[2014-07-16 20:30:52 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"] + +[2014-07-16 20:30:52 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..660d71ac55b47061c531e5c8fa2af7910f2e13aa\",\"--oneline\",\"-n1\"] + +[2014-07-16 20:30:53 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..bfef6b84186d59431377343ab968e255db8c76fa\",\"--oneline\",\"-n1\"] + +[2014-07-16 20:30:53 CDT] feed: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-index\",\"-z\",\"--index-info\"] + +[2014-07-16 20:30:53 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"diff-index\",\"--raw\",\"-z\",\"-r\",\"--no-renames\",\"-l0\",\"--cached\",\"refs/heads/git-annex\"] + +[2014-07-16 20[:32101:4-007-71 6 C2D0T:]3 1:ca0l7l :C DgTi]t Re[m\"ot-e-Cognitrtol-: dSiYNrCI=NG/ Usssh:e/r/msa/tmeoh@giitl-tayn/nesx-hgoitan.iinefrron_tiaerns.nneetx-/m.agtieto\"_,g\"o-t-a_wroepro/k~/-gottar_reepeo/= +/Users/someuser/local_ann[ex\"2,0\"1-4c-\",0\"7c-o1r6e .2b0a:r3e1=:fa0l7s eC\"D,T\"]f eRtecmho\"t,e\"Cgoonttarroelp:o \"] +Syncing with hostrepo +From ssh://git-annex-host.vpshost.net-someuser_host_repo/~/host_repo + 660d71a..273bc7f synced/git-annex -> hostrepo/synced/git-annex + +[2014-07-16 20:31:09 CDT] RemoteControl: DONESYNCING ssh://someuser@git-annex-host.vpshost.net-someuser_host_repo/~/host_repo/ 1 + +[2014-07-16 20:31:09 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"git- +annex\"] + +[2014-07-16 20:31:09 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"] + +[2014-07-16 20:31:09 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..660d71ac55b47061c531e5c8fa2af7910f2e13aa\",\"--oneline\",\"-n1\"] + +[2014-07-16 20:31:09 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..bfef6b84186d59431377343ab968e255db8c76fa\",\"--oneline\",\"-n1\"] + +[2014-07-16 20:31:09 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..273bc7f261a79539abcc237f1f0bbf5cd4f57add\",\"--oneline\",\"-n1\"] +(merging hostrepo/synced/git-annex into git-annex...) + +[2014-07-16 20:31:09 CDT] feed: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-index\",\"-z\",\"--index-info\"] + +[2014-07-16 20:31:09 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"diff-index\",\"--raw\",\"-z\",\"-r\",\"--no-renames\",\"-l0\",\"--cached\",\"273bc7f261a79539abcc237f1f0bbf5cd4f57add\"] + +[2014-07-16 20:31:09 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"273bc7f261a79539abcc237f1f0bbf5cd4f57add..refs/heads/git-annex\",\"--oneline\",\"-n1\"] + +[2014-07-16 20:31:09 CDT] call: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-ref\",\"refs/heads/git-annex\",\"273bc7f261a79539abcc237f1f0bbf5cd4f57add\"] + +[2014-07-16 20:31:10 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"git-annex\"] + +[2014-07-16 20:31:10 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"] + +[2014-07-16 20:31:10 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..273bc7f261a79539abcc237f1f0bbf5cd4f57add\",\"--oneline\",\"-n1\"] + +[2014-07-16 20:31:10 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..bfef6b84186d59431377343ab968e255db8c76fa\",\"--oneline\",\"-n1\"] + +[2014-07-16 20:31:10 CDT] feed: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-index\",\"-z\",\"--index-info\"] + +[2014-07-16 20:31:10 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"diff-index\",\"--raw\",\"-z\",\"-r\",\"--no-renames\",\"-l0\",\"--cached\",\"refs/heads/git-annex\"] + +[2014-07-16 20:31:11 CDT] Watcher: directory deleted /Users/someuser/local_annex/local_annex-test + +[2014-07-16 20:31:11 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"ls-files\",\"--deleted\",\"-z\",\"--\",\"/Users/someuser/local_annex/local_annex-test\"] + +[2014-07-16 20:31[:1270 1C4D-T]0 7c-al1l6: 2g0i:t3 1[:\"-1-7g iCtD-Td]i rR=e/mUosteerCso/nmthriollt:y /SsYhNiCnIiNeGr _sasnhn:e/x//m.agtieto\"@,g\"i-t--waonrnke-xt-rgeoet=a/.Uisnefrrso/nmthiielrtsy./nsehti-nmiaetre_oa_ngnoetxa\"_r,e\"po-/c~\"/g,o\"tcao_rreep.ob/a +re=false\",\"fetch\",\"g[ot2a0r1e4p-o0\"7]- +16 20:31:17 CDT] RemoteControl: Syncing with hostrepo +From ssh://git-annex-host.vpshost.net-someuser_host_repo/~/host_repo + 273bc7f..ce6dd68 synced/git-annex -> hostrepo/synced/git-annex + +[2014-07-16 20:31:18 CDT] RemoteControl: DONESYNCING ssh://someuser@git-annex-host.vpshost.net-someuser_host_repo/~/host_repo/ 1 + +[2014-07-16 20:31:18 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"git-annex\"] + +[2014-07-16 20:31:18 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"] + +[2014-07-16 20:31:18 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..273bc7f261a79539abcc237f1f0bbf5cd4f57add\",\"--oneline\",\"-n1\"] + +[2014-07-16 20:31:18 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..bfef6b84186d59431377343ab968e255db8c76fa\",\"--oneline\",\"-n1\"] + +[2014-07-16 20:31:18 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..ce6dd68adec97bbf73f5da408c17511aca8840c5\",\"--oneline\",\"-n1\"] +(merging hostrepo/synced/git-annex into git-annex...) + +[2014-07-16 20:31:18 CDT] feed: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-index\",\"-z\",\"--index-info\"] + +[2014-07-16 20:31:18 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"diff-index\",\"--raw\",\"-z\",\"-r\",\"--no-renames\",\"-l0\",\"--cached\",\"ce6dd68adec97bbf73f5da408c17511aca8840c5\"] + +[2014-07-16 20:31:18 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"ce6dd68adec97bbf73f5da408c17511aca8840c5..refs/heads/git-annex\",\"--oneline\",\"-n1\"] + +[2014-07-16 20:31:18 CDT] call: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-ref\",\"refs/heads/git-annex\",\"ce6dd68adec97bbf73f5da408c17511aca8840c5\"] + +[2014-07-16 20:31:19 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"git-annex\"] + +[2014-07-16 20:31:19 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"] + +[2014-07-16 20:31:19 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..ce6dd68adec97bbf73f5da408c17511aca8840c5\",\"--oneline\",\"-n1\"] + +[2014-07-16 20:31:19 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..bfef6b84186d59431377343ab968e255db8c76fa\",\"--oneline\",\"-n1\"] + +[2014-07-16 20:31:19 CDT] feed: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-index\",\"-z\",\"--index-info\"] + +[2014-07-16 20:31:19 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"diff-index\",\"--raw\",\"-z\",\"-r\",\"--no-renames\",\"-l0\",\"--cached\",\"refs/heads/git-annex\"] + +[2014-07-16 20:31:32 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"ls-tree\",\"--full-tree\",\"-z\",\"--\",\"refs/heads/git-annex\",\"uuid.log\",\"remote.log\",\"trust.log\",\"group.log\",\"numcopies.log\",\"schedule.log\",\"preferred-content.log\",\"required-content.log\",\"group-preferred-content.log\"] + +"""]] diff --git a/doc/bugs/On_Ubuntu_14.04_assistant_fails_to_create_new_setup.mdwn b/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__.mdwn similarity index 92% rename from doc/bugs/On_Ubuntu_14.04_assistant_fails_to_create_new_setup.mdwn rename to doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__.mdwn index 14d9242d16..d7788fa93f 100644 --- a/doc/bugs/On_Ubuntu_14.04_assistant_fails_to_create_new_setup.mdwn +++ b/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__.mdwn @@ -75,17 +75,19 @@ ok # Question: -cat /etc/xdg/autostart/git-annex.desktop -[Desktop Entry] -Type=Application -Version=1.0 -Name=Git Annex Assistant -Comment=Autostart -Terminal=false -Exec=/usr/bin/git-annex assistant --autostart -Categories= + cat /etc/xdg/autostart/git-annex.desktop + [Desktop Entry] + Type=Application + Version=1.0 + Name=Git Annex Assistant + Comment=Autostart + Terminal=false + Exec=/usr/bin/git-annex assistant --autostart + Categories= Should there be a git-annex process whenever I log in even if I don't launch the webapp ? I can check that on next login. At the moment there is "git-annex webapp" and several child processes. + +[[!tag moreinfo]] diff --git a/doc/bugs/On_Ubuntu_14.04_assistant_fails_to_create_new_setup/comment_1_7508685b6f676c72e316642b80e40ee8._comment b/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_1_7508685b6f676c72e316642b80e40ee8._comment similarity index 100% rename from doc/bugs/On_Ubuntu_14.04_assistant_fails_to_create_new_setup/comment_1_7508685b6f676c72e316642b80e40ee8._comment rename to doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_1_7508685b6f676c72e316642b80e40ee8._comment diff --git a/doc/bugs/On_Ubuntu_14.04_assistant_fails_to_create_new_setup/comment_2_c4dd12ea578d1f07464e1b9d68ec96cf._comment b/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_2_c4dd12ea578d1f07464e1b9d68ec96cf._comment similarity index 100% rename from doc/bugs/On_Ubuntu_14.04_assistant_fails_to_create_new_setup/comment_2_c4dd12ea578d1f07464e1b9d68ec96cf._comment rename to doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_2_c4dd12ea578d1f07464e1b9d68ec96cf._comment diff --git a/doc/bugs/On_Ubuntu_14.04_assistant_fails_to_create_new_setup/comment_3_8687c1d1c44d88a8ac13208273565d6c._comment b/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_3_8687c1d1c44d88a8ac13208273565d6c._comment similarity index 100% rename from doc/bugs/On_Ubuntu_14.04_assistant_fails_to_create_new_setup/comment_3_8687c1d1c44d88a8ac13208273565d6c._comment rename to doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_3_8687c1d1c44d88a8ac13208273565d6c._comment diff --git a/doc/bugs/On_Ubuntu_14.04_assistant_fails_to_create_new_setup/comment_4_62be3dd4092b15cdf85cf9a231b2863a._comment b/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_4_62be3dd4092b15cdf85cf9a231b2863a._comment similarity index 100% rename from doc/bugs/On_Ubuntu_14.04_assistant_fails_to_create_new_setup/comment_4_62be3dd4092b15cdf85cf9a231b2863a._comment rename to doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_4_62be3dd4092b15cdf85cf9a231b2863a._comment diff --git a/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_5_cca4905426a3e01da6e12be855c7a418._comment b/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_5_cca4905426a3e01da6e12be855c7a418._comment new file mode 100644 index 0000000000..50b6e5dfa1 --- /dev/null +++ b/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_5_cca4905426a3e01da6e12be855c7a418._comment @@ -0,0 +1,27 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawm7eqCMh_B7mxE0tnchbr0JoYu11FUAFRY" + nickname="Stéphane" + subject="Can't reproduce" + date="2014-06-30T20:06:30Z" + content=""" +I tried to reproduce the bug on another account on the same machine, same LXDE environment. +The bug did not occur again. + +> What happens if you run `git-annex assistant --autostart` ? + +To answer that, I went back to the first account. Just logging in. +The following git-related processes are automatically launched without running `git-annex assistant --autostart`. + + git-annex assistant --startdelay=5s + git --git-dir=/home/somelogin/Documents/.git --work-tree=/home/somelogin/Documents -c core.bare=false cat-file --batch + git --git-dir=/home/somelogin/Documents/.git --work-tree=/home/somelogin/Documents -c core.bare=false cat-file --batch + git --git-dir=/home/somelogin/Documents/.git --work-tree=/home/somelogin/Documents -c core.bare=false check-ignore -z --stdin --verbose --non-matching + git --git-dir=/home/somelogin/Documents/.git --work-tree=/home/somelogin/Documents -c core.bare=false check-attr -z --stdin annex.backend annex.numcopies -- + +So, somehow things went back in order by themselves ? + +There were quite a bunch of software upgrades from Ubuntu, including `lxsession`. Perhaps something was wrong in handling autostart desktop files ? + +Since things appear to work now, should we close the bug ? + +"""]] diff --git a/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_6_ae2ca07169321c4a51b7e8e581fda5e2._comment b/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_6_ae2ca07169321c4a51b7e8e581fda5e2._comment new file mode 100644 index 0000000000..6349de01e2 --- /dev/null +++ b/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_6_ae2ca07169321c4a51b7e8e581fda5e2._comment @@ -0,0 +1,72 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawm7eqCMh_B7mxE0tnchbr0JoYu11FUAFRY" + nickname="Stéphane" + subject="Cconfirmed it was a LXDE issue, now fixed." + date="2014-07-03T09:58:24Z" + content=""" +Since this is a little strange, I just looked again at the machine. +Your software attracts archivist kind of git-annex user, so don't be surprise that I kept logs of the machine. + +Short answer: **confirmed it was a LXDE issue, now fixed**. + +## From what date has git-annex started to work ? + + git log | grep Date: + + (many other lines...) + Date: Mon Jun 30 21:43:49 2014 +0200 + Date: Mon Jun 30 21:42:07 2014 +0200 + Date: Mon Jun 30 21:38:22 2014 +0200 + Date: Sun Jun 8 14:34:13 2014 +0200 + Date: Sun Jun 8 14:28:48 2014 +0200 + Date: Sat Jun 7 16:21:06 2014 +0200 + +So I tried to enable it on June 7, reported bug on June 8. +The the machine was used on a regular basis but git-annex assistant was ineffective. +Then it started working as expected from June 30th. + +## Any package install near June 30th ? + +Updates installed regularly. + + cd /var/log ; zgrep -h \" installed.*\" dpkg.log* | grep '2014-0[67]-..' -o | sort | uniq -c + + 2 2014-06-02 + 3 2014-06-03 + 3 2014-06-04 + 3 2014-06-06 + 49 2014-06-07 + 3 2014-06-10 + 8 2014-06-11 + 45 2014-06-12 + 7 2014-06-13 + 2 2014-06-16 + 42 2014-06-21 + 20 2014-06-25 + 3 2014-06-26 + 23 2014-06-27 + 13 2014-06-28 + 6 2014-06-30 + 15 2014-07-02 + 3 2014-07-03 + +Which packages were installed on 2014-06-30 ? + + cd /var/log ; zgrep -h \" installed.*\" dpkg.log* | grep '2014-06-(29|30)' -E + + 2014-06-30 17:29:15 status installed lxsession-data:all 0.4.9.2+git20140410-0ubuntu1.1 + 2014-06-30 17:29:29 status installed desktop-file-utils:i386 0.22-1ubuntu1 + 2014-06-30 17:29:30 status installed mime-support:all 3.54ubuntu1 + 2014-06-30 17:29:30 status installed lxsession-default-apps:i386 0.4.9.2+git20140410-0ubuntu1.1 + 2014-06-30 17:29:44 status installed lxsession-logout:i386 0.4.9.2+git20140410-0ubuntu1.1 + 2014-06-30 17:29:58 status installed lxsession:i386 0.4.9.2+git20140410-0ubuntu1.1 + +And indeed [0.4.9.2+git20140410-0ubuntu1.1 : “lxsession” package : Ubuntu](https://launchpad.net/ubuntu/+source/lxsession/0.4.9.2+git20140410-0ubuntu1.1) + +So it was indeed a lxde bug. + +[Diff text](http://launchpadlibrarian.net/177201602/lxsession_0.4.9.2%2Bgit20140410-0ubuntu1_0.4.9.2%2Bgit20140410-0ubuntu1.1.diff.gz) + +I added a comment there (#69) which may serve as a hint to other people having not updated their system. [Bug #1308348 “network settings indicator missing from panel” : Bugs : “lxsession” package : Ubuntu](https://bugs.launchpad.net/ubuntu/+source/lxsession/+bug/1308348) + +"""]] diff --git a/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_7_ae5c434a9c94aa000b604095f52e3d3c._comment b/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_7_ae5c434a9c94aa000b604095f52e3d3c._comment new file mode 100644 index 0000000000..4ae5454078 --- /dev/null +++ b/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_7_ae5c434a9c94aa000b604095f52e3d3c._comment @@ -0,0 +1,14 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 7" + date="2014-07-03T19:03:52Z" + content=""" +That lubuntu bug explains why git-annex would not autostart on login. + +However, that does not explain the original problem description, which was that the `Make Repository` button seemed to make a repository but not switch to the webapp running in that repository. In the case of making a new repository, the webapp is started in it by git-annex, not by the desktop autostart mechanism. + +Can you reproduce the original problem? + + +"""]] diff --git a/doc/bugs/S3_upload_not_using_multipart/comment_2_d82952cf324e769e45f4d90f200210f4._comment b/doc/bugs/S3_upload_not_using_multipart/comment_2_d82952cf324e769e45f4d90f200210f4._comment new file mode 100644 index 0000000000..7ee3c11670 --- /dev/null +++ b/doc/bugs/S3_upload_not_using_multipart/comment_2_d82952cf324e769e45f4d90f200210f4._comment @@ -0,0 +1,17 @@ +[[!comment format=mdwn + username="annexuser" + ip="64.71.7.82" + subject="comment 2" + date="2014-07-14T18:21:00Z" + content=""" +I'm having the same problem. Is there a fix for this yet? + + $ git annex version + git-annex version: 5.20140709-gc75193e + build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash + key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL + remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external + local repository version: 5 + supported repository version: 5 + upgrade supported from repository versions: 0 1 2 4 +"""]] diff --git a/doc/bugs/TransferScanner_crashed:_fd:59:_hGetLine:_end_of_file.mdwn b/doc/bugs/TransferScanner_crashed:_fd:59:_hGetLine:_end_of_file.mdwn new file mode 100644 index 0000000000..40cd3ebb9c --- /dev/null +++ b/doc/bugs/TransferScanner_crashed:_fd:59:_hGetLine:_end_of_file.mdwn @@ -0,0 +1,50 @@ +### Please describe the problem. +git-annex assistant reports a warning: +TransferScanner crashed: fd:59: hGetLine: end of file + +### What steps will reproduce the problem? +I don't know. Just run git-annex assistant and wait for this to happen. + +### What version of git-annex are you using? On what operating system? +Version: 5.20140709 +Build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS Feeds Quvi TDFA CryptoHash + +Gentoo + +### 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 +error: object file /home/crabman/annex/.git/objects/97/3b57761ebe88b11e1d0d2c70c8d3b48530202f is empty +fatal: loose object 973b57761ebe88b11e1d0d2c70c8d3b48530202f (stored in /home/crabman/annex/.git/objects/97/3b57761ebe88b11e1d0d2c70c8d3b48530202f) is corrupt +error: object file /home/crabman/annex/.git/objects/97/3b57761ebe88b11e1d0d2c70c8d3b48530202f is empty +fatal: loose object 973b57761ebe88b11e1d0d2c70c8d3b48530202f (stored in /home/crabman/annex/.git/objects/97/3b57761ebe88b11e1d0d2c70c8d3b48530202f) is corrupt +error: object file /home/crabman/annex/.git/objects/97/3b57761ebe88b11e1d0d2c70c8d3b48530202f is empty +fatal: loose object 973b57761ebe88b11e1d0d2c70c8d3b48530202f (stored in /home/crabman/annex/.git/objects/97/3b57761ebe88b11e1d0d2c70c8d3b48530202f) is corrupt +error: object file /home/crabman/annex/.git/objects/97/3b57761ebe88b11e1d0d2c70c8d3b48530202f is empty +fatal: loose object 973b57761ebe88b11e1d0d2c70c8d3b48530202f (stored in /home/crabman/annex/.git/objects/97/3b57761ebe88b11e1d0d2c70c8d3b48530202f) is corrupt +fd:31: hGetLine: end of file +fd:32: hGetLine: end of file +fd:33: hGetLine: end of file +fd:34: hGetLine: end of file +fd:38: hGetLine: end of file +fd:41: hGetLine: end of file +fd:41: hGetLine: end of file +fd:41: hGetLine: end of file +fd:41: hGetLine: end of file +fd:41: hGetLine: end of file +fd:41: hGetLine: end of file +fd:43: hGetLine: end of file +fd:41: hGetLine: end of file +fd:41: hGetLine: end of file +fd:41: hGetLine: end of file +fd:41: hGetLine: end of file +fd:41: hGetLine: end of file +fd:41: hGetLine: end of file +fd:43: hGetLine: end of file + + +# End of transcript or log. +"""]] diff --git a/doc/bugs/TransferScanner_crashed:_fd:59:_hGetLine:_end_of_file/comment_1_a1392b92efdff82783a4b0cc2c3c7f2f._comment b/doc/bugs/TransferScanner_crashed:_fd:59:_hGetLine:_end_of_file/comment_1_a1392b92efdff82783a4b0cc2c3c7f2f._comment new file mode 100644 index 0000000000..101b234047 --- /dev/null +++ b/doc/bugs/TransferScanner_crashed:_fd:59:_hGetLine:_end_of_file/comment_1_a1392b92efdff82783a4b0cc2c3c7f2f._comment @@ -0,0 +1,14 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 1" + date="2014-07-14T18:47:21Z" + content=""" +You did not seem to paste the whole log, but it's clear that your git repository is corrupt. You might try running `git annex repair` inside it. + +This was probably caused by a disk corruption or if you're lucky just a hard shutdown that caused files to get truncated. + +The assistant tries to detect corrupt repositories on startup, but it's hard to detect when a repository has a few corrupt objects like this. This is why the webapp suggests you set up periodic repository consistency checks, which should eventually repair this kind of problem. + +Perhaps it would make sense for the webapp, when a thread crashes, to provide a button to run an consistency check immediately. +"""]] diff --git a/doc/bugs/TransferScanner_crashed:_fd:59:_hGetLine:_end_of_file/comment_2_5e153b7c59c474988fe551a505e545bc._comment b/doc/bugs/TransferScanner_crashed:_fd:59:_hGetLine:_end_of_file/comment_2_5e153b7c59c474988fe551a505e545bc._comment new file mode 100644 index 0000000000..c8d4a988af --- /dev/null +++ b/doc/bugs/TransferScanner_crashed:_fd:59:_hGetLine:_end_of_file/comment_2_5e153b7c59c474988fe551a505e545bc._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="jg123h12jh3y12g3y" + ip="86.62.100.131" + subject="comment 2" + date="2014-07-15T07:58:15Z" + content=""" +But I do have periodice consistency checks turned on. I think git-annex assistant should tell the user what the heck is going on and maybe try to repair it automatically. +"""]] diff --git a/doc/bugs/Windows_daemon_silently_dies.mdwn b/doc/bugs/Windows_daemon_silently_dies.mdwn new file mode 100644 index 0000000000..cbffc0083d --- /dev/null +++ b/doc/bugs/Windows_daemon_silently_dies.mdwn @@ -0,0 +1,132 @@ +### Please describe the problem. + +Using the latest build, when the agent is started, it works ... and works ... and works ... until it silently dies at some point. + +### What steps will reproduce the problem? + +I hope this will reproduce: + +* Create a remote with an invalid host which is not reachable +* Start git-annex-autostart.vbs +* Wait 5-30 minutes until no git.exe/git-annex.exe are visible any more in task manager (for my current test it took 10 minutes) +* Inspect the logs + +### What version of git-annex are you using? On what operating system? + + $ git annex version + git-annex version: 5.20140715-g622a376 + build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV DNS Feeds Quvi TDFA CryptoHash + key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL + remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external + local repository version: 5 + supported repository version: 5 + upgrade supported from repository versions: 2 3 4 + +### Please provide any additional information below. + +I hope/think that this is also related to what I wrote in: +https://git-annex.branchable.com/forum/Restricting_SSH_+_supply_key + +Here the assistant apparently takes the wrong ssh.exe (from bin/ instead than cmd/ directory). This results in the fact that for some reason .ssh/config is not used. +In any case, the host alias can not be resolved. +At some point git annex assistant seems to die because of that, but I am not sure. +In any case, a non-reachable server should not be the cause that the assistant dies. +The last entries of daemon.log are always: + + git-annex: : hGetLine: invalid argument (Bad file descriptor) + failed + git-annex: assistant: 1 failed + +So I think this is the cause. + +[[!format sh """ +[2014-07-14 21:21:19 Pacific Daylight Time] main: starting assistant version 5.20140715-g622a376 +[2014-07-14 21:21:19 Pacific Daylight Time] Cronner: You should enable consistency checking to protect your data. +[2014-07-14 21:21:24 Pacific Daylight Time] TransferScanner: Syncing with 192.168.200.121 +(scanning...) [2014-07-14 21:21:25 Pacific Daylight Time] Watcher: Performing startup scan +ssh: Could not resolve hostname annex: hostname nor servname provided, or not known +fatal: Could not read from remote repository. + +Please make sure you have the correct access rights +and the repository exists. +ssh: Could not resolve hostname annex: hostname nor servname provided, or not known +fatal: Could not read from remote repository. + +Please make sure you have the correct access rights +and the repository exists. +sssh: Could not resolve hostname annex: hostname nor servname provided, or not known +fatal: Could not read from remote repository. + +Please make sure you have the correct access rights +and the repository exists. +ssh: Could not resolve hostname annex: hostname nor servname provided, or not known + +ssh: Could not resolve hostname annex: hostname nor servname provided, or not known +fatal: Could not read from remote repository. + +Please make sure you have the correct access rights +and the repository exists. +sssh: Could not resolve hostname annex: hostname nor servname provided, or not known +fatal: Could not read from remote repository. + +Please make sure you have the correct access rights +and the repository exists. +(started...) [2014-07-14 21:21:43 Pacific Daylight Time] Committer: Committing changes to git +[2014-07-14 21:21:43 Pacific Daylight Time] Pusher: Syncing with 192.168.200.121 +ssh: Could not resolve hostname annex: hostname nor servname provided, or not known +fatal: Could not read from remote repository. + +Please make sure you have the correct access rights +and the repository exists. +ssh: Could not resolve hostname annex: hostname nor servname provided, or not known +fatal: Could not read from remote repository. + +Please make sure you have the correct access rights +and the repository exists. +ssh: Could notssh: Could not resolve hostname annex: hostname nor servname provided, or not known +fatal: Could not read from remote repository. + +Please make sure you have the correct access rights +and the repository exists. +[2014-07-14 21:22:03 Pacific Daylight Time] Committer: Committing changes to git +fatal: Unable to create 'c:\data\annex\.git/index.lock': File exists. + +If no other git process is currently running, this probably means a +git process crashed in this repository earlier. Make sure no other git +process is running and remove the file manually to continue. +fatal: Unable to create 'c:\data\annex\.git/index.lock': File exists. + +If no other git process is currently running, this probably means a +git process crashed in this repository earlier. Make sure no other git +process is running and remove the file manually to continue. +Committer crashed: failed to read sha from git write-tree +[2014-07-14 21:22:03 Pacific Daylight Time] Committer: warning Committer crashed: failed to read sha from git write-tree +ssh: Could not resolve hostname annex: hostname nor servname provided, or not known +fatal: Could not read from remote repository. + +Please make sure you have the correct access rights +and the repository exists. +ssh: Could not resolve hostname annex: hostname nor servname provided, or not known + +ssh: Could not resolve hostname annex: hostname nor servname provided, or not known + +ssh: Could not resolve hostname annex: hostname nor servname provided, or not known + +ssh: Could not resolve hostname annex: hostname nor servname provided, or not known + +ssh: Could not resolve hostname annex: hostname nor servname provided, or not known + +Network.Socket.ByteString.send: does not exist (No such file or directory) +Network.Socket.ByteString.send: does not exist (No such file or directory) + +(Recording state in git...) +(Recording state in git...) + +git-annex: : hGetLine: invalid argument (Bad file descriptor) +failed +git-annex: assistant: 1 failed +"""]] + +[[!tag confirmed]] + +> [[fixed|done]] --[[Joey]] diff --git a/doc/bugs/Windows_daemon_silently_dies/comment_1_b590aaeedec78c8540d549a8c773881e._comment b/doc/bugs/Windows_daemon_silently_dies/comment_1_b590aaeedec78c8540d549a8c773881e._comment new file mode 100644 index 0000000000..e2c6cdecf6 --- /dev/null +++ b/doc/bugs/Windows_daemon_silently_dies/comment_1_b590aaeedec78c8540d549a8c773881e._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 1" + date="2014-07-15T17:36:22Z" + content=""" +I doubt that it has anything to do with a ssh remote. + +Please enable debug logging and see if you can get a more detailed log around when it dies. +"""]] diff --git a/doc/bugs/Windows_daemon_silently_dies/comment_2_472975d2bd9784ae40b35f11fc561231._comment b/doc/bugs/Windows_daemon_silently_dies/comment_2_472975d2bd9784ae40b35f11fc561231._comment new file mode 100644 index 0000000000..dae8622051 --- /dev/null +++ b/doc/bugs/Windows_daemon_silently_dies/comment_2_472975d2bd9784ae40b35f11fc561231._comment @@ -0,0 +1,72 @@ +[[!comment format=mdwn + username="divB" + ip="128.12.90.218" + subject="comment 2" + date="2014-07-15T20:51:07Z" + content=""" +Unfortunately not. I did that already. At least in my opinion nothing special. + +These are the latest lines: + +[[!format sh \"\"\" +Please make sure you have the correct access rights +and the repository exists. +[2014-07-15 13:34:32 Pacific Daylight Time] read: git [\"--git-dir=c:\\data\\annex\\.git\",\"--work-tree=c:\\data\\annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"git-annex\"] +[2014-07-15 13:34:32 Pacific Daylight Time] read: git [\"--git-dir=c:\\data\\annex\\.git\",\"--work-tree=c:\\data\\annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"] +[2014-07-15 13:34:32 Pacific Daylight Time] read: git [\"--git-dir=c:\\data\\annex\\.git\",\"--work-tree=c:\\data\\annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..8ea0bbec209e1ec1240aa94ba2d6975023d83ac5\",\"-n1\",\"--pretty=%H\"] +[2014-07-15 13:34:32 Pacific Daylight Time] read: git [\"--git-dir=c:\\data\\annex\\.git\",\"--work-tree=c:\\data\\annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..528b6b61318d138db5df2262ee501d6895b859d0\",\"-n1\",\"--pretty=%H\"] +[2014-07-15 13:34:32 Pacific Daylight Time] read: git [\"--git-dir=c:\\data\\annex\\.git\",\"--work-tree=c:\\data\\annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..45aff729d5c9e60d925fad4c7fd75497ff5301fa\",\"-n1\",\"--pretty=%H\"] +[2014-07-15 13:34:32 Pacific Daylight Time] call: git [\"--git-dir=c:\\data\\annex\\.git\",\"--work-tree=c:\\data\\annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"--verify\",\"-q\",\"refs/remotes/server/annex/direct/master\"] +[2014-07-15 13:34:32 Pacific Daylight Time] read: git [\"--git-dir=c:\\data\\annex\\.git\",\"--work-tree=c:\\data\\annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/annex/direct/master..refs/remotes/server/annex/direct/master\",\"-n1\",\"--pretty=%H\"] +[2014-07-15 13:34:32 Pacific Daylight Time] call: git [\"--git-dir=c:\\data\\annex\\.git\",\"--work-tree=c:\\data\\annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"--verify\",\"-q\",\"refs/remotes/server/synced/master\"] +[2014-07-15 13:34:32 Pacific Daylight Time] read: git [\"--git-dir=c:\\data\\annex\\.git\",\"--work-tree=c:\\data\\annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/synced/master..refs/remotes/server/synced/master\",\"-n1\",\"--pretty=%H\"] +[2014-07-15 13:34:32 Pacific Daylight Time] Pusher: pushing to [Remote { name =\"server\" }] +[2014-07-15 13:34:32 Pacific Daylight Time] call: git [\"--git-dir=c:\\data\\annex\\.git\",\"--work-tree=c:\\data\\annex\",\"-c\",\"core.bare=false\",\"push\",\"server\",\"+git-annex:synced/git-annex\",\"annex/direct/master:synced/master\"] +ssh: Could not resolve hostname annex: hostname nor servname provided, or not known +fatal: Could not read from remote repository. + +Please make sure you have the correct access rights +and the repository exists. +[2014-07-15 13:34:34 Pacific Daylight Time] read: git [\"--git-dir=c:\\data\\annex\\.git\",\"--work-tree=c:\\data\\annex\",\"-c\",\"core.bare=false\",\"push\",\"server\",\"master\"] +ssh: Could not resolve hostname annex: hostname nor servname provided, or not known + +[2014-07-15 13:34:35 Pacific Daylight Time] RemoteControl: DISCONNECTED ssh://test@annex/srv/data/Shared +[2014-07-15 13:34:35 Pacific Daylight Time] RemoteControl: fromList [] +[2014-07-15 13:34:36 Pacific Daylight Time] Pusher: fallback pushing to [Remote { name =\"server\" }] +[2014-07-15 13:34:36 Pacific Daylight Time] call: git [\"--git-dir=c:\\data\\annex\\.git\",\"--work-tree=c:\\data\\annex\",\"-c\",\"core.bare=false\",\"push\",\"server\",\"+git-annex:refs/synced/91347741-60cd-4bca-a64a-90adee8d1910/git-annex\",\"refs/heads/annex/direct/master:refs/synced/91347741-60cd-4bca-a64a-90adee8d1910/annex/direct/master\"] +ssh: Could not resolve hostname annex: hostname nor servname provided, or not known +fatal: Could not read from remote repository. + +Please make sure you have the correct access rights +and the repository exists. +[2014-07-15 13:34:51 Pacific Daylight Time] chat: ssh [\"-T\",\"test@annex\",\"git-annex-shell 'notifychanges' '/srv/data/Shared' --uuid df1c0b77-f9b6-4ed7-96f3-3e7f010c4fb6\"] +ssh: Could not resolve hostname annex: hostname nor servname provided, or not known + +[2014-07-15 13:35:03 Pacific Daylight Time] RemoteControl: DISCONNECTED ssh://test@annex/srv/data/Shared +[2014-07-15 13:35:03 Pacific Daylight Time] RemoteControl: fromList [] +[2014-07-15 13:35:35 Pacific Daylight Time] chat: ssh [\"-T\",\"test@annex\",\"git-annex-shell 'notifychanges' '/srv/data/Shared' --uuid df1c0b77-f9b6-4ed7-96f3-3e7f010c4fb6\"] +ss[2014-07-15 13:35:47 Pacific Daylight Time] RemoteControl: DISCONNECTED ssh://test@annex/srv/data/Shared +[2014-07-15 13:35:47 Pacific Daylight Time] RemoteControl: fromList [] +[2014-07-15 13:36:51 Pacific Daylight Time] chat: ssh [\"-T\",\"test@annex\",\"git-annex-shell 'notifychanges' '/srv/data/Shared' --uuid df1c0b77-f9b6-4ed7-96f3-3e7f010c4fb6\"] +ssh: Could not resolve hostname annex: hostname nor servname provided, or not known + +[2014-07-15 13:37:02 Pacific Daylight Time] RemoteControl: DISCONNECTED ssh://test@annex/srv/data/Shared +[2014-07-15 13:37:02 Pacific Daylight Time] RemoteControl: fromList [] +[2014-07-15 13:39:10 Pacific Daylight Time] chat: ssh [\"-T\",\"test@annex\",\"git-annex-shell 'notifychanges' '/srv/data/Shared' --uuid df1c0b77-f9b6-4ed7-96f3-3e7f010c4fb6\"] +ssh: Co[2014-07-15 13:39:21 Pacific Daylight Time] RemoteControl: DISCONNECTED ssh://test@annex/srv/data/Shared +[2014-07-15 13:39:21 Pacific Daylight Time] RemoteControl: fromList [] +[2014-07-15 13:43:37 Pacific Daylight Time] chat: ssh [\"-T\",\"test@annex\",\"git-annex-shell 'notifychanges' '/srv/data/Shared' --uuid df1c0b77-f9b6-4ed7-96f3-3e7f010c4fb6\"] +ssh: Could not resolve hostname an[2014-07-15 13:43:49 Pacific Daylight Time] RemoteControl: DISCONNECTED ssh://test@annex/srv/data/Shared +[2014-07-15 13:43:49 Pacific Daylight Time] RemoteControl: fromList [] + +(Recording state in git...) + +git-annex: : hGetLine: invalid argument (Bad file descriptor) +failed +git-annex: assistant: 1 failed +\"\"\"]] + +Maybe it's something different but what could it be? + + +"""]] diff --git a/doc/bugs/Windows_daemon_silently_dies/comment_3_48415a7251abffca998b8dccc5e0ba80._comment b/doc/bugs/Windows_daemon_silently_dies/comment_3_48415a7251abffca998b8dccc5e0ba80._comment new file mode 100644 index 0000000000..3498cc88e6 --- /dev/null +++ b/doc/bugs/Windows_daemon_silently_dies/comment_3_48415a7251abffca998b8dccc5e0ba80._comment @@ -0,0 +1,22 @@ +[[!comment format=mdwn + username="divB" + ip="128.12.90.218" + subject="comment 3" + date="2014-07-15T22:02:41Z" + content=""" +Update: You are right. It has nothing to do with the connections. I created a new repository without any sync. Same here: + + [2014-07-15 13:53:33 Pacific Daylight Time] main: starting assistant version 5.20140715-g622a376 + [2014-07-15 13:53:33 Pacific Daylight Time] Cronner: You should enable consistency checking to protect your data. + (scanning...) [2014-07-15 13:53:38 Pacific Daylight Time] Watcher: Performing startup scan + (started...) + + git-annex: : hGetLine: invalid argument (Bad file descriptor) + failed + git-annex: assistant: 1 failed + +It always takes exactly 10 minutes until it dies (you see is started 13:53:33 and it died at 14:03:33 (=modification of daemon.log). +So this is reproduceable ... + + +"""]] diff --git a/doc/bugs/Windows_daemon_silently_dies/comment_4_1c0b0b2e7180425ff2d5e5316a138f7d._comment b/doc/bugs/Windows_daemon_silently_dies/comment_4_1c0b0b2e7180425ff2d5e5316a138f7d._comment new file mode 100644 index 0000000000..63b37a7e11 --- /dev/null +++ b/doc/bugs/Windows_daemon_silently_dies/comment_4_1c0b0b2e7180425ff2d5e5316a138f7d._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 4" + date="2014-07-16T18:18:11Z" + content=""" +Hmm, there are two places where the assistant happens to hard code a 10 minute time period. But one is 10 minutes from starting to configure a ssh remote in the webapp, not from start. And the other is the watcher's afterLastDaemonRun check, which only happens when a symlink appears in the repository (which shouldn't happen on windows and wouldn't necessarily happen 10 minutes after start). + +Fabulous .. I just reproduced the crash! +"""]] diff --git a/doc/bugs/Windows_daemon_silently_dies/comment_5_0d14dd2c8d94a81ffd5aae07e927344f._comment b/doc/bugs/Windows_daemon_silently_dies/comment_5_0d14dd2c8d94a81ffd5aae07e927344f._comment new file mode 100644 index 0000000000..2b2e819462 --- /dev/null +++ b/doc/bugs/Windows_daemon_silently_dies/comment_5_0d14dd2c8d94a81ffd5aae07e927344f._comment @@ -0,0 +1,40 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 5" + date="2014-07-16T18:21:24Z" + content=""" +A full log in an empty repo of the crash: + +
+[2014-07-16 14:00:53 Atlantic Standard Time] read: git [\"--git-dir=C:\\WINDOWS\\TT\\.git\",\"--work-tree=C:\\WINDOWS\\TT\",\"-c\",\"core.bare=false\",\"show-ref\",\"git-annex\"]
+[2014-07-16 14:00:54 Atlantic Standard Time] read: git [\"--git-dir=C:\\WINDOWS\\TT\\.git\",\"--work-tree=C:\\WINDOWS\\TT\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+[2014-07-16 14:00:54 Atlantic Standard Time] read: git [\"--git-dir=C:\\WINDOWS\\TT\\.git\",\"--work-tree=C:\\WINDOWS\\TT\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..9c07d1385e80dbc6044814357e9097fd231b8c99\",\"-n1\",\"--pretty=%H\"]
+[2014-07-16 14:00:54 Atlantic Standard Time] chat: git [\"--git-dir=C:\\WINDOWS\\TT\\.git\",\"--work-tree=C:\\WINDOWS\\TT\",\"-c\",\"core.bare=false\",\"cat-file\",\"--batch\"]
+[2014-07-16 14:00:54 Atlantic Standard Time] logging to C:\WINDOWS\TT\.git\annex\daemon.log
+[2014-07-16 14:00:54 Atlantic Standard Time] main: starting assistant version 5.20140714-gf892329
+[2014-07-16 14:00:54 Atlantic Standard Time] read: git [\"--git-dir=C:\\WINDOWS\\TT\\.git\",\"--work-tree=C:\\WINDOWS\\TT\",\"-c\",\"core.bare=false\",\"show-ref\",\"git-annex\"]
+[2014-07-16 14:00:54 Atlantic Standard Time] read: git [\"--git-dir=C:\\WINDOWS\\TT\\.git\",\"--work-tree=C:\\WINDOWS\\TT\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+[2014-07-16 14:00:54 Atlantic Standard Time] read: git [\"--git-dir=C:\\WINDOWS\\TT\\.git\",\"--work-tree=C:\\WINDOWS\\TT\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..9c07d1385e80dbc6044814357e9097fd231b8c99\",\"-n1\",\"--pretty=%H\"]
+[2014-07-16 14:00:54 Atlantic Standard Time] chat: git [\"--git-dir=C:\\WINDOWS\\TT\\.git\",\"--work-tree=C:\\WINDOWS\\TT\",\"-c\",\"core.bare=false\",\"cat-file\",\"--batch\"]
+[2014-07-16 14:00:54 Atlantic Standard Time] read: git [\"--git-dir=C:\\WINDOWS\\TT\\.git\",\"--work-tree=C:\\WINDOWS\\TT\",\"-c\",\"core.bare=false\",\"ls-files\",\"--stage\",\"-z\",\"--\",\"C:\\WINDOWS\\TT\"]
+[2014-07-16 14:00:54 Atlantic Standard Time] Cronner: You should enable consistency checking to protect your data. 
+[2014-07-16 14:00:54 Atlantic Standard Time] SanityCheckerStartup: no index file; restaging
+[2014-07-16 14:00:54 Atlantic Standard Time] read: git [\"--git-dir=C:\\WINDOWS\\TT\\.git\",\"--work-tree=C:\\WINDOWS\\TT\",\"-c\",\"core.bare=false\",\"ls-files\",\"--stage\",\"-z\",\"--\",\"C:\\WINDOWS\\TT\"]
+[2014-07-16 14:00:54 Atlantic Standard Time] chat: git-annex [\"remotedaemon\"]
+[2014-07-16 14:00:54 Atlantic Standard Time] read: git [\"--git-dir=C:\\WINDOWS\\TT\\.git\",\"--work-tree=C:\\WINDOWS\\TT\",\"-c\",\"core.bare=false\",\"ls-tree\",\"--full-tree\",\"-z\",\"--\",\"refs/heads/git-annex\",\"uuid.log\",\"remote.log\",\"trust.log\",\"group.log\",\"numcopies.log\",\"schedule.log\",\"preferred-content.log\",\"required-content.log\",\"group-preferred-content.log\"]
+[2014-07-16 14:00:54 Atlantic Standard Time] Merger: watching C:\WINDOWS\TT\.git\refs
+[2014-07-16 14:00:54 Atlantic Standard Time] TransferWatcher: watching for transfers
+(scanning...) [2014-07-16 14:00:54 Atlantic Standard Time] Watcher: Performing startup scan
+[2014-07-16 14:00:54 Atlantic Standard Time] read: git [\"--git-dir=C:\\WINDOWS\\TT\\.git\",\"--work-tree=C:\\WINDOWS\\TT\",\"-c\",\"core.bare=false\",\"ls-files\",\"--deleted\",\"-z\",\"--\",\"C:\\WINDOWS\\TT\"]
+(started...) [2014-07-16 14:00:54 Atlantic Standard Time] Watcher: watching .
+
+
+git-annex: : hGetLine: invalid argument (Bad file descriptor)
+failed
+git-annex: assistant: 1 failed
+
+ +The two blank lines just before the crash seem to be significant somehow; they are not output at the beginning, so must occur just before it crashes. + +"""]] diff --git a/doc/bugs/Windows_daemon_silently_dies/comment_6_20a420680058f84a8cbd43682957fe7b._comment b/doc/bugs/Windows_daemon_silently_dies/comment_6_20a420680058f84a8cbd43682957fe7b._comment new file mode 100644 index 0000000000..4b596c7623 --- /dev/null +++ b/doc/bugs/Windows_daemon_silently_dies/comment_6_20a420680058f84a8cbd43682957fe7b._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 6" + date="2014-07-16T18:38:51Z" + content=""" +It appears to be the remoteResponderThread crashing (based on adding debugging around all hGetLine call sites). +"""]] diff --git a/doc/bugs/Windows_daemon_silently_dies/comment_7_1514739ba9885917d03597dcc6aa7bec._comment b/doc/bugs/Windows_daemon_silently_dies/comment_7_1514739ba9885917d03597dcc6aa7bec._comment new file mode 100644 index 0000000000..3ce65580a9 --- /dev/null +++ b/doc/bugs/Windows_daemon_silently_dies/comment_7_1514739ba9885917d03597dcc6aa7bec._comment @@ -0,0 +1,20 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 7" + date="2014-07-16T20:18:50Z" + content=""" +Well, it seems not to be the RemoteControl thread after all. I made that thread start the remotedaemon and then not read from it at all, and the crash still happens. Also, the remotedaemon itself seems to run forever ok. + +(This is sort of a relief, because it should not be possible for a crash of a named thread like RemoteControl to take down the whole assistant!) + +The hGetLine must be being called by some other library function. + +Hmm... Could it perhaps be waitForTermination? On windows that ends up calling getLine in a loop. A 600 second loop! + +Update: Seems so. With a 60 second loop, it crashes after 60 seconds. With the 2 newlines happening just before. + +Also, it makes sense now why this is a new crash. Before the assistant ran with stdio connected to the terminal, but recently on windows it got hooked up to the debug log, and stdin is closed now. + +I still don't understand where the 2 newlines come from (possibly output by something while git-annex is crashing?).. But have confirmed I've fixed the problem now. +"""]] diff --git a/doc/bugs/Windows_daemon_silently_dies/comment_8_0210436870e6622a83c9b4788e31eef4._comment b/doc/bugs/Windows_daemon_silently_dies/comment_8_0210436870e6622a83c9b4788e31eef4._comment new file mode 100644 index 0000000000..09e7eb867f --- /dev/null +++ b/doc/bugs/Windows_daemon_silently_dies/comment_8_0210436870e6622a83c9b4788e31eef4._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="divB" + ip="204.17.143.10" + subject="comment 8" + date="2014-07-16T23:53:39Z" + content=""" +Really great, seems to be fixed in the current version (at least it's running for 1h now). Thank you!! +"""]] diff --git a/doc/bugs/__171__transferkey__187___fails_for_bare_remotes.mdwn b/doc/bugs/__171__transferkey__187___fails_for_bare_remotes.mdwn new file mode 100644 index 0000000000..b8c583618c --- /dev/null +++ b/doc/bugs/__171__transferkey__187___fails_for_bare_remotes.mdwn @@ -0,0 +1,21 @@ +### Please describe the problem. + +I wanted to inspect the state of an object present in a bare remote +without touching the working copy. So I issued «transferkey $KEY --from +bare-remote»; however, even for keys that are definitely present on +the remote, this would fail with «requested key is not present». + +The same method, when using a non-bare repo in «--from», would succeed +under otherwise identical conditions. + +### What steps will reproduce the problem? + +Cf. above. + +### What version of git-annex are you using? On what operating system? + +git-annex 5.20140708 + +Linux 3.15.4 + +> [[done]] not a bug per comment. diff --git a/doc/bugs/__171__transferkey__187___fails_for_bare_remotes/comment_1_dd4538ab19a7f8e0f49aa0156aeaae43._comment b/doc/bugs/__171__transferkey__187___fails_for_bare_remotes/comment_1_dd4538ab19a7f8e0f49aa0156aeaae43._comment new file mode 100644 index 0000000000..c7760dc051 --- /dev/null +++ b/doc/bugs/__171__transferkey__187___fails_for_bare_remotes/comment_1_dd4538ab19a7f8e0f49aa0156aeaae43._comment @@ -0,0 +1,32 @@ +[[!comment format=mdwn + username="zardoz" + ip="134.147.14.84" + subject="comment 1" + date="2014-07-09T08:51:22Z" + content=""" +[[!format sh \"\"\" + +# Key present on remote. +seb@vserver [ /srv/git/seb/ebooks.git ]$ ls -l annex/objects/f15/e83/WORM-s55921664-m1404679753--calibre%metadata.db/WORM-s55921664-m1404679753--calibre%metadata.db +-r--r--r-- 1 seb users 54M 6. Jul 22:49 annex/objects/f15/e83/WORM-s55921664-m1404679753--calibre%metadata.db/WORM-s55921664-m1404679753--calibre%metadata.db + +# Trying to transfer key from remote. +seb [ ~/Ebooks ]$ git annex transferkey WORM-s55921664-m1404679753--calibre%metadata.db --from vserver -d +[2014-07-09 10:49:37 CEST] read: git [\"--git-dir=/home/seb/Ebooks/.git\",\"--work-tree=/home/seb/Ebooks\",\"-c\",\"core.bare=false\",\"show-ref\",\"git-annex\"] +[2014-07-09 10:49:37 CEST] read: git [\"--git-dir=/home/seb/Ebooks/.git\",\"--work-tree=/home/seb/Ebooks\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"] +[2014-07-09 10:49:37 CEST] read: git [\"--git-dir=/home/seb/Ebooks/.git\",\"--work-tree=/home/seb/Ebooks\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..d2ae02b03f8b87c3465c82f96a924ac7b913fed7\",\"-n1\",\"--pretty=%H\"] +[2014-07-09 10:49:37 CEST] read: git [\"--git-dir=/home/seb/Ebooks/.git\",\"--work-tree=/home/seb/Ebooks\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..fc2251ff897bdbc3152c98c4142dcdf77328404b\",\"-n1\",\"--pretty=%H\"] +[2014-07-09 10:49:37 CEST] read: git [\"--git-dir=/home/seb/Ebooks/.git\",\"--work-tree=/home/seb/Ebooks\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..717b07d139b3375cab8c0d54c5dc6379a6c5cb89\",\"-n1\",\"--pretty=%H\"] +[2014-07-09 10:49:37 CEST] chat: git [\"--git-dir=/home/seb/Ebooks/.git\",\"--work-tree=/home/seb/Ebooks\",\"-c\",\"core.bare=false\",\"cat-file\",\"--batch\"] +[2014-07-09 10:49:37 CEST] read: ssh [\"-O\",\"stop\",\"-S\",\"wirrsal.net\",\"-o\",\"ControlMaster=auto\",\"-o\",\"ControlPersist=yes\",\"localhost\"] + +[2014-07-09 10:49:37 CEST] read: rsync [\"--progress\",\"--inplace\",\"--perms\",\"-e\",\"'ssh' '-S' '.git/annex/ssh/wirrsal.net' '-o' 'ControlMaster=auto' '-o' 'ControlPersist=yes' '-T' 'wirrsal.net' 'git-annex-shell ''sendkey'' ''/srv/git/seb/ebooks.git'' ''WORM-s55921664-m1404679753--calibre%metadata.db'' --uuid 4316c3dc-5b6d-46eb-b780-948c717b7be5 ''--'' ''remoteuuid=a97ab0e5-320e-488b-b9e8-b9da57785b81'' ''direct=1'' ''--'''\",\"--\",\"dummy:\",\"/home/seb/Ebooks/.git/annex/tmp/WORM-s55921664-m1404679753--calibre&smetadata.db\"] + requested key is not present +rsync: connection unexpectedly closed (0 bytes received so far) [Receiver] +rsync error: error in rsync protocol data stream (code 12) at io.c(226) [Receiver=3.1.1] + + rsync failed -- run git annex again to resume file transfer + + +\"\"\"]] +"""]] diff --git a/doc/bugs/__171__transferkey__187___fails_for_bare_remotes/comment_2_4276ff682d10c1d4be9728f9b649ebae._comment b/doc/bugs/__171__transferkey__187___fails_for_bare_remotes/comment_2_4276ff682d10c1d4be9728f9b649ebae._comment new file mode 100644 index 0000000000..ef593e5c16 --- /dev/null +++ b/doc/bugs/__171__transferkey__187___fails_for_bare_remotes/comment_2_4276ff682d10c1d4be9728f9b649ebae._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="zardoz" + ip="134.147.14.84" + subject="comment 2" + date="2014-07-09T09:02:59Z" + content=""" +Ah, sorry. I see. So, the «%» have to be unescaped into slashes, of course. My bad. + +[[!tag done]] +"""]] diff --git a/doc/bugs/__171__uninit__187___on_direct_mode_repo_gives___171__removeLink:_permission_denied___40__Permission_denied__41____187__.mdwn b/doc/bugs/__171__uninit__187___on_direct_mode_repo_gives___171__removeLink:_permission_denied___40__Permission_denied__41____187__.mdwn new file mode 100644 index 0000000000..b7dcf29b75 --- /dev/null +++ b/doc/bugs/__171__uninit__187___on_direct_mode_repo_gives___171__removeLink:_permission_denied___40__Permission_denied__41____187__.mdwn @@ -0,0 +1,33 @@ +### Please describe the problem. + +I suppose that in a direct mode repo, one might as well just «chmod -R ++w .git/annex; rm -r .git/annex», but I noticed that, when using «git +annex uninit», this will fail to remove some files in .git/annex. + +### What steps will reproduce the problem? +[[!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 +$ mkdir /tmp/foo +$ cd /tmp/foo +$ git init +$ git annex init +$ echo quux > file +$ git annex add file +$ git annex sync +$ git annex uninit +unannex file ok +git-annex: /tmp/foo/.git/annex/objects/zQ/MQ/SHA256E-s3--98ea6e4f216f2fb4b69fff9b3a44842c38686ca685f3f55dc48c5d3fb1107be4/SHA256E-s3--98ea6e4f216f2fb4b69fff9b3a44842c38686ca685f3f55dc48c5d3fb1107be4.map: removeLink: permission denied (Permission denied) + +# End of transcript or log. +"""]] + + +### What version of git-annex are you using? On what operating system? +git-annex 5.20140709-1 + +linux 3.15.5 + +### Please provide any additional information below. + +> [[fixed|done]] --[[Joey]] diff --git a/doc/bugs/adding_a_remote_server_fails.mdwn b/doc/bugs/adding_a_remote_server_fails.mdwn new file mode 100644 index 0000000000..06e6af4dae --- /dev/null +++ b/doc/bugs/adding_a_remote_server_fails.mdwn @@ -0,0 +1,27 @@ +### Please describe the problem. +I tried to add a remote server to my annex repo using the webapp. + +### What steps will reproduce the problem? +Configuration -> Repositories -> Remote server -> Fill in stuff, use public key auth -> click "check this server" -> enjoy + +### What version of git-annex are you using? On what operating system? +OpenSUSE Tumbleweed, git-annex 5.20140709-gc75193e + +### Please provide any additional information below. +Error message: `user error (gpg ["--batch","--no-tty","--use-agent","--quiet","--trust-model","always","--with-colons","--list-secret-keys","--fixed-list-mode"] exited 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 +[2014-07-11 12:03:52 CEST] main: starting assistant version 5.20140709-gc75193e +[2014-07-11 12:03:53 CEST] UpgradeWatcher: Finished upgrading git-annex to version 5.20140709-gc75193e +(scanning...) [2014-07-11 12:03:53 CEST] Watcher: Performing startup scan +(started...) gpg: /home/zilti/.gnupg/gpg.conf:200: argument not expected +gpg: /home/zilti/.gnupg/gpg.conf:201: invalid option +gpg: /home/zilti/.gnupg/gpg.conf:200: argument not expected +gpg: /home/zilti/.gnupg/gpg.conf:201: invalid option + +# End of transcript or log. +"""]] + +[[!tag moreinfo]] diff --git a/doc/bugs/adding_a_remote_server_fails/comment_1_cf7ea9171f002c5793a882b42d33a77d._comment b/doc/bugs/adding_a_remote_server_fails/comment_1_cf7ea9171f002c5793a882b42d33a77d._comment new file mode 100644 index 0000000000..1dc6d69548 --- /dev/null +++ b/doc/bugs/adding_a_remote_server_fails/comment_1_cf7ea9171f002c5793a882b42d33a77d._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="obvious questions" + date="2014-07-11T18:12:44Z" + content=""" +From what source did you install git-annex? + +What version of gpg is installed on your system? What is the contents of line 200 and 201 of/home/zilti/.gnupg/gpg.conf? +"""]] diff --git a/doc/bugs/assistant_doesn__39__t_sync_file_permissions/comment_6_13db3474113b157b7431eb1c835e5814._comment b/doc/bugs/assistant_doesn__39__t_sync_file_permissions/comment_6_13db3474113b157b7431eb1c835e5814._comment new file mode 100644 index 0000000000..6f7283be26 --- /dev/null +++ b/doc/bugs/assistant_doesn__39__t_sync_file_permissions/comment_6_13db3474113b157b7431eb1c835e5814._comment @@ -0,0 +1,14 @@ +[[!comment format=mdwn + username="Xyem" + ip="178.79.137.64" + subject="comment 6" + date="2014-06-24T10:05:26Z" + content=""" +Now that git-annex has a proper metadata system now, can this be handled? + +Perhaps doing this: + +git annex metadata -s __executable 001 + +could cause git-annex to set the executable bit (on get, fsck etc.) and that be set automatically on git annex add if the file has executable bit set (numbers are a bitmask for which execute bit to set..?). +"""]] diff --git a/doc/bugs/assistant_expensive_scan_unnecessarily_queues_files/comment_2_a7e9d8ec500399dd6794e168f85e6a5c._comment b/doc/bugs/assistant_expensive_scan_unnecessarily_queues_files/comment_2_a7e9d8ec500399dd6794e168f85e6a5c._comment new file mode 100644 index 0000000000..589086f6e1 --- /dev/null +++ b/doc/bugs/assistant_expensive_scan_unnecessarily_queues_files/comment_2_a7e9d8ec500399dd6794e168f85e6a5c._comment @@ -0,0 +1,40 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawmXSkgjC_ypUQafVwvHTLsStrkiXH8CfHU" + nickname="Matthias" + subject="comment 2" + date="2014-06-13T18:30:25Z" + content=""" +Thanks for your fast reply, Joey. I appended the shortened config below. Wanted and groupwanted were untouched and therefore still commented out. I removed the hash from wanted to explicitly set it standard. Now the assistant behaves as expected. However I’m wondering: + +* Shouldn’t ‘standard’ be the default rule to apply for wanted/groupwanted in case both are not explicitly set in the config? I assumed this to be the case. +* Shouldn’t “find --want-get” list the identical set of files that is also requested by the assistant? Especially this one confused me. + +[[!format sh \"\"\" +# Repository trust configuration +# (for macbook) +#trust 3938865a-ce40-4166-a918-2012078846c7 = semitrusted + +# Repository groups +# (for macbook) +group 3938865a-ce40-4166-a918-2012078846c7 = manual + +# Repository preferred contents +# (for macbook) +#wanted 3938865a-ce40-4166-a918-2012078846c7 = standard + +# Group preferred contents +# (Used by repositories with \"groupwanted\" in their preferred contents) +(config defaults - all commented out) + +# Standard preferred contents +(config defaults - all commented out) + +# Repository required contents +# (for macbook) +#required 3938865a-ce40-4166-a918-2012078846c7 = + +# Scheduled activities +# (for macbook) +#schedule 3938865a-ce40-4166-a918-2012078846c7 = +\"\"\"]] +"""]] diff --git a/doc/bugs/assistant_expensive_scan_unnecessarily_queues_files/comment_3_a0824e00f04f95c39823f29d6c76e7fe._comment b/doc/bugs/assistant_expensive_scan_unnecessarily_queues_files/comment_3_a0824e00f04f95c39823f29d6c76e7fe._comment new file mode 100644 index 0000000000..58f2069c18 --- /dev/null +++ b/doc/bugs/assistant_expensive_scan_unnecessarily_queues_files/comment_3_a0824e00f04f95c39823f29d6c76e7fe._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="108.236.230.124" + subject="comment 3" + date="2014-06-13T18:35:53Z" + content=""" +I need to look into why --want-get didn't behave as expected. + +It would probably make sense to make standard be the default. There could be upgrade concerns though. +"""]] diff --git a/doc/bugs/bad_merge_commit_deleting_all_files.mdwn b/doc/bugs/bad_merge_commit_deleting_all_files.mdwn new file mode 100644 index 0000000000..affabdb026 --- /dev/null +++ b/doc/bugs/bad_merge_commit_deleting_all_files.mdwn @@ -0,0 +1,78 @@ +In our family repository, we had an event where git-annex committed a bad +merge commit. This had the effect of seeming to delete all the files +in the repository. However, it is completely recoverable with no file loss. + +Other users have reported apparently the same problem. +--[[Joey]] + +> This appears to be a race, and I have put in a fix for that. +> It will be released in git-annex 5.20140709. +> +> It's a little bit difficult to say for sure that the bug is fixed, since +> I don't have a good way to reproduce it. However, everything I am seeing +> is consistent with my analysis, at least as far as the people who +> reported this happening with versions 5.20140613-5.20140707. +> Calling this [[done]]. --[[Joey]] + +## recovery + +Look through the git log for the bad commit. It will be the one +that deletes a lot of files. Since the bad commit is a merge commit, +you need to include the -c switch: + + git log -c --stat + +Once the bad commit sha is found, revert it. Since it's a merge commit, +you will need to pass -m 1 to git revert. If the repository you're working +is uses direct mode, you will first need to switch it to indirect mode. + + git annex indirect + git revert -m 1 a36077cf1234eeb755fec8f699d3cbaaee817bac + +(It's possible, but I think unlikely that this will pick the wrong +branch of the merge to revert. If it did, "git reset --hard HEAD@{1}" and +redo, passing `-m 2` instead.) + +Once the revert is done, all your files should be back. You can switch +the repository back to direct mode if desired (`git annex direct`) +and can `git annex sync` to push the fix out to all other clones. +Everywhere the fix lands should restore the deleted files. + +Note that it's possible that some repositories may have pruned the deleted +files as unused. This is most likely to happen in the repository that made +the bad merge commit in the first place. + +If you have any problems following these instructions, please contact + for support. + +[[!tag confirmed urgent]] + +## analysis + +In the one case I have of this happening, the commit was made by the +git-annex assistant, in direct mode. It was git-annex version 5.20140613. +This version had a bug that caused it to do unncessary merge commits. +That bug has been fixed in 5.20140707. +That is apparently related, in that it caused the assistant to do much more +work than normal. + +But, I don't think that bug is fully responsible for the +problem. I think a few users have run into this bug before, although I have +never succeeded in getting a full problem description from anyone who might +have. I think that the unncessary commit bug made it more likely to happen. +(This suggests a race may be involved.) + +The bad merge commit looked like this: + +
+commit a36077cf1234eeb755fec8f699d3cbaaee817bac
+Merge: 52ecff2 9d8bfd4
+Author: xxx
+Date:   Mon Jul 7 19:58:18 2014 -0400
+
+    merge refs/heads/synced/master
+
+ +Both parent trees were good and contained all files. In fact, the 2 +parent trees contained the same set of files. But the merge commit +"resolved" the merge by deleting all the files. diff --git a/doc/bugs/bad_merge_commit_deleting_all_files/comment_1_3503644244e39c65d531807769365f50._comment b/doc/bugs/bad_merge_commit_deleting_all_files/comment_1_3503644244e39c65d531807769365f50._comment new file mode 100644 index 0000000000..6b24ea9583 --- /dev/null +++ b/doc/bugs/bad_merge_commit_deleting_all_files/comment_1_3503644244e39c65d531807769365f50._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 1" + date="2014-07-09T18:20:13Z" + content=""" +mergeDirect locks .git/index, so no other git command should use it while the merge is in progress. + +However, if the index file is deleted, and stageMerge runs, it stages deletion of all files. So that looks likely to be part of the story. +"""]] diff --git a/doc/bugs/bad_merge_commit_deleting_all_files/comment_2_9c4c950da0c07bf7c7edfcc7cc3b6011._comment b/doc/bugs/bad_merge_commit_deleting_all_files/comment_2_9c4c950da0c07bf7c7edfcc7cc3b6011._comment new file mode 100644 index 0000000000..19dcf1ca0f --- /dev/null +++ b/doc/bugs/bad_merge_commit_deleting_all_files/comment_2_9c4c950da0c07bf7c7edfcc7cc3b6011._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 2" + date="2014-07-09T18:25:08Z" + content=""" +Also pointing in the direction of a race: The bad commit happened 3 seconds after another commit did. The other commit was an empty commit, so caused by the bug in 5.20140613. +"""]] diff --git a/doc/bugs/bad_merge_commit_deleting_all_files/comment_3_be42de12faf15562265ad6cf8964f5db._comment b/doc/bugs/bad_merge_commit_deleting_all_files/comment_3_be42de12faf15562265ad6cf8964f5db._comment new file mode 100644 index 0000000000..dd689eae78 --- /dev/null +++ b/doc/bugs/bad_merge_commit_deleting_all_files/comment_3_be42de12faf15562265ad6cf8964f5db._comment @@ -0,0 +1,18 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="theory" + date="2014-07-09T18:31:07Z" + content=""" +Suppose we have 2 mergeDirect's A and B running at the same time somehow, with B around 3 seconds behind A, and this sequence of events occurs: + +1. A copies index file to index.lock +2. A stages an empty commit +3. B copies index file to index.lock +4. A finishes its commit, and so renames index.lock back to index. +5. B runs stageMerge + +So, B is now running stageMerge with `GIT_INDEX_FILE` pointing to an index.lock that DNE. As noted above, this causes a deletion of all files to get staged by B. + +If this is the problem, git-annex could fix it using a real lock file. (The index.lock only prevents other git commands from manipulating the index during the merge.) +"""]] diff --git a/doc/bugs/bad_merge_commit_deleting_all_files/comment_4_d5cbd1440e4d6706eb14644a4ff1883b._comment b/doc/bugs/bad_merge_commit_deleting_all_files/comment_4_d5cbd1440e4d6706eb14644a4ff1883b._comment new file mode 100644 index 0000000000..1440ee46be --- /dev/null +++ b/doc/bugs/bad_merge_commit_deleting_all_files/comment_4_d5cbd1440e4d6706eb14644a4ff1883b._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 4" + date="2014-07-09T18:36:36Z" + content=""" +The above race was first introduced in version 5.20140613. +"""]] diff --git a/doc/bugs/bad_merge_commit_deleting_all_files/comment_6_c532859deb682dff9e59037d08f66a51._comment b/doc/bugs/bad_merge_commit_deleting_all_files/comment_6_c532859deb682dff9e59037d08f66a51._comment new file mode 100644 index 0000000000..b1a5d32a62 --- /dev/null +++ b/doc/bugs/bad_merge_commit_deleting_all_files/comment_6_c532859deb682dff9e59037d08f66a51._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 6" + date="2014-07-09T19:01:33Z" + content=""" +Note that [[Assistant_merge_loop]], which contributes to this bug, is not actually fixed in 5.20140707, it seems. +"""]] diff --git a/doc/bugs/bad_merge_commit_deleting_all_files/comment_6_c946d2793fe0354151c447ddd0e59fd7._comment b/doc/bugs/bad_merge_commit_deleting_all_files/comment_6_c946d2793fe0354151c447ddd0e59fd7._comment new file mode 100644 index 0000000000..20006ff6c7 --- /dev/null +++ b/doc/bugs/bad_merge_commit_deleting_all_files/comment_6_c946d2793fe0354151c447ddd0e59fd7._comment @@ -0,0 +1,41 @@ +[[!comment format=mdwn + username="http://jamesjustjames.wordpress.com/" + nickname="purpleidea" + subject="The guy with this bug." + date="2014-07-09T18:50:36Z" + content=""" +* Sure enough looking though the git log, I found one that removed 81 +files. It was useful to grep for 'deletions'. + +* It turned out there were actually two, one from each of the two +git-annex-assistant machines. I had to do the revert separately on each +machine for the corresponding commit that it had made. + +* I typically run the latest version that the webapp offers, within +about a week or so of it prompting me (unless I'm away for a while). +This means that maybe you can track down the approximate version where +this occured by looking at the two commit dates of the \"bad\" merges: + +commit bbe43fb638d101d5b9bfa65a4023e7f9d90e72e6 +Merge: 351cca8 95935ce +Author: James +Date: Tue Jul 8 02:15:57 2014 -0400 + +commit 1902a3af25b1ce3723c38877c7f25907885040e4 +Merge: 125b984 efcece7 +Author: James +Date: Tue Jul 8 02:15:27 2014 -0400 + +* I use the command line for pretty much most of what I do. Funny enough +though I only really use git-annex through the webapp. + +* Bug wise I don't know if this is relevant, but I have done the +following: +> added/changed/removed files to ~/annex on computer one while git-annex +wasn't running +> added/changed/removed files to ~/annex on computer two while it wasn't +running +> started git-annex on computer one +> started git-annex on computer two +> and similar combinations of the above... +"""]] diff --git a/doc/bugs/bad_merge_commit_deleting_all_files/comment_7_24dea380fcf470e0ea488dece0410f37._comment b/doc/bugs/bad_merge_commit_deleting_all_files/comment_7_24dea380fcf470e0ea488dece0410f37._comment new file mode 100644 index 0000000000..0cb39e7c87 --- /dev/null +++ b/doc/bugs/bad_merge_commit_deleting_all_files/comment_7_24dea380fcf470e0ea488dece0410f37._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="more confirmation of race theory" + date="2014-07-09T19:26:55Z" + content=""" +@purpleidea showed me his git log, and as I had expected, there were previous empty commits immediately before the 2 commits that removes all of his files (which happened independenctly on 2 different machines running the assistant). This is consistent with my suspicion it's a race. Note that the assistant's git ref watcher can easily run multiple merges concurrently if multiple refs change. +"""]] diff --git a/doc/bugs/can__39__t_connect_jabber_with_custom_google_apps_domain.mdwn b/doc/bugs/can__39__t_connect_jabber_with_custom_google_apps_domain.mdwn new file mode 100644 index 0000000000..b63f56ce83 --- /dev/null +++ b/doc/bugs/can__39__t_connect_jabber_with_custom_google_apps_domain.mdwn @@ -0,0 +1,21 @@ +### Please describe the problem. +In "Configuring jabber account" custom domains through google apps don't connect properly. + +### What steps will reproduce the problem? +Try to use a google account that uses a non-gmail domain, e.g. user@domain.com + +### What version of git-annex are you using? On what operating system? +Newest, on Mac OS 10.9 + +### Please provide any additional information below. +The issue is because git-annex is trying to connect to @domain.com as the jabber server, but the server should be talk.google.com:5223. + +[[!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. +"""]] + +[[!tag moreinfo]] diff --git a/doc/bugs/can__39__t_connect_jabber_with_custom_google_apps_domain/comment_1_6537e928a0d6d5c41b55370f112f4afb._comment b/doc/bugs/can__39__t_connect_jabber_with_custom_google_apps_domain/comment_1_6537e928a0d6d5c41b55370f112f4afb._comment new file mode 100644 index 0000000000..26a63f87f0 --- /dev/null +++ b/doc/bugs/can__39__t_connect_jabber_with_custom_google_apps_domain/comment_1_6537e928a0d6d5c41b55370f112f4afb._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="108.236.230.124" + subject="comment 1" + date="2014-07-02T17:28:01Z" + content=""" +This seems like the same problem as in [[bugs/googlemail]]. + +git-annex uses SRV records to find the jabber server for a domain. What is google doing that makes this not work? Do you have a sample domain? +"""]] diff --git a/doc/bugs/creating_a_plain_directory_where_a_mountpoint_should_have_been/comment_5_64bf56f2b0ff206c3caf5cadebfd0cda._comment b/doc/bugs/creating_a_plain_directory_where_a_mountpoint_should_have_been/comment_5_64bf56f2b0ff206c3caf5cadebfd0cda._comment new file mode 100644 index 0000000000..49ab80ed4b --- /dev/null +++ b/doc/bugs/creating_a_plain_directory_where_a_mountpoint_should_have_been/comment_5_64bf56f2b0ff206c3caf5cadebfd0cda._comment @@ -0,0 +1,20 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawmTNrhkVQ26GBLaLD5-zNuEiR8syTj4mI8" + nickname="Juan" + subject="Same happening here" + date="2014-07-09T14:45:32Z" + content=""" +Any hint about how to stop this from happening again? This time I think I was careful and tried to stop git-annex, however I got ghosts. +Whats the correct way to unplug the drive? + +My scenario is the following, I have two repos on HDD synced with a USB drive. I want to sync them to the USB drive from time to time when I plug it. I want a safe way to unplug drive without getting these ghost directories. + +This time, I entered both directories in the HDD and made a git-annex assistant --stop, but after doing a ps aux | grep git-annex I still see many processes running so I'm not sure if I truly stopped it. +The webapp gives me the impression of working on a per-repo basis, so I miss having some sort of general feedback about git-annex. Something like: \"at the moment you are syncing repos A and B\" or \"idle\". +So I never have a clue about whats going on. +I'm trying to set up this since long time, and I'm a very capable unix guy, and I still have the feeling that I can't trust git-annex. +I really like the tool but I'm not sure how to use it properly. +Thanks in advance. + + +"""]] diff --git a/doc/bugs/direct_mode_fails__44___left_in_an_inconsistent_state.mdwn b/doc/bugs/direct_mode_fails__44___left_in_an_inconsistent_state.mdwn new file mode 100644 index 0000000000..664511b6c7 --- /dev/null +++ b/doc/bugs/direct_mode_fails__44___left_in_an_inconsistent_state.mdwn @@ -0,0 +1,60 @@ +### Please describe the problem. + +Running `git annex direct` in a repository may results with the following error message: + + git-annex: /home/mildred/Music/.git/annex/objects/2K/49/SHA256-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/SHA256-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.map898.tmp: rename: permission denied (Permission denied) +failed + git-annex: direct: 1 failed + + +The major problem is that git-annex doesn't roll back the changes it did for the files it could successfully put in direct mode. Running git status show many files with typechange. The solution was to run `git add` on those files (although the hashing backend changed, so a commit must be created) + +### What steps will reproduce the problem? + +Don't know yet why the rename failed, but the direct mode should be rolled back if there is a problem. Restarting `git-annex direct` didn't result in an error. + +### What version of git-annex are you using? On what operating system? + +git-annex 5.20140405-g8729abc +arch-linux Linux moiraine 3.15.3-1-ARCH #1 SMP PREEMPT Tue Jul 1 07:32:45 CEST 2014 x86_64 GNU/Linux + +### Please provide any additional information below. + +[[!format sh """ + +$ git annex direct +commit +(Recording state in git...) +On branch master +nothing to commit, working directory clean +ok +direct .gitrefs/heads/annex/direct/master ok +direct .gitrefs/heads/git-annex ok +direct .gitrefs/heads/master ok +direct .gitrefs/heads/synced/master ok +direct .gitrefs/remotes/ashley/git-annex ok +direct .gitrefs/remotes/ashley/master ok +direct .gitrefs/remotes/ashley/synced/git-annex ok +direct .gitrefs/remotes/ashley/synced/master ok +direct .gitrefs/remotes/kylae/git-annex ok +direct .gitrefs/remotes/kylae/master ok +direct .gitrefs/remotes/kylae/synced/git-annex ok +direct ... ok +direct ... ok +direct ... ok + /home/mildred/Music/.git/annex/objects/2K/49/SHA256-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/SHA256-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.map897.tmp: rename: permission denied (Permission denied) + + leaving this file as-is; correct this problem and run git annex fsck on it +direct ... ok +direct ... ok +direct ... ok +direct ... ok +direct ... ok + +git-annex: /home/mildred/Music/.git/annex/objects/2K/49/SHA256-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/SHA256-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.map898.tmp: rename: permission denied (Permission denied) +failed +git-annex: direct: 1 failed + +"""]] + +[[!tag moreinfo]] diff --git a/doc/bugs/direct_mode_fails__44___left_in_an_inconsistent_state/comment_1_be1302a006a66e501fe543f3af191fea._comment b/doc/bugs/direct_mode_fails__44___left_in_an_inconsistent_state/comment_1_be1302a006a66e501fe543f3af191fea._comment new file mode 100644 index 0000000000..c0455b9924 --- /dev/null +++ b/doc/bugs/direct_mode_fails__44___left_in_an_inconsistent_state/comment_1_be1302a006a66e501fe543f3af191fea._comment @@ -0,0 +1,22 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 1" + date="2014-07-10T18:11:22Z" + content=""" +The most likely problem would be if your repository contained annexed objects owned by different user than the one running `git annex direct`. + +However, I cannot reproduce this problem: + +
+direct foo 
+  /home/joey/tmp/r/.git/annex/objects/pV/7j/SHA256E-s30--2754b7f82f6994005b97256273756f14d4abc17165c8819c06c07340d03351fa: setFileMode: permission denied (Operation not permitted)
+
+  leaving this file as-is; correct this problem and run git annex fsck on it
+direct  ok
+
+ +Since version 4.20130921, any exception when moving a file to direct mode should be caught like that. + +I will need more information to reproduce your bug. Or are you sure you wrote down the right version of git-annex? +"""]] diff --git a/doc/bugs/direct_mode_should_refuse_to_merge_with_illegal_filenames.mdwn b/doc/bugs/direct_mode_should_refuse_to_merge_with_illegal_filenames.mdwn new file mode 100644 index 0000000000..102404be42 --- /dev/null +++ b/doc/bugs/direct_mode_should_refuse_to_merge_with_illegal_filenames.mdwn @@ -0,0 +1,38 @@ +Some filesystems have stupid rules about characters not allowed in filenames. For example, FAT doesn't allow '?' '*' ':' etc. + +The direct mode merge code lets `git merge` update a temp directory with the new files from the merge, before doing its work tree update and committing. This can fail: + +
+error: unable to create file non-rus/Dance/Dream_Dance_Vol15/CD1/09-??.mp3 (Invalid argument)
+
+ +This leaves the work tree without the file, and the index knows about the file. Result is that the next time a commit is done, this file appears to have been deleted, and that is committed and propigates out. Which can be surprising. + +---- + +It would probably be better if, when the working tree cannot be updated, it left the repository in some state that would not make the next commit remove anything. + +Ie, direct mode should replicate this behavior: + +
+root@darkstar:/home/joey/mnt>git init
+root@darkstar:/home/joey/mnt>git merge FETCH_HEAD 
+error: unable to create file foo? (Invalid argument)
+fatal: read-tree failed
+root@darkstar:/home/joey/mnt>git status
+On branch master
+
+Initial commit
+
+nothing to commit (create/copy files and use "git add" to track)
+
+ +Problem is, the call to `git merge` can also fail due to a conflict. In that case, git-annex wants to continue with automatic conflict resolution. +So, how to detect when `git merge` has skipped creating illegal filenames? + +---- + +Alternatively, git-annex could learn/probe the full set of characters not allowed in filenames, and examine merges before performing them, and refuse to do anything if the merge added an illegal filename.a + +[[!tag confirmed]] + diff --git a/doc/bugs/failed_sync_with_direct_mode_repo.mdwn b/doc/bugs/failed_sync_with_direct_mode_repo.mdwn new file mode 100644 index 0000000000..879146deba --- /dev/null +++ b/doc/bugs/failed_sync_with_direct_mode_repo.mdwn @@ -0,0 +1,9 @@ +Two clients, both in direct mode, both running assistant. + +When a change is made on A, the assistant commits it to annex/direct/master. But, the master branch is not changed. + +B notices there is a change, pulls from A. Gets annex/direct/master, but does not merge it into its local branch at all. + +[[!tag confirmed]] + +> [[fixed|done]] --[[Joey]] diff --git a/doc/bugs/failed_sync_with_direct_mode_repo/comment_1_fb4026cc81eb0ec1e656e4a81ffacc4f._comment b/doc/bugs/failed_sync_with_direct_mode_repo/comment_1_fb4026cc81eb0ec1e656e4a81ffacc4f._comment new file mode 100644 index 0000000000..8b75fa67c9 --- /dev/null +++ b/doc/bugs/failed_sync_with_direct_mode_repo/comment_1_fb4026cc81eb0ec1e656e4a81ffacc4f._comment @@ -0,0 +1,13 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="108.236.230.124" + subject="comment 1" + date="2014-06-16T15:10:42Z" + content=""" +Reproduced this as described. + +Only happens when using the assistant in the second repository, which is a ssh remote of the first, and when there is not also a remote going the other way (so does not affect pairing). + +As I thought, the problem is that the master branch is not updated by the assistant when in direct mode, and while annex/direct/master is pulled by the other assistant, it does not merge it. + +"""]] diff --git a/doc/bugs/files_lost_during_upgrade.mdwn b/doc/bugs/files_lost_during_upgrade.mdwn new file mode 100644 index 0000000000..afab38d81a --- /dev/null +++ b/doc/bugs/files_lost_during_upgrade.mdwn @@ -0,0 +1,2191 @@ +### Please describe the problem. +I'm running git annex on two laptops sharing data with a shared server all running ubuntu and the binary distributions of git annex (different versions the server seems to be running 5.20140529-gb71f9bf right now). One of the laptops tried to upgrade to 5.20140613 (something) from 5.20140610-g5ec8bcf, which kind of fails since that version does not exist on the site, only the signature making it download and upgrade and then decide it still needs to upgrade, took a few times before I figured this out. + +During one of the upgrades I guess something died and it started to complain about an index.lock file that should be removed after all git instances were dead, so I killed git annex and removed the file (a few times maybe) just to get the upgrade through. After realizing it was trying to upgrade to the same version over and over again I realized it had somehow managed merge away all files and the git history looked like crazy. + +Had to "git annex indirect; git annex checkout GOODVERSION . ; git annex direct ; git annex assistant" to get the files back (I think that did it, I'm a little unsure what the best way to restore files are). + +### What steps will reproduce the problem? + +I don't know. Just posting this in case someone else can figure it out. + +Might be relevant that upgrade never works out of the box, it removes the old version of git annex and untars the new version in my home directory (which isn't on the path), so I can't use it from the command line. So I shut it down, copy it back to where it should go, and then update the .config/git-annex/program to point to the correct location. + +### What version of git-annex are you using? On what operating system? + +5.20140610-g5ec8bcf (maybe, I'm not sure if that was the one I upgraded from initially). + +### 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 think this is the log from before the files where removed + +[2014-06-18 13:41:14 CEST] main: starting assistant version 5.20140610-g5ec8bcf +[2014-06-18 13:41:14 CEST] UpgradeWatcher: Finished upgrading git-annex to version 5.20140610-g5ec8bcf +[2014-06-18 13:41:14 CEST] TransferScanner: Syncing with born + +(scanning...) [2014-06-18 13:41:14 CEST] Watcher: Performing startup scan + +(started...) fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +To ssh://jwiklund@born/store/backup/Documents.annex.1/ + f8f8217..ff8ecb1 git-annex -> synced/git-annex + bd2e43b..e88b148 annex/direct/master -> synced/master +fatal: pathspec 'music.txt' did not match any files +fatal: Unable to create '/home/jwiklund/Documents/.git/index.lock': File exists. + +If no other git process is currently running, this probably means a +git process crashed in this repository earlier. Make sure no other git +process is running and remove the file manually to continue. +fatal: Unable to create '/home/jwiklund/Documents/.git/index.lock': File exists. + +If no other git process is currently running, this probably means a +git process crashed in this repository earlier. Make sure no other git +process is running and remove the file manually to continue. +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files + +(Recording state in git...) + +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) + +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +ufatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +ser error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +[2014-06-18 13:41:16 CEST] Committer: Committing changesfatal: pathspec 'music.txt' did not match any files + to git +fatal: pathspec 'music.txt' did not match any files +[2014-06-18 13:41:16 CEST] Pusher: Syncing with born +fatal: Unable to create '/home/jwiklund/Documents/.git/index.lock': File exists. + +If no other git process is currently running, this probably means a +git process crashed in this repository earlier. Make sure no other git +process is running and remove the file manually to continue. +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +(Recording state in git...) +(Recording state in git...) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) + +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123) +user errfatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +fatal: pathspec 'music.txt' did not match any files +To ssh://jwiklund@born/store/backup/Documents.annex.1/ + ff8ecb1..c93e415 git-annex -> synced/git-annex + e88b148..220161f annex/direct/master -> synced/master + + +This is what it said when it wanted me to remove the index file after a failed upgrade + +[2014-06-18 13:38:31 CEST] main: starting assistant version 5.20140610-g5ec8bcf +[2014-06-18 13:38:31 CEST] UpgradeWatcher: Finished upgrading git-annex to version 5.20140610-g5ec8bcf +[2014-06-18 13:38:31 CEST] TransferScanner: Syncing with born +error: duplicate parent 294b61a3dce1e87a62e4d675deac2a9130b819e6 ignored + +(scanning...) [2014-06-18 13:38:31 CEST] Watcher: Performing startup scan + +(started...) error: duplicate parent 76407052287ba54b350e56e36353a53a3dbc5d4f ignored +To ssh://jwiklund@born/store/backup/Documents.annex.1/ + fdae080..cf9f2a9 git-annex -> synced/git-annex + 294b61a..7640705 annex/direct/master -> synced/master +fatal: Could not switch to '/home/jwiklund/Documents/.git/annex/merge/': No such file or directory +[2014-06-18 13:38:33 CEST] Committer: Committing changes to git +fatal: Unable to create '/home/jwiklund/Documents/.git/index.lock': File exists. + +If no other git process is currently running, this probably means a +git process crashed in this repository earlier. Make sure no other git +process is running and remove the file manually to continue. +[2014-06-18 13:38:33 CEST] Pusher: Syncing with born +fatal: Could not switch to '/home/jwiklund/Documents/.git/annex/merge/': No such file or directory +To ssh://jwiklund@born/store/backup/Documents.annex.1/ + 7640705..6b9d33e annex/direct/master -> synced/master +fatal: Could not switch to '/home/jwiklund/Documents/.git/annex/merge/': No such file or directory +[2014-06-18 13:39:20 CEST] main: warning git-annex has been shut down + +Here is the upgrade + +error: duplicate parent 6b9d33ef3a16e6245f21f3948aa96691c2b8453b ignored +(scanning...) [2014 +-06-18 13:40:55 CEST] Watcher: Performing startup scan +(started...) + +error: duplicate parent 80254c9c048a35064ba42ae6a79610da6deac0ae ignored +gpg: WARNING: unsafe permissions on homedir `/tmp/git-annex-gpg.tmp.0' +gpg: Signature made fre 13 jun 2014 17:28:22 CEST using DSA key ID 89C809CB +gpg: /tmp/git-annex-gpg.tmp.0/trustdb.gpg: trustdb created +gpg: Good signature from "git-annex distribution signing key (for Joey Hess) " +gpg: WARNING: This key is not certified with a trusted signature! +gpg: There is no indication that the signature belongs to the owner. +Primary key fingerprint: 4005 5C6A FD2D 526B 2961 E78F 5EE1 DBA7 89C8 09CB +[2014-06-18 13:40:56 CEST] Upgrader: An upgrade of git-annex is available. (version 5.20140613) +To ssh://jwiklund@born/store/backup/Documents.annex.1/ + 6b9d33e..80254c9 annex/direct/master -> synced/master + +[2014-06-18 13:40:57 CEST] Committer: Committing changes to git +(Recording state in git...) +[2014-06-18 13:40:57 CEST] Pusher: Syncing with born + +error: duplicate parent 6be6bb32164e7103c44077ce6fa450b7c0d36e0c ignored +To ssh://jwiklund@born/store/backup/Documents.annex.1/ + 80254c9..6be6bb3 annex/direct/master -> synced/master + +--2014-06-18 13:41:07-- https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-amd64.tar.gz +Resolving downloads.kitenet.net (downloads.kitenet.net)... 107.170.31.195 +Connecting to downloads.kitenet.net (downloads.kitenet.net)|107.170.31.195|:443... connected. +HTTP request sent, awaiting response... 200 OK +Length: 42645638 (41M) [application/x-gzip] +Saving to: ‘/home/jwiklund/Documents/.git/annex/tmp/SHA256E-s42645638--4ae41fb29bd26339ea10f53ea2b7cf3132e53d5e8fbfde7b43b912aa52b3d319.tar.gz’ + + 0K .......... .......... .......... .......... .......... 0% 171K 4m3s + 50K .......... .......... .......... .......... .......... 0% 505K 2m43s + 100K .......... .......... .......... .......... .......... 0% 258K 2m42s + 150K .......... .......... .......... .......... .......... 0% 510K 2m22s + 200K .......... .......... .......... .......... .......... 0% 505K 2m10s + 250K .......... .......... .......... .......... .......... 0% 516K 2m1s + 300K .......... .......... .......... .......... .......... 0% 512K 1m55s + 350K .......... .......... .......... .......... .......... 0% 31,1M 1m41s + 400K .......... .......... .......... .......... .......... 1% 512K 99s + 450K .......... .......... .......... .......... .......... 1% 515K 97s + 500K .......... .......... .......... .......... .......... 1% 1,25M 91s + 550K .......... .......... .......... .......... .......... 1% 843K 87s + 600K .......... .......... .......... .......... .......... 1% 1,25M 83s + 650K .......... .......... .......... .......... .......... 1% 858K 80s + 700K .......... .......... .......... .......... .......... 1% 1,25M 77s + 750K .......... .......... .......... .......... .......... 1% 840K 75s + 800K .......... .......... .......... .......... .......... 2% 59,4M 70s + 850K .......... .......... .......... .......... .......... 2% 518K 71s + 900K .......... .......... .......... .......... .......... 2% 39,5M 67s + 950K .......... .......... .......... .......... .......... 2% 74,5M 64s + 1000K .......... .......... .......... .......... .......... 2% 520K 64s + 1050K .......... .......... .......... .......... .......... 2% 57,3M 61s + 1100K .......... .......... .......... .......... .......... 2% 1,31M 60s + 1150K .......... .......... .......... .......... .......... 2% 855K 59s + 1200K .......... .......... .......... .......... .......... 3% 22,5M 57s + 1250K .......... .......... .......... .......... .......... 3% 1,33M 56s + 1300K .......... .......... .......... .......... .......... 3% 848K 55s + 1350K .......... .......... .......... .......... .......... 3% 9,76M 54s + 1400K .......... .......... .......... .......... .......... 3% 48,8M 52s + 1450K .......... .......... .......... .......... .......... 3% 1,45M 51s + 1500K .......... .......... .......... .......... .......... 3% 837K 51s + 1550K .......... .......... .......... .......... .......... 3% 13,4M 49s + 1600K .......... .......... .......... .......... .......... 3% 1,47M 48s + 1650K .......... .......... .......... .......... .......... 4% 861K 48s + 1700K .......... .......... .......... .......... .......... 4% 14,3M 47s + 1750K .......... .......... .......... .......... .......... 4% 13,0M 46s + 1800K .......... .......... .......... .......... .......... 4% 1,49M 45s + 1850K .......... .......... .......... .......... .......... 4% 863K 45s + 1900K .......... .......... .......... .......... .......... 4% 62,3M 44s + 1950K .......... .......... .......... .......... .......... 4% 7,64M 43s + 2000K .......... .......... .......... .......... .......... 4% 10,3M 42s + 2050K .......... .......... .......... .......... .......... 5% 582K 42s + 2100K .......... .......... .......... .......... .......... 5% 8,34M 41s + 2150K .......... .......... .......... .......... .......... 5% 48,7M 40s + 2200K .......... .......... .......... .......... .......... 5% 61,6M 39s + 2250K .......... .......... .......... .......... .......... 5% 1,52M 39s + 2300K .......... .......... .......... .......... .......... 5% 860K 39s + 2350K .......... .......... .......... .......... .......... 5% 60,4M 38s + 2400K .......... .......... .......... .......... .......... 5% 8,20M 38s + 2450K .......... .......... .......... .......... .......... 6% 87,7M 37s + 2500K .......... .......... .......... .......... .......... 6% 1,54M 37s + 2550K .......... .......... .......... .......... .......... 6% 855K 37s + 2600K .......... .......... .......... .......... .......... 6% 89,2M 36s + 2650K .......... .......... .......... .......... .......... 6% 7,38M 35s + 2700K .......... .......... .......... .......... .......... 6% 168M 35s + 2750K .......... .......... .......... .......... .......... 6% 1,44M 34s + 2800K .......... .......... .......... .......... .......... 6% 1,37M 34s + 2850K .......... .......... .......... .......... .......... 6% 2,21M 34s + 2900K .......... .......... .......... .......... .......... 7% 6,19M 33s + 2950K .......... .......... .......... .......... .......... 7% 174M 33s + 3000K .......... .......... .......... .......... .......... 7% 174M 32s + 3050K .......... .......... .......... .......... .......... 7% 196M 32s + 3100K .......... .......... .......... .......... .......... 7% 1,57M 32s + 3150K .......... .......... .......... .......... .......... 7% 1,36M 31s + 3200K .......... .......... .......... .......... .......... 7% 1,67M 31s + 3250K .......... .......... .......... .......... .......... 7% 70,5M 31s + 3300K .......... .......... .......... .......... .......... 8% 109M 30s + 3350K .......... .......... .......... .......... .......... 8% 84,8M 30s + 3400K .......... .......... .......... .......... .......... 8% 1,61M 30s + 3450K .......... .......... .......... .......... .......... 8% 8,23M 29s + 3500K .......... .......... .......... .......... .......... 8% 1,47M 29s + 3550K .......... .......... .......... .......... .......... 8% 2,77M 29s + 3600K .......... .......... .......... .......... .......... 8% 5,14M 29s + 3650K .......... .......... .......... .......... .......... 8% 28,0M 28s + 3700K .......... .......... .......... .......... .......... 9% 169M 28s + 3750K .......... .......... .......... .......... .......... 9% 1,85M 28s + 3800K .......... .......... .......... .......... .......... 9% 86,5M 27s + 3850K .......... .......... .......... .......... .......... 9% 7,14M 27s + 3900K .......... .......... .......... .......... .......... 9% 1,55M 27s + 3950K .......... .......... .......... .......... .......... 9% 2,53M 27s + 4000K .......... .......... .......... .......... .......... 9% 5,08M 26s + 4050K .......... .......... .......... .......... .......... 9% 37,6M 26s + 4100K .......... .......... .......... .......... .......... 9% 45,6M 26s + 4150K .......... .......... .......... .......... .......... 10% 86,2M 25s + 4200K .......... .......... .......... .......... .......... 10% 1,80M 25s + 4250K .......... .......... .......... .......... .......... 10% 99,6M 25s + 4300K .......... .......... .......... .......... .......... 10% 171M 25s + 4350K .......... .......... .......... .......... .......... 10% 7,41M 24s + 4400K .......... .......... .......... .......... .......... 10% 1,55M 24s + 4450K .......... .......... .......... .......... .......... 10% 2,53M 24s + 4500K .......... .......... .......... .......... .......... 10% 59,5M 24s + 4550K .......... .......... .......... .......... .......... 11% 5,43M 24s + 4600K .......... .......... .......... .......... .......... 11% 25,3M 23s + 4650K .......... .......... .......... .......... .......... 11% 138M 23s + 4700K .......... .......... .......... .......... .......... 11% 90,7M 23s + 4750K .......... .......... .......... .......... .......... 11% 116M 23s + 4800K .......... .......... .......... .......... .......... 11% 1,81M 23s + 4850K .......... .......... .......... .......... .......... 11% 64,4M 22s + 4900K .......... .......... .......... .......... .......... 11% 7,76M 22s + 4950K .......... .......... .......... .......... .......... 12% 67,2M 22s + 5000K .......... .......... .......... .......... .......... 12% 1,60M 22s + 5050K .......... .......... .......... .......... .......... 12% 2,53M 22s + 5100K .......... .......... .......... .......... .......... 12% 5,14M 22s + 5150K .......... .......... .......... .......... .......... 12% 90,4M 21s + 5200K .......... .......... .......... .......... .......... 12% 27,7M 21s + 5250K .......... .......... .......... .......... .......... 12% 41,7M 21s + 5300K .......... .......... .......... .......... .......... 12% 91,5M 21s + 5350K .......... .......... .......... .......... .......... 12% 1,85M 21s + 5400K .......... .......... .......... .......... .......... 13% 109M 20s + 5450K .......... .......... .......... .......... .......... 13% 79,2M 20s + 5500K .......... .......... .......... .......... .......... 13% 6,84M 20s + 5550K .......... .......... .......... .......... .......... 13% 32,4M 20s + 5600K .......... .......... .......... .......... .......... 13% 5,70M 20s + 5650K .......... .......... .......... .......... .......... 13% 2,36M 20s + 5700K .......... .......... .......... .......... .......... 13% 2,53M 20s + 5750K .......... .......... .......... .......... .......... 13% 5,15M 19s + 5800K .......... .......... .......... .......... .......... 14% 31,1M 19s + 5850K .......... .......... .......... .......... .......... 14% 23,0M 19s + 5900K .......... .......... .......... .......... .......... 14% 45,3M 19s + 5950K .......... .......... .......... .......... .......... 14% 73,7M 19s + 6000K .......... .......... .......... .......... .......... 14% 1,96M 19s + 6050K .......... .......... .......... .......... .......... 14% 51,7M 18s + 6100K .......... .......... .......... .......... .......... 14% 8,10M 18s + 6150K .......... .......... .......... .......... .......... 14% 45,9M 18s + 6200K .......... .......... .......... .......... .......... 15% 23,5M 18s + 6250K .......... .......... .......... .......... .......... 15% 7,66M 18s + 6300K .......... .......... .......... .......... .......... 15% 2,29M 18s + 6350K .......... .......... .......... .......... .......... 15% 2,46M 18s + 6400K .......... .......... .......... .......... .......... 15% 46,8M 18s + 6450K .......... .......... .......... .......... .......... 15% 5,73M 17s + 6500K .......... .......... .......... .......... .......... 15% 23,0M 17s + 6550K .......... .......... .......... .......... .......... 15% 21,1M 17s + 6600K .......... .......... .......... .......... .......... 15% 48,4M 17s + 6650K .......... .......... .......... .......... .......... 16% 74,1M 17s + 6700K .......... .......... .......... .......... .......... 16% 2,07M 17s + 6750K .......... .......... .......... .......... .......... 16% 30,3M 17s + 6800K .......... .......... .......... .......... .......... 16% 7,81M 17s + 6850K .......... .......... .......... .......... .......... 16% 59,1M 16s + 6900K .......... .......... .......... .......... .......... 16% 24,6M 16s + 6950K .......... .......... .......... .......... .......... 16% 8,11M 16s + 7000K .......... .......... .......... .......... .......... 16% 7,57M 16s + 7050K .......... .......... .......... .......... .......... 17% 3,19M 16s + 7100K .......... .......... .......... .......... .......... 17% 2,35M 16s + 7150K .......... .......... .......... .......... .......... 17% 5,56M 16s + 7200K .......... .......... .......... .......... .......... 17% 51,4M 16s + 7250K .......... .......... .......... .......... .......... 17% 45,5M 16s + 7300K .......... .......... .......... .......... .......... 17% 61,6M 16s + 7350K .......... .......... .......... .......... .......... 17% 22,7M 15s + 7400K .......... .......... .......... .......... .......... 17% 53,6M 15s + 7450K .......... .......... .......... .......... .......... 18% 2,12M 15s + 7500K .......... .......... .......... .......... .......... 18% 32,2M 15s + 7550K .......... .......... .......... .......... .......... 18% 61,0M 15s + 7600K .......... .......... .......... .......... .......... 18% 7,22M 15s + 7650K .......... .......... .......... .......... .......... 18% 23,6M 15s + 7700K .......... .......... .......... .......... .......... 18% 7,39M 15s + 7750K .......... .......... .......... .......... .......... 18% 53,7M 15s + 7800K .......... .......... .......... .......... .......... 18% 8,51M 15s + 7850K .......... .......... .......... .......... .......... 18% 8,28M 14s + 7900K .......... .......... .......... .......... .......... 19% 1,26M 15s + 7950K .......... .......... .......... .......... .......... 19% 59,8M 14s + 8000K .......... .......... .......... .......... .......... 19% 58,8M 14s + 8050K .......... .......... .......... .......... .......... 19% 54,2M 14s + 8100K .......... .......... .......... .......... .......... 19% 70,3M 14s + 8150K .......... .......... .......... .......... .......... 19% 26,5M 14s + 8200K .......... .......... .......... .......... .......... 19% 54,8M 14s + 8250K .......... .......... .......... .......... .......... 19% 73,9M 14s + 8300K .......... .......... .......... .......... .......... 20% 2,11M 14s + 8350K .......... .......... .......... .......... .......... 20% 21,6M 14s + 8400K .......... .......... .......... .......... .......... 20% 8,29M 14s + 8450K .......... .......... .......... .......... .......... 20% 29,6M 14s + 8500K .......... .......... .......... .......... .......... 20% 59,6M 13s + 8550K .......... .......... .......... .......... .......... 20% 6,65M 13s + 8600K .......... .......... .......... .......... .......... 20% 8,50M 13s + 8650K .......... .......... .......... .......... .......... 20% 10,1M 13s + 8700K .......... .......... .......... .......... .......... 21% 44,0M 13s + 8750K .......... .......... .......... .......... .......... 21% 1,42M 13s + 8800K .......... .......... .......... .......... .......... 21% 11,1M 13s + 8850K .......... .......... .......... .......... .......... 21% 78,9M 13s + 8900K .......... .......... .......... .......... .......... 21% 50,5M 13s + 8950K .......... .......... .......... .......... .......... 21% 73,1M 13s + 9000K .......... .......... .......... .......... .......... 21% 77,6M 13s + 9050K .......... .......... .......... .......... .......... 21% 20,2M 13s + 9100K .......... .......... .......... .......... .......... 21% 25,2M 13s + 9150K .......... .......... .......... .......... .......... 22% 117M 12s + 9200K .......... .......... .......... .......... .......... 22% 2,23M 12s + 9250K .......... .......... .......... .......... .......... 22% 22,4M 12s + 9300K .......... .......... .......... .......... .......... 22% 8,59M 12s + 9350K .......... .......... .......... .......... .......... 22% 24,5M 12s + 9400K .......... .......... .......... .......... .......... 22% 79,6M 12s + 9450K .......... .......... .......... .......... .......... 22% 7,10M 12s + 9500K .......... .......... .......... .......... .......... 22% 8,02M 12s + 9550K .......... .......... .......... .......... .......... 23% 8,69M 12s + 9600K .......... .......... .......... .......... .......... 23% 8,16M 12s + 9650K .......... .......... .......... .......... .......... 23% 63,0M 12s + 9700K .......... .......... .......... .......... .......... 23% 1,72M 12s + 9750K .......... .......... .......... .......... .......... 23% 10,1M 12s + 9800K .......... .......... .......... .......... .......... 23% 60,2M 12s + 9850K .......... .......... .......... .......... .......... 23% 61,9M 12s + 9900K .......... .......... .......... .......... .......... 23% 62,9M 12s + 9950K .......... .......... .......... .......... .......... 24% 76,6M 11s + 10000K .......... .......... .......... .......... .......... 24% 23,8M 11s + 10050K .......... .......... .......... .......... .......... 24% 30,4M 11s + 10100K .......... .......... .......... .......... .......... 24% 3,50M 11s + 10150K .......... .......... .......... .......... .......... 24% 6,05M 11s + 10200K .......... .......... .......... .......... .......... 24% 14,9M 11s + 10250K .......... .......... .......... .......... .......... 24% 10,5M 11s + 10300K .......... .......... .......... .......... .......... 24% 21,5M 11s + 10350K .......... .......... .......... .......... .......... 24% 79,7M 11s + 10400K .......... .......... .......... .......... .......... 25% 8,60M 11s + 10450K .......... .......... .......... .......... .......... 25% 6,92M 11s + 10500K .......... .......... .......... .......... .......... 25% 11,0M 11s + 10550K .......... .......... .......... .......... .......... 25% 6,96M 11s + 10600K .......... .......... .......... .......... .......... 25% 66,9M 11s + 10650K .......... .......... .......... .......... .......... 25% 10,9M 11s + 10700K .......... .......... .......... .......... .......... 25% 1,71M 11s + 10750K .......... .......... .......... .......... .......... 25% 60,4M 11s + 10800K .......... .......... .......... .......... .......... 26% 39,6M 11s + 10850K .......... .......... .......... .......... .......... 26% 62,6M 11s + 10900K .......... .......... .......... .......... .......... 26% 65,0M 10s + 10950K .......... .......... .......... .......... .......... 26% 137M 10s + 11000K .......... .......... .......... .......... .......... 26% 37,8M 10s + 11050K .......... .......... .......... .......... .......... 26% 82,1M 10s + 11100K .......... .......... .......... .......... .......... 26% 36,9M 10s + 11150K .......... .......... .......... .......... .......... 26% 3,47M 10s + 11200K .......... .......... .......... .......... .......... 27% 4,59M 10s + 11250K .......... .......... .......... .......... .......... 27% 10,3M 10s + 11300K .......... .......... .......... .......... .......... 27% 105M 10s + 11350K .......... .......... .......... .......... .......... 27% 21,8M 10s + 11400K .......... .......... .......... .......... .......... 27% 8,57M 10s + 11450K .......... .......... .......... .......... .......... 27% 6,57M 10s + 11500K .......... .......... .......... .......... .......... 27% 60,3M 10s + 11550K .......... .......... .......... .......... .......... 27% 11,5M 10s + 11600K .......... .......... .......... .......... .......... 27% 7,50M 10s + 11650K .......... .......... .......... .......... .......... 28% 72,7M 10s + 11700K .......... .......... .......... .......... .......... 28% 7,61M 10s + 11750K .......... .......... .......... .......... .......... 28% 2,31M 10s + 11800K .......... .......... .......... .......... .......... 28% 6,77M 10s + 11850K .......... .......... .......... .......... .......... 28% 66,3M 10s + 11900K .......... .......... .......... .......... .......... 28% 69,9M 10s + 11950K .......... .......... .......... .......... .......... 28% 73,3M 9s + 12000K .......... .......... .......... .......... .......... 28% 59,8M 9s + 12050K .......... .......... .......... .......... .......... 29% 62,8M 9s + 12100K .......... .......... .......... .......... .......... 29% 72,4M 9s + 12150K .......... .......... .......... .......... .......... 29% 38,9M 9s + 12200K .......... .......... .......... .......... .......... 29% 8,31M 9s + 12250K .......... .......... .......... .......... .......... 29% 6,24M 9s + 12300K .......... .......... .......... .......... .......... 29% 4,90M 9s + 12350K .......... .......... .......... .......... .......... 29% 8,21M 9s + 12400K .......... .......... .......... .......... .......... 29% 20,0M 9s + 12450K .......... .......... .......... .......... .......... 30% 9,55M 9s + 12500K .......... .......... .......... .......... .......... 30% 49,5M 9s + 12550K .......... .......... .......... .......... .......... 30% 6,87M 9s + 12600K .......... .......... .......... .......... .......... 30% 60,8M 9s + 12650K .......... .......... .......... .......... .......... 30% 11,6M 9s + 12700K .......... .......... .......... .......... .......... 30% 68,3M 9s + 12750K .......... .......... .......... .......... .......... 30% 7,84M 9s + 12800K .......... .......... .......... .......... .......... 30% 41,8M 9s + 12850K .......... .......... .......... .......... .......... 30% 8,13M 9s + 12900K .......... .......... .......... .......... .......... 31% 2,43M 9s + 12950K .......... .......... .......... .......... .......... 31% 6,04M 9s + 13000K .......... .......... .......... .......... .......... 31% 47,7M 9s + 13050K .......... .......... .......... .......... .......... 31% 56,9M 9s + 13100K .......... .......... .......... .......... .......... 31% 59,0M 9s + 13150K .......... .......... .......... .......... .......... 31% 49,4M 8s + 13200K .......... .......... .......... .......... .......... 31% 61,2M 8s + 13250K .......... .......... .......... .......... .......... 31% 56,6M 8s + 13300K .......... .......... .......... .......... .......... 32% 69,6M 8s + 13350K .......... .......... .......... .......... .......... 32% 9,89M 8s + 13400K .......... .......... .......... .......... .......... 32% 51,2M 8s + 13450K .......... .......... .......... .......... .......... 32% 3,68M 8s + 13500K .......... .......... .......... .......... .......... 32% 10,9M 8s + 13550K .......... .......... .......... .......... .......... 32% 9,06M 8s + 13600K .......... .......... .......... .......... .......... 32% 22,0M 8s + 13650K .......... .......... .......... .......... .......... 32% 56,2M 8s + 13700K .......... .......... .......... .......... .......... 33% 8,24M 8s + 13750K .......... .......... .......... .......... .......... 33% 7,93M 8s + 13800K .......... .......... .......... .......... .......... 33% 46,0M 8s + 13850K .......... .......... .......... .......... .......... 33% 140M 8s + 13900K .......... .......... .......... .......... .......... 33% 12,6M 8s + 13950K .......... .......... .......... .......... .......... 33% 8,45M 8s + 14000K .......... .......... .......... .......... .......... 33% 25,4M 8s + 14050K .......... .......... .......... .......... .......... 33% 8,48M 8s + 14100K .......... .......... .......... .......... .......... 33% 115M 8s + 14150K .......... .......... .......... .......... .......... 34% 2,37M 8s + 14200K .......... .......... .......... .......... .......... 34% 6,80M 8s + 14250K .......... .......... .......... .......... .......... 34% 41,9M 8s + 14300K .......... .......... .......... .......... .......... 34% 59,1M 8s + 14350K .......... .......... .......... .......... .......... 34% 134M 8s + 14400K .......... .......... .......... .......... .......... 34% 181M 8s + 14450K .......... .......... .......... .......... .......... 34% 107M 8s + 14500K .......... .......... .......... .......... .......... 34% 61,9M 7s + 14550K .......... .......... .......... .......... .......... 35% 24,4M 7s + 14600K .......... .......... .......... .......... .......... 35% 148M 7s + 14650K .......... .......... .......... .......... .......... 35% 8,76M 7s + 14700K .......... .......... .......... .......... .......... 35% 8,29M 7s + 14750K .......... .......... .......... .......... .......... 35% 3,92M 7s + 14800K .......... .......... .......... .......... .......... 35% 9,53M 7s + 14850K .......... .......... .......... .......... .......... 35% 143M 7s + 14900K .......... .......... .......... .......... .......... 35% 19,0M 7s + 14950K .......... .......... .......... .......... .......... 36% 7,80M 7s + 15000K .......... .......... .......... .......... .......... 36% 7,87M 7s + 15050K .......... .......... .......... .......... .......... 36% 60,1M 7s + 15100K .......... .......... .......... .......... .......... 36% 55,7M 7s + 15150K .......... .......... .......... .......... .......... 36% 12,2M 7s + 15200K .......... .......... .......... .......... .......... 36% 11,5M 7s + 15250K .......... .......... .......... .......... .......... 36% 23,0M 7s + 15300K .......... .......... .......... .......... .......... 36% 50,4M 7s + 15350K .......... .......... .......... .......... .......... 36% 51,4M 7s + 15400K .......... .......... .......... .......... .......... 37% 9,26M 7s + 15450K .......... .......... .......... .......... .......... 37% 7,03M 7s + 15500K .......... .......... .......... .......... .......... 37% 3,39M 7s + 15550K .......... .......... .......... .......... .......... 37% 6,82M 7s + 15600K .......... .......... .......... .......... .......... 37% 33,2M 7s + 15650K .......... .......... .......... .......... .......... 37% 56,0M 7s + 15700K .......... .......... .......... .......... .......... 37% 52,0M 7s + 15750K .......... .......... .......... .......... .......... 37% 55,0M 7s + 15800K .......... .......... .......... .......... .......... 38% 66,8M 7s + 15850K .......... .......... .......... .......... .......... 38% 62,0M 7s + 15900K .......... .......... .......... .......... .......... 38% 62,8M 7s + 15950K .......... .......... .......... .......... .......... 38% 192M 7s + 16000K .......... .......... .......... .......... .......... 38% 164M 7s + 16050K .......... .......... .......... .......... .......... 38% 16,4M 7s + 16100K .......... .......... .......... .......... .......... 38% 28,9M 7s + 16150K .......... .......... .......... .......... .......... 38% 8,73M 6s + 16200K .......... .......... .......... .......... .......... 39% 51,7M 6s + 16250K .......... .......... .......... .......... .......... 39% 4,07M 6s + 16300K .......... .......... .......... .......... .......... 39% 8,88M 6s + 16350K .......... .......... .......... .......... .......... 39% 30,0M 6s + 16400K .......... .......... .......... .......... .......... 39% 10,2M 6s + 16450K .......... .......... .......... .......... .......... 39% 6,47M 6s + 16500K .......... .......... .......... .......... .......... 39% 49,7M 6s + 16550K .......... .......... .......... .......... .......... 39% 57,1M 6s + 16600K .......... .......... .......... .......... .......... 39% 5,99M 6s + 16650K .......... .......... .......... .......... .......... 40% 47,3M 6s + 16700K .......... .......... .......... .......... .......... 40% 50,5M 6s + 16750K .......... .......... .......... .......... .......... 40% 80,4M 6s + 16800K .......... .......... .......... .......... .......... 40% 49,6M 6s + 16850K .......... .......... .......... .......... .......... 40% 61,4M 6s + 16900K .......... .......... .......... .......... .......... 40% 9,92M 6s + 16950K .......... .......... .......... .......... .......... 40% 97,6M 6s + 17000K .......... .......... .......... .......... .......... 40% 2,35M 6s + 17050K .......... .......... .......... .......... .......... 41% 6,43M 6s + 17100K .......... .......... .......... .......... .......... 41% 41,0M 6s + 17150K .......... .......... .......... .......... .......... 41% 56,3M 6s + 17200K .......... .......... .......... .......... .......... 41% 46,3M 6s + 17250K .......... .......... .......... .......... .......... 41% 59,6M 6s + 17300K .......... .......... .......... .......... .......... 41% 51,6M 6s + 17350K .......... .......... .......... .......... .......... 41% 84,3M 6s + 17400K .......... .......... .......... .......... .......... 41% 62,6M 6s + 17450K .......... .......... .......... .......... .......... 42% 81,4M 6s + 17500K .......... .......... .......... .......... .......... 42% 80,4M 6s + 17550K .......... .......... .......... .......... .......... 42% 20,1M 6s + 17600K .......... .......... .......... .......... .......... 42% 26,4M 6s + 17650K .......... .......... .......... .......... .......... 42% 68,5M 6s + 17700K .......... .......... .......... .......... .......... 42% 12,3M 6s + 17750K .......... .......... .......... .......... .......... 42% 30,3M 6s + 17800K .......... .......... .......... .......... .......... 42% 3,98M 6s + 17850K .......... .......... .......... .......... .......... 42% 89,6M 6s + 17900K .......... .......... .......... .......... .......... 43% 9,68M 6s + 17950K .......... .......... .......... .......... .......... 43% 34,4M 6s + 18000K .......... .......... .......... .......... .......... 43% 7,09M 6s + 18050K .......... .......... .......... .......... .......... 43% 9,29M 6s + 18100K .......... .......... .......... .......... .......... 43% 88,7M 6s + 18150K .......... .......... .......... .......... .......... 43% 43,6M 5s + 18200K .......... .......... .......... .......... .......... 43% 10,3M 5s + 18250K .......... .......... .......... .......... .......... 43% 12,4M 5s + 18300K .......... .......... .......... .......... .......... 44% 113M 5s + 18350K .......... .......... .......... .......... .......... 44% 23,2M 5s + 18400K .......... .......... .......... .......... .......... 44% 96,5M 5s + 18450K .......... .......... .......... .......... .......... 44% 119M 5s + 18500K .......... .......... .......... .......... .......... 44% 70,8M 5s + 18550K .......... .......... .......... .......... .......... 44% 9,12M 5s + 18600K .......... .......... .......... .......... .......... 44% 66,7M 5s + 18650K .......... .......... .......... .......... .......... 44% 7,63M 5s + 18700K .......... .......... .......... .......... .......... 45% 2,25M 5s + 18750K .......... .......... .......... .......... .......... 45% 112M 5s + 18800K .......... .......... .......... .......... .......... 45% 61,9M 5s + 18850K .......... .......... .......... .......... .......... 45% 79,6M 5s + 18900K .......... .......... .......... .......... .......... 45% 60,4M 5s + 18950K .......... .......... .......... .......... .......... 45% 110M 5s + 19000K .......... .......... .......... .......... .......... 45% 81,0M 5s + 19050K .......... .......... .......... .......... .......... 45% 77,1M 5s + 19100K .......... .......... .......... .......... .......... 45% 107M 5s + 19150K .......... .......... .......... .......... .......... 46% 59,2M 5s + 19200K .......... .......... .......... .......... .......... 46% 12,9M 5s + 19250K .......... .......... .......... .......... .......... 46% 31,5M 5s + 19300K .......... .......... .......... .......... .......... 46% 59,1M 5s + 19350K .......... .......... .......... .......... .......... 46% 8,48M 5s + 19400K .......... .......... .......... .......... .......... 46% 70,5M 5s + 19450K .......... .......... .......... .......... .......... 46% 6,40M 5s + 19500K .......... .......... .......... .......... .......... 46% 47,7M 5s + 19550K .......... .......... .......... .......... .......... 47% 5,84M 5s + 19600K .......... .......... .......... .......... .......... 47% 54,2M 5s + 19650K .......... .......... .......... .......... .......... 47% 34,6M 5s + 19700K .......... .......... .......... .......... .......... 47% 8,77M 5s + 19750K .......... .......... .......... .......... .......... 47% 45,6M 5s + 19800K .......... .......... .......... .......... .......... 47% 8,46M 5s + 19850K .......... .......... .......... .......... .......... 47% 53,9M 5s + 19900K .......... .......... .......... .......... .......... 47% 10,0M 5s + 19950K .......... .......... .......... .......... .......... 48% 41,3M 5s + 20000K .......... .......... .......... .......... .......... 48% 15,0M 5s + 20050K .......... .......... .......... .......... .......... 48% 25,6M 5s + 20100K .......... .......... .......... .......... .......... 48% 75,2M 5s + 20150K .......... .......... .......... .......... .......... 48% 118M 5s + 20200K .......... .......... .......... .......... .......... 48% 106M 5s + 20250K .......... .......... .......... .......... .......... 48% 122M 5s + 20300K .......... .......... .......... .......... .......... 48% 9,40M 5s + 20350K .......... .......... .......... .......... .......... 48% 82,8M 5s + 20400K .......... .......... .......... .......... .......... 49% 2,31M 5s + 20450K .......... .......... .......... .......... .......... 49% 102M 5s + 20500K .......... .......... .......... .......... .......... 49% 7,52M 5s + 20550K .......... .......... .......... .......... .......... 49% 59,3M 5s + 20600K .......... .......... .......... .......... .......... 49% 108M 4s + 20650K .......... .......... .......... .......... .......... 49% 37,9M 4s + 20700K .......... .......... .......... .......... .......... 49% 120M 4s + 20750K .......... .......... .......... .......... .......... 49% 84,2M 4s + 20800K .......... .......... .......... .......... .......... 50% 67,8M 4s + 20850K .......... .......... .......... .......... .......... 50% 100M 4s + 20900K .......... .......... .......... .......... .......... 50% 71,7M 4s + 20950K .......... .......... .......... .......... .......... 50% 73,8M 4s + 21000K .......... .......... .......... .......... .......... 50% 15,5M 4s + 21050K .......... .......... .......... .......... .......... 50% 21,8M 4s + 21100K .......... .......... .......... .......... .......... 50% 11,0M 4s + 21150K .......... .......... .......... .......... .......... 50% 64,5M 4s + 21200K .......... .......... .......... .......... .......... 51% 29,8M 4s + 21250K .......... .......... .......... .......... .......... 51% 8,28M 4s + 21300K .......... .......... .......... .......... .......... 51% 9,12M 4s + 21350K .......... .......... .......... .......... .......... 51% 9,08M 4s + 21400K .......... .......... .......... .......... .......... 51% 42,5M 4s + 21450K .......... .......... .......... .......... .......... 51% 67,7M 4s + 21500K .......... .......... .......... .......... .......... 51% 37,9M 4s + 21550K .......... .......... .......... .......... .......... 51% 9,20M 4s + 21600K .......... .......... .......... .......... .......... 51% 11,2M 4s + 21650K .......... .......... .......... .......... .......... 52% 21,7M 4s + 21700K .......... .......... .......... .......... .......... 52% 71,1M 4s + 21750K .......... .......... .......... .......... .......... 52% 8,58M 4s + 21800K .......... .......... .......... .......... .......... 52% 15,8M 4s + 21850K .......... .......... .......... .......... .......... 52% 49,8M 4s + 21900K .......... .......... .......... .......... .......... 52% 26,0M 4s + 21950K .......... .......... .......... .......... .......... 52% 84,1M 4s + 22000K .......... .......... .......... .......... .......... 52% 75,1M 4s + 22050K .......... .......... .......... .......... .......... 53% 91,9M 4s + 22100K .......... .......... .......... .......... .......... 53% 90,4M 4s + 22150K .......... .......... .......... .......... .......... 53% 11,7M 4s + 22200K .......... .......... .......... .......... .......... 53% 40,0M 4s + 22250K .......... .......... .......... .......... .......... 53% 86,5M 4s + 22300K .......... .......... .......... .......... .......... 53% 80,8M 4s + 22350K .......... .......... .......... .......... .......... 53% 2,36M 4s + 22400K .......... .......... .......... .......... .......... 53% 8,03M 4s + 22450K .......... .......... .......... .......... .......... 54% 44,6M 4s + 22500K .......... .......... .......... .......... .......... 54% 44,3M 4s + 22550K .......... .......... .......... .......... .......... 54% 46,1M 4s + 22600K .......... .......... .......... .......... .......... 54% 59,6M 4s + 22650K .......... .......... .......... .......... .......... 54% 64,5M 4s + 22700K .......... .......... .......... .......... .......... 54% 52,4M 4s + 22750K .......... .......... .......... .......... .......... 54% 64,6M 4s + 22800K .......... .......... .......... .......... .......... 54% 56,7M 4s + 22850K .......... .......... .......... .......... .......... 54% 75,7M 4s + 22900K .......... .......... .......... .......... .......... 55% 35,7M 4s + 22950K .......... .......... .......... .......... .......... 55% 30,3M 4s + 23000K .......... .......... .......... .......... .......... 55% 11,0M 4s + 23050K .......... .......... .......... .......... .......... 55% 102M 4s + 23100K .......... .......... .......... .......... .......... 55% 25,4M 4s + 23150K .......... .......... .......... .......... .......... 55% 8,53M 4s + 23200K .......... .......... .......... .......... .......... 55% 29,8M 4s + 23250K .......... .......... .......... .......... .......... 55% 11,5M 4s + 23300K .......... .......... .......... .......... .......... 56% 93,9M 4s + 23350K .......... .......... .......... .......... .......... 56% 8,20M 4s + 23400K .......... .......... .......... .......... .......... 56% 83,3M 4s + 23450K .......... .......... .......... .......... .......... 56% 32,7M 4s + 23500K .......... .......... .......... .......... .......... 56% 103M 3s + 23550K .......... .......... .......... .......... .......... 56% 9,54M 3s + 23600K .......... .......... .......... .......... .......... 56% 8,14M 3s + 23650K .......... .......... .......... .......... .......... 56% 76,8M 3s + 23700K .......... .......... .......... .......... .......... 57% 8,68M 3s + 23750K .......... .......... .......... .......... .......... 57% 63,7M 3s + 23800K .......... .......... .......... .......... .......... 57% 13,3M 3s + 23850K .......... .......... .......... .......... .......... 57% 29,7M 3s + 23900K .......... .......... .......... .......... .......... 57% 61,6M 3s + 23950K .......... .......... .......... .......... .......... 57% 71,7M 3s + 24000K .......... .......... .......... .......... .......... 57% 62,1M 3s + 24050K .......... .......... .......... .......... .......... 57% 75,3M 3s + 24100K .......... .......... .......... .......... .......... 57% 14,1M 3s + 24150K .......... .......... .......... .......... .......... 58% 48,4M 3s + 24200K .......... .......... .......... .......... .......... 58% 43,5M 3s + 24250K .......... .......... .......... .......... .......... 58% 91,5M 3s + 24300K .......... .......... .......... .......... .......... 58% 117M 3s + 24350K .......... .......... .......... .......... .......... 58% 2,39M 3s + 24400K .......... .......... .......... .......... .......... 58% 8,97M 3s + 24450K .......... .......... .......... .......... .......... 58% 102M 3s + 24500K .......... .......... .......... .......... .......... 58% 42,4M 3s + 24550K .......... .......... .......... .......... .......... 59% 64,6M 3s + 24600K .......... .......... .......... .......... .......... 59% 35,3M 3s + 24650K .......... .......... .......... .......... .......... 59% 113M 3s + 24700K .......... .......... .......... .......... .......... 59% 120M 3s + 24750K .......... .......... .......... .......... .......... 59% 38,7M 3s + 24800K .......... .......... .......... .......... .......... 59% 58,8M 3s + 24850K .......... .......... .......... .......... .......... 59% 73,9M 3s + 24900K .......... .......... .......... .......... .......... 59% 24,8M 3s + 24950K .......... .......... .......... .......... .......... 60% 63,1M 3s + 25000K .......... .......... .......... .......... .......... 60% 32,9M 3s + 25050K .......... .......... .......... .......... .......... 60% 11,0M 3s + 25100K .......... .......... .......... .......... .......... 60% 24,1M 3s + 25150K .......... .......... .......... .......... .......... 60% 85,0M 3s + 25200K .......... .......... .......... .......... .......... 60% 9,09M 3s + 25250K .......... .......... .......... .......... .......... 60% 122M 3s + 25300K .......... .......... .......... .......... .......... 60% 30,1M 3s + 25350K .......... .......... .......... .......... .......... 60% 11,4M 3s + 25400K .......... .......... .......... .......... .......... 61% 95,0M 3s + 25450K .......... .......... .......... .......... .......... 61% 7,94M 3s + 25500K .......... .......... .......... .......... .......... 61% 125M 3s + 25550K .......... .......... .......... .......... .......... 61% 42,5M 3s + 25600K .......... .......... .......... .......... .......... 61% 9,23M 3s + 25650K .......... .......... .......... .......... .......... 61% 66,0M 3s + 25700K .......... .......... .......... .......... .......... 61% 8,38M 3s + 25750K .......... .......... .......... .......... .......... 61% 70,8M 3s + 25800K .......... .......... .......... .......... .......... 62% 8,71M 3s + 25850K .......... .......... .......... .......... .......... 62% 69,5M 3s + 25900K .......... .......... .......... .......... .......... 62% 15,6M 3s + 25950K .......... .......... .......... .......... .......... 62% 26,2M 3s + 26000K .......... .......... .......... .......... .......... 62% 60,0M 3s + 26050K .......... .......... .......... .......... .......... 62% 71,0M 3s + 26100K .......... .......... .......... .......... .......... 62% 73,0M 3s + 26150K .......... .......... .......... .......... .......... 62% 71,9M 3s + 26200K .......... .......... .......... .......... .......... 63% 64,3M 3s + 26250K .......... .......... .......... .......... .......... 63% 17,0M 3s + 26300K .......... .......... .......... .......... .......... 63% 67,3M 3s + 26350K .......... .......... .......... .......... .......... 63% 35,5M 3s + 26400K .......... .......... .......... .......... .......... 63% 80,0M 3s + 26450K .......... .......... .......... .......... .......... 63% 110M 3s + 26500K .......... .......... .......... .......... .......... 63% 10,7M 3s + 26550K .......... .......... .......... .......... .......... 63% 3,01M 3s + 26600K .......... .......... .......... .......... .......... 63% 8,05M 3s + 26650K .......... .......... .......... .......... .......... 64% 107M 3s + 26700K .......... .......... .......... .......... .......... 64% 70,1M 3s + 26750K .......... .......... .......... .......... .......... 64% 71,8M 3s + 26800K .......... .......... .......... .......... .......... 64% 30,4M 3s + 26850K .......... .......... .......... .......... .......... 64% 109M 3s + 26900K .......... .......... .......... .......... .......... 64% 57,8M 3s + 26950K .......... .......... .......... .......... .......... 64% 47,2M 3s + 27000K .......... .......... .......... .......... .......... 64% 81,2M 3s + 27050K .......... .......... .......... .......... .......... 65% 74,9M 3s + 27100K .......... .......... .......... .......... .......... 65% 72,4M 3s + 27150K .......... .......... .......... .......... .......... 65% 32,0M 3s + 27200K .......... .......... .......... .......... .......... 65% 34,8M 2s + 27250K .......... .......... .......... .......... .......... 65% 10,5M 2s + 27300K .......... .......... .......... .......... .......... 65% 65,5M 2s + 27350K .......... .......... .......... .......... .......... 65% 27,9M 2s + 27400K .......... .......... .......... .......... .......... 65% 9,96M 2s + 27450K .......... .......... .......... .......... .......... 66% 58,0M 2s + 27500K .......... .......... .......... .......... .......... 66% 97,2M 2s + 27550K .......... .......... .......... .......... .......... 66% 30,3M 2s + 27600K .......... .......... .......... .......... .......... 66% 11,2M 2s + 27650K .......... .......... .......... .......... .......... 66% 8,92M 2s + 27700K .......... .......... .......... .......... .......... 66% 49,0M 2s + 27750K .......... .......... .......... .......... .......... 66% 65,0M 2s + 27800K .......... .......... .......... .......... .......... 66% 65,9M 2s + 27850K .......... .......... .......... .......... .......... 66% 9,76M 2s + 27900K .......... .......... .......... .......... .......... 67% 8,10M 2s + 27950K .......... .......... .......... .......... .......... 67% 68,7M 2s + 28000K .......... .......... .......... .......... .......... 67% 60,7M 2s + 28050K .......... .......... .......... .......... .......... 67% 71,4M 2s + 28100K .......... .......... .......... .......... .......... 67% 9,13M 2s + 28150K .......... .......... .......... .......... .......... 67% 17,5M 2s + 28200K .......... .......... .......... .......... .......... 67% 59,7M 2s + 28250K .......... .......... .......... .......... .......... 67% 25,1M 2s + 28300K .......... .......... .......... .......... .......... 68% 67,3M 2s + 28350K .......... .......... .......... .......... .......... 68% 70,4M 2s + 28400K .......... .......... .......... .......... .......... 68% 60,6M 2s + 28450K .......... .......... .......... .......... .......... 68% 74,6M 2s + 28500K .......... .......... .......... .......... .......... 68% 74,9M 2s + 28550K .......... .......... .......... .......... .......... 68% 19,6M 2s + 28600K .......... .......... .......... .......... .......... 68% 29,3M 2s + 28650K .......... .......... .......... .......... .......... 68% 67,6M 2s + 28700K .......... .......... .......... .......... .......... 69% 93,7M 2s + 28750K .......... .......... .......... .......... .......... 69% 140M 2s + 28800K .......... .......... .......... .......... .......... 69% 11,5M 2s + 28850K .......... .......... .......... .......... .......... 69% 6,48M 2s + 28900K .......... .......... .......... .......... .......... 69% 3,54M 2s + 28950K .......... .......... .......... .......... .......... 69% 33,1M 2s + 29000K .......... .......... .......... .......... .......... 69% 83,1M 2s + 29050K .......... .......... .......... .......... .......... 69% 59,5M 2s + 29100K .......... .......... .......... .......... .......... 69% 31,8M 2s + 29150K .......... .......... .......... .......... .......... 70% 129M 2s + 29200K .......... .......... .......... .......... .......... 70% 117M 2s + 29250K .......... .......... .......... .......... .......... 70% 69,8M 2s + 29300K .......... .......... .......... .......... .......... 70% 56,8M 2s + 29350K .......... .......... .......... .......... .......... 70% 89,9M 2s + 29400K .......... .......... .......... .......... .......... 70% 81,7M 2s + 29450K .......... .......... .......... .......... .......... 70% 102M 2s + 29500K .......... .......... .......... .......... .......... 70% 32,2M 2s + 29550K .......... .......... .......... .......... .......... 71% 62,2M 2s + 29600K .......... .......... .......... .......... .......... 71% 9,95M 2s + 29650K .......... .......... .......... .......... .......... 71% 61,8M 2s + 29700K .......... .......... .......... .......... .......... 71% 27,6M 2s + 29750K .......... .......... .......... .......... .......... 71% 9,47M 2s + 29800K .......... .......... .......... .......... .......... 71% 49,6M 2s + 29850K .......... .......... .......... .......... .......... 71% 61,8M 2s + 29900K .......... .......... .......... .......... .......... 71% 79,8M 2s + 29950K .......... .......... .......... .......... .......... 72% 43,6M 2s + 30000K .......... .......... .......... .......... .......... 72% 12,1M 2s + 30050K .......... .......... .......... .......... .......... 72% 9,44M 2s + 30100K .......... .......... .......... .......... .......... 72% 62,0M 2s + 30150K .......... .......... .......... .......... .......... 72% 34,3M 2s + 30200K .......... .......... .......... .......... .......... 72% 85,1M 2s + 30250K .......... .......... .......... .......... .......... 72% 10,4M 2s + 30300K .......... .......... .......... .......... .......... 72% 60,9M 2s + 30350K .......... .......... .......... .......... .......... 72% 8,51M 2s + 30400K .......... .......... .......... .......... .......... 73% 52,0M 2s + 30450K .......... .......... .......... .......... .......... 73% 121M 2s + 30500K .......... .......... .......... .......... .......... 73% 9,72M 2s + 30550K .......... .......... .......... .......... .......... 73% 66,8M 2s + 30600K .......... .......... .......... .......... .......... 73% 15,5M 2s + 30650K .......... .......... .......... .......... .......... 73% 27,7M 2s + 30700K .......... .......... .......... .......... .......... 73% 43,3M 2s + 30750K .......... .......... .......... .......... .......... 73% 122M 2s + 30800K .......... .......... .......... .......... .......... 74% 95,3M 2s + 30850K .......... .......... .......... .......... .......... 74% 75,0M 2s + 30900K .......... .......... .......... .......... .......... 74% 137M 2s + 30950K .......... .......... .......... .......... .......... 74% 14,7M 2s + 31000K .......... .......... .......... .......... .......... 74% 78,5M 2s + 31050K .......... .......... .......... .......... .......... 74% 139M 2s + 31100K .......... .......... .......... .......... .......... 74% 27,4M 2s + 31150K .......... .......... .......... .......... .......... 74% 86,3M 2s + 31200K .......... .......... .......... .......... .......... 75% 106M 2s + 31250K .......... .......... .......... .......... .......... 75% 12,0M 2s + 31300K .......... .......... .......... .......... .......... 75% 61,8M 2s + 31350K .......... .......... .......... .......... .......... 75% 2,48M 2s + 31400K .......... .......... .......... .......... .......... 75% 19,5M 2s + 31450K .......... .......... .......... .......... .......... 75% 110M 2s + 31500K .......... .......... .......... .......... .......... 75% 122M 2s + 31550K .......... .......... .......... .......... .......... 75% 126M 2s + 31600K .......... .......... .......... .......... .......... 75% 28,2M 2s + 31650K .......... .......... .......... .......... .......... 76% 83,6M 2s + 31700K .......... .......... .......... .......... .......... 76% 81,5M 2s + 31750K .......... .......... .......... .......... .......... 76% 94,8M 2s + 31800K .......... .......... .......... .......... .......... 76% 83,4M 2s + 31850K .......... .......... .......... .......... .......... 76% 100M 1s + 31900K .......... .......... .......... .......... .......... 76% 70,2M 1s + 31950K .......... .......... .......... .......... .......... 76% 121M 1s + 32000K .......... .......... .......... .......... .......... 76% 61,4M 1s + 32050K .......... .......... .......... .......... .......... 77% 43,4M 1s + 32100K .......... .......... .......... .......... .......... 77% 37,1M 1s + 32150K .......... .......... .......... .......... .......... 77% 11,7M 1s + 32200K .......... .......... .......... .......... .......... 77% 83,8M 1s + 32250K .......... .......... .......... .......... .......... 77% 22,5M 1s + 32300K .......... .......... .......... .......... .......... 77% 9,99M 1s + 32350K .......... .......... .......... .......... .......... 77% 39,0M 1s + 32400K .......... .......... .......... .......... .......... 77% 62,6M 1s + 32450K .......... .......... .......... .......... .......... 78% 117M 1s + 32500K .......... .......... .......... .......... .......... 78% 44,7M 1s + 32550K .......... .......... .......... .......... .......... 78% 14,5M 1s + 32600K .......... .......... .......... .......... .......... 78% 8,11M 1s + 32650K .......... .......... .......... .......... .......... 78% 61,7M 1s + 32700K .......... .......... .......... .......... .......... 78% 31,2M 1s + 32750K .......... .......... .......... .......... .......... 78% 57,9M 1s + 32800K .......... .......... .......... .......... .......... 78% 54,3M 1s + 32850K .......... .......... .......... .......... .......... 78% 13,1M 1s + 32900K .......... .......... .......... .......... .......... 79% 54,3M 1s + 32950K .......... .......... .......... .......... .......... 79% 8,54M 1s + 33000K .......... .......... .......... .......... .......... 79% 46,9M 1s + 33050K .......... .......... .......... .......... .......... 79% 71,3M 1s + 33100K .......... .......... .......... .......... .......... 79% 94,1M 1s + 33150K .......... .......... .......... .......... .......... 79% 11,0M 1s + 33200K .......... .......... .......... .......... .......... 79% 14,1M 1s + 33250K .......... .......... .......... .......... .......... 79% 26,0M 1s + 33300K .......... .......... .......... .......... .......... 80% 71,5M 1s + 33350K .......... .......... .......... .......... .......... 80% 70,9M 1s + 33400K .......... .......... .......... .......... .......... 80% 66,6M 1s + 33450K .......... .......... .......... .......... .......... 80% 72,1M 1s + 33500K .......... .......... .......... .......... .......... 80% 88,0M 1s + 33550K .......... .......... .......... .......... .......... 80% 17,3M 1s + 33600K .......... .......... .......... .......... .......... 80% 52,4M 1s + 33650K .......... .......... .......... .......... .......... 80% 70,5M 1s + 33700K .......... .......... .......... .......... .......... 81% 81,7M 1s + 33750K .......... .......... .......... .......... .......... 81% 77,3M 1s + 33800K .......... .......... .......... .......... .......... 81% 67,6M 1s + 33850K .......... .......... .......... .......... .......... 81% 69,8M 1s + 33900K .......... .......... .......... .......... .......... 81% 91,4M 1s + 33950K .......... .......... .......... .......... .......... 81% 15,6M 1s + 34000K .......... .......... .......... .......... .......... 81% 3,40M 1s + 34050K .......... .......... .......... .......... .......... 81% 6,13M 1s + 34100K .......... .......... .......... .......... .......... 82% 73,9M 1s + 34150K .......... .......... .......... .......... .......... 82% 46,6M 1s + 34200K .......... .......... .......... .......... .......... 82% 51,9M 1s + 34250K .......... .......... .......... .......... .......... 82% 51,7M 1s + 34300K .......... .......... .......... .......... .......... 82% 53,6M 1s + 34350K .......... .......... .......... .......... .......... 82% 44,7M 1s + 34400K .......... .......... .......... .......... .......... 82% 41,9M 1s + 34450K .......... .......... .......... .......... .......... 82% 44,0M 1s + 34500K .......... .......... .......... .......... .......... 82% 43,0M 1s + 34550K .......... .......... .......... .......... .......... 83% 74,0M 1s + 34600K .......... .......... .......... .......... .......... 83% 51,1M 1s + 34650K .......... .......... .......... .......... .......... 83% 54,0M 1s + 34700K .......... .......... .......... .......... .......... 83% 62,2M 1s + 34750K .......... .......... .......... .......... .......... 83% 74,9M 1s + 34800K .......... .......... .......... .......... .......... 83% 119M 1s + 34850K .......... .......... .......... .......... .......... 83% 136M 1s + 34900K .......... .......... .......... .......... .......... 83% 62,2M 1s + 34950K .......... .......... .......... .......... .......... 84% 20,3M 1s + 35000K .......... .......... .......... .......... .......... 84% 54,3M 1s + 35050K .......... .......... .......... .......... .......... 84% 11,2M 1s + 35100K .......... .......... .......... .......... .......... 84% 28,9M 1s + 35150K .......... .......... .......... .......... .......... 84% 54,5M 1s + 35200K .......... .......... .......... .......... .......... 84% 99,8M 1s + 35250K .......... .......... .......... .......... .......... 84% 169M 1s + 35300K .......... .......... .......... .......... .......... 84% 13,1M 1s + 35350K .......... .......... .......... .......... .......... 85% 7,96M 1s + 35400K .......... .......... .......... .......... .......... 85% 50,9M 1s + 35450K .......... .......... .......... .......... .......... 85% 47,9M 1s + 35500K .......... .......... .......... .......... .......... 85% 52,4M 1s + 35550K .......... .......... .......... .......... .......... 85% 57,5M 1s + 35600K .......... .......... .......... .......... .......... 85% 70,1M 1s + 35650K .......... .......... .......... .......... .......... 85% 14,8M 1s + 35700K .......... .......... .......... .......... .......... 85% 11,2M 1s + 35750K .......... .......... .......... .......... .......... 85% 10,8M 1s + 35800K .......... .......... .......... .......... .......... 86% 90,7M 1s + 35850K .......... .......... .......... .......... .......... 86% 68,4M 1s + 35900K .......... .......... .......... .......... .......... 86% 22,4M 1s + 35950K .......... .......... .......... .......... .......... 86% 62,0M 1s + 36000K .......... .......... .......... .......... .......... 86% 15,4M 1s + 36050K .......... .......... .......... .......... .......... 86% 26,6M 1s + 36100K .......... .......... .......... .......... .......... 86% 86,4M 1s + 36150K .......... .......... .......... .......... .......... 86% 43,3M 1s + 36200K .......... .......... .......... .......... .......... 87% 89,9M 1s + 36250K .......... .......... .......... .......... .......... 87% 100M 1s + 36300K .......... .......... .......... .......... .......... 87% 84,9M 1s + 36350K .......... .......... .......... .......... .......... 87% 16,9M 1s + 36400K .......... .......... .......... .......... .......... 87% 75,4M 1s + 36450K .......... .......... .......... .......... .......... 87% 98,4M 1s + 36500K .......... .......... .......... .......... .......... 87% 94,8M 1s + 36550K .......... .......... .......... .......... .......... 87% 4,17M 1s + 36600K .......... .......... .......... .......... .......... 88% 236M 1s + 36650K .......... .......... .......... .......... .......... 88% 271M 1s + 36700K .......... .......... .......... .......... .......... 88% 263M 1s + 36750K .......... .......... .......... .......... .......... 88% 273M 1s + 36800K .......... .......... .......... .......... .......... 88% 220M 1s + 36850K .......... .......... .......... .......... .......... 88% 26,3M 1s + 36900K .......... .......... .......... .......... .......... 88% 4,03M 1s + 36950K .......... .......... .......... .......... .......... 88% 15,4M 1s + 37000K .......... .......... .......... .......... .......... 88% 87,5M 1s + 37050K .......... .......... .......... .......... .......... 89% 96,7M 1s + 37100K .......... .......... .......... .......... .......... 89% 103M 1s + 37150K .......... .......... .......... .......... .......... 89% 82,8M 1s + 37200K .......... .......... .......... .......... .......... 89% 76,2M 1s + 37250K .......... .......... .......... .......... .......... 89% 145M 1s + 37300K .......... .......... .......... .......... .......... 89% 36,0M 1s + 37350K .......... .......... .......... .......... .......... 89% 98,7M 1s + 37400K .......... .......... .......... .......... .......... 89% 90,8M 1s + 37450K .......... .......... .......... .......... .......... 90% 99,7M 1s + 37500K .......... .......... .......... .......... .......... 90% 145M 1s + 37550K .......... .......... .......... .......... .......... 90% 99,3M 1s + 37600K .......... .......... .......... .......... .......... 90% 30,2M 1s + 37650K .......... .......... .......... .......... .......... 90% 149M 1s + 37700K .......... .......... .......... .......... .......... 90% 69,9M 1s + 37750K .......... .......... .......... .......... .......... 90% 12,5M 1s + 37800K .......... .......... .......... .......... .......... 90% 66,3M 1s + 37850K .......... .......... .......... .......... .......... 91% 88,5M 1s + 37900K .......... .......... .......... .......... .......... 91% 24,3M 0s + 37950K .......... .......... .......... .......... .......... 91% 11,8M 0s + 38000K .......... .......... .......... .......... .......... 91% 20,9M 0s + 38050K .......... .......... .......... .......... .......... 91% 60,5M 0s + 38100K .......... .......... .......... .......... .......... 91% 118M 0s + 38150K .......... .......... .......... .......... .......... 91% 114M 0s + 38200K .......... .......... .......... .......... .......... 91% 17,3M 0s + 38250K .......... .......... .......... .......... .......... 91% 8,87M 0s + 38300K .......... .......... .......... .......... .......... 92% 70,9M 0s + 38350K .......... .......... .......... .......... .......... 92% 26,9M 0s + 38400K .......... .......... .......... .......... .......... 92% 94,6M 0s + 38450K .......... .......... .......... .......... .......... 92% 99,7M 0s + 38500K .......... .......... .......... .......... .......... 92% 97,3M 0s + 38550K .......... .......... .......... .......... .......... 92% 96,8M 0s + 38600K .......... .......... .......... .......... .......... 92% 12,2M 0s + 38650K .......... .......... .......... .......... .......... 92% 52,0M 0s + 38700K .......... .......... .......... .......... .......... 93% 6,15M 0s + 38750K .......... .......... .......... .......... .......... 93% 68,5M 0s + 38800K .......... .......... .......... .......... .......... 93% 82,7M 0s + 38850K .......... .......... .......... .......... .......... 93% 16,7M 0s + 38900K .......... .......... .......... .......... .......... 93% 117M 0s + 38950K .......... .......... .......... .......... .......... 93% 20,1M 0s + 39000K .......... .......... .......... .......... .......... 93% 71,4M 0s + 39050K .......... .......... .......... .......... .......... 93% 19,6M 0s + 39100K .......... .......... .......... .......... .......... 94% 131M 0s + 39150K .......... .......... .......... .......... .......... 94% 48,5M 0s + 39200K .......... .......... .......... .......... .......... 94% 36,2M 0s + 39250K .......... .......... .......... .......... .......... 94% 65,7M 0s + 39300K .......... .......... .......... .......... .......... 94% 136M 0s + 39350K .......... .......... .......... .......... .......... 94% 24,8M 0s + 39400K .......... .......... .......... .......... .......... 94% 63,1M 0s + 39450K .......... .......... .......... .......... .......... 94% 79,9M 0s + 39500K .......... .......... .......... .......... .......... 94% 123M 0s + 39550K .......... .......... .......... .......... .......... 95% 6,16M 0s + 39600K .......... .......... .......... .......... .......... 95% 14,5M 0s + 39650K .......... .......... .......... .......... .......... 95% 19,8M 0s + 39700K .......... .......... .......... .......... .......... 95% 103M 0s + 39750K .......... .......... .......... .......... .......... 95% 104M 0s + 39800K .......... .......... .......... .......... .......... 95% 98,2M 0s + 39850K .......... .......... .......... .......... .......... 95% 91,2M 0s + 39900K .......... .......... .......... .......... .......... 95% 4,90M 0s + 39950K .......... .......... .......... .......... .......... 96% 116M 0s + 40000K .......... .......... .......... .......... .......... 96% 9,96M 0s + 40050K .......... .......... .......... .......... .......... 96% 93,2M 0s + 40100K .......... .......... .......... .......... .......... 96% 100M 0s + 40150K .......... .......... .......... .......... .......... 96% 147M 0s + 40200K .......... .......... .......... .......... .......... 96% 114M 0s + 40250K .......... .......... .......... .......... .......... 96% 99,1M 0s + 40300K .......... .......... .......... .......... .......... 96% 92,2M 0s + 40350K .......... .......... .......... .......... .......... 97% 98,0M 0s + 40400K .......... .......... .......... .......... .......... 97% 71,4M 0s + 40450K .......... .......... .......... .......... .......... 97% 96,9M 0s + 40500K .......... .......... .......... .......... .......... 97% 96,5M 0s + 40550K .......... .......... .......... .......... .......... 97% 92,0M 0s + 40600K .......... .......... .......... .......... .......... 97% 88,5M 0s + 40650K .......... .......... .......... .......... .......... 97% 96,6M 0s + 40700K .......... .......... .......... .......... .......... 97% 43,2M 0s + 40750K .......... .......... .......... .......... .......... 97% 81,9M 0s + 40800K .......... .......... .......... .......... .......... 98% 11,4M 0s + 40850K .......... .......... .......... .......... .......... 98% 25,4M 0s + 40900K .......... .......... .......... .......... .......... 98% 79,8M 0s + 40950K .......... .......... .......... .......... .......... 98% 11,8M 0s + 41000K .......... .......... .......... .......... .......... 98% 25,7M 0s + 41050K .......... .......... .......... .......... .......... 98% 57,9M 0s + 41100K .......... .......... .......... .......... .......... 98% 103M 0s + 41150K .......... .......... .......... .......... .......... 98% 41,8M 0s + 41200K .......... .......... .......... .......... .......... 99% 50,4M 0s + 41250K .......... .......... .......... .......... .......... 99% 6,45M 0s + 41300K .......... .......... .......... .......... .......... 99% 43,8M 0s + 41350K .......... .......... .......... .......... .......... 99% 65,6M 0s + 41400K .......... .......... .......... .......... .......... 99% 39,4M 0s + 41450K .......... .......... .......... .......... .......... 99% 48,9M 0s + 41500K .......... .......... .......... .......... .......... 99% 64,9M 0s + 41550K .......... .......... .......... .......... .......... 99% 74,2M 0s + 41600K .......... .......... .......... .......... ...... 100% 69,8M=5,2s + +2014-06-18 13:41:12 (7,77 MB/s) - ‘/home/jwiklund/Documents/.git/annex/tmp/SHA256E-s42645638--4ae41fb29bd26339ea10f53ea2b7cf3132e53d5e8fbfde7b43b912aa52b3d319.tar.gz’ saved [42645638/42645638] + +[2014-06-18 13:41:12 CEST] main(checksum...) +: Downloaded git-annex.. upgrade) +[2014-06-18 13:41:12 CEST] Pusher: Syncing with born +(Recording state in git...) + +error: duplicate parent bd2e43b03fcc307166df1ab23cecb0eafe9ca3a5 ignored +To ssh://jwiklund@born/store/backup/Documents.annex.1/ + cf9f2a9..f8f8217 git-annex -> synced/git-annex + 6be6bb3..bd2e43b annex/direct/master -> synced/master + +git-annex version: 5.20140610-g5ec8bcf +build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash +key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL +remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external +local repository version: 5 +supported repository version: 5 +upgrade supported from repository versions: 0 1 2 4 +[2014-06-18 13:41:14 CEST] main: Upgrading git-annex +[2014-06-18 13:41:14 CEST] UpgradeWatcher: A new version of git-annex has been installed. + +error: duplicate parent e88b1485767e39ac05de700219d31011b7ac7022 ignored + + +error: duplicate parent 220161f6ad836cfc581a9dd575d76c0d9e814826 ignored + + +Another upgrade + +[2014-06-18 13:38:15 CEST] main: starting assistant version 5.20140606-g48793b6 +[2014-06-18 13:38:16 CEST] TransferScanner: Syncing with born + +Already up-to-date. +(scanning...) [20 +14-06-18 13:38:16 CEST] Watcher: Performing startup scan +Already up-to-date. +(started...) +gpg: WARNING: unsafe permissions on homedir `/tmp/git-annex-gpg.tmp.0' +gpg: Signature made fre 13 jun 2014 17:28:22 CEST using DSA key ID 89C809CB +gpg: /tmp/git-annex-gpg.tmp.0/trustdb.gpg: trustdb created +gpg: Good signature from "git-annex distribution signing key (for Joey Hess) " +gpg: WARNING: This key is not certified with a trusted signature! +gpg: There is no indication that the signature belongs to the owner. +Primary key fingerprint: 4005 5C6A FD2D 526B 2961 E78F 5EE1 DBA7 89C8 09CB +[2014-06-18 13:38:17 CEST] Upgrader: An upgrade of git-annex is available. (version 5.20140613) +To ssh://jwiklund@born/store/backup/Documents.annex.1/ + 9537540..38006f5 git-annex -> synced/git-annex +[2014-06-18 13:38:18 CEST] Committer: Committing changes to git +(Recording state in git...) +[2014-06-18 13:38:18 CEST] Pusher: Syncing with born +Everything up-to-date +--2014-06-18 13:38:22-- https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-amd64.tar.gz +Resolving downloads.kitenet.net (downloads.kitenet.net)... 107.170.31.195 +Connecting to downloads.kitenet.net (downloads.kitenet.net)|107.170.31.195|:443... connected. +HTTP request sent, awaiting response... 200 OK +Length: 42645638 (41M) [application/x-gzip] +Saving to: ‘/home/jwiklund/Documents/.git/annex/tmp/SHA256E-s42645638--4ae41fb29bd26339ea10f53ea2b7cf3132e53d5e8fbfde7b43b912aa52b3d319.tar.gz’ + + 0K .......... .......... .......... .......... .......... 0% 165K 4m12s + 50K .......... .......... .......... .......... .......... 0% 165K 4m12s + 100K .......... .......... .......... .......... .......... 0% 248K 3m43s + 150K .......... .......... .......... .......... .......... 0% 247K 3m29s + 200K .......... .......... .......... .......... .......... 0% 493K 3m4s + 250K .......... .......... .......... .......... .......... 0% 248K 3m1s + 300K .......... .......... .......... .......... .......... 0% 493K 2m47s + 350K .......... .......... .......... .......... .......... 0% 495K 2m36s + 400K .......... .......... .......... .......... .......... 1% 248K 2m37s + 450K .......... .......... .......... .......... .......... 1% 494K 2m30s + 500K .......... .......... .......... .......... .......... 1% 147M 2m16s + 550K .......... .......... .......... .......... .......... 1% 493K 2m11s + 600K .......... .......... .......... .......... .......... 1% 495K 2m7s + 650K .......... .......... .......... .......... .......... 1% 494K 2m4s + 700K .......... .......... .......... .......... .......... 1% 495K 2m1s + 750K .......... .......... .......... .......... .......... 1% 1,30M 1m55s + 800K .......... .......... .......... .......... .......... 2% 497K 1m53s + 850K .......... .......... .......... .......... .......... 2% 779K 1m50s + 900K .......... .......... .......... .......... .......... 2% 1,32M 1m45s + 950K .......... .......... .......... .......... .......... 2% 495K 1m44s + 1000K .......... .......... .......... .......... .......... 2% 48,8M 99s + 1050K .......... .......... .......... .......... .......... 2% 497K 98s + 1100K .......... .......... .......... .......... .......... 2% 8,40M 94s + 1150K .......... .......... .......... .......... .......... 2% 524K 93s + 1200K .......... .......... .......... .......... .......... 3% 786K 91s + 1250K .......... .......... .......... .......... .......... 3% 1,31M 89s + 1300K .......... .......... .......... .......... .......... 3% 8,46M 86s + 1350K .......... .......... .......... .......... .......... 3% 526K 85s + 1400K .......... .......... .......... .......... .......... 3% 8,23M 82s + 1450K .......... .......... .......... .......... .......... 3% 53,9M 80s + 1500K .......... .......... .......... .......... .......... 3% 523K 79s + 1550K .......... .......... .......... .......... .......... 3% 10,7M 77s + 1600K .......... .......... .......... .......... .......... 3% 865K 76s + 1650K .......... .......... .......... .......... .......... 4% 1,12M 75s + 1700K .......... .......... .......... .......... .......... 4% 59,8M 72s + 1750K .......... .......... .......... .......... .......... 4% 875K 72s + 1800K .......... .......... .......... .......... .......... 4% 1,26M 70s + 1850K .......... .......... .......... .......... .......... 4% 5,14M 69s + 1900K .......... .......... .......... .......... .......... 4% 968K 68s + 1950K .......... .......... .......... .......... .......... 4% 1,24M 67s + 2000K .......... .......... .......... .......... .......... 4% 4,91M 65s + 2050K .......... .......... .......... .......... .......... 5% 969K 65s + 2100K .......... .......... .......... .......... .......... 5% 1,13M 64s + 2150K .......... .......... .......... .......... .......... 5% 38,0M 62s + 2200K .......... .......... .......... .......... .......... 5% 9,06M 61s + 2250K .......... .......... .......... .......... .......... 5% 525K 61s + 2300K .......... .......... .......... .......... .......... 5% 72,7M 60s + 2350K .......... .......... .......... .......... .......... 5% 70,4M 59s + 2400K .......... .......... .......... .......... .......... 5% 9,59M 57s + 2450K .......... .......... .......... .......... .......... 6% 528K 58s + 2500K .......... .......... .......... .......... .......... 6% 62,6M 56s + 2550K .......... .......... .......... .......... .......... 6% 10,0M 55s + 2600K .......... .......... .......... .......... .......... 6% 88,8M 54s + 2650K .......... .......... .......... .......... .......... 6% 521K 55s + 2700K .......... .......... .......... .......... .......... 6% 133M 54s + 2750K .......... .......... .......... .......... .......... 6% 11,6M 53s + 2800K .......... .......... .......... .......... .......... 6% 7,35M 52s + 2850K .......... .......... .......... .......... .......... 6% 554K 52s + 2900K .......... .......... .......... .......... .......... 7% 22,5M 51s + 2950K .......... .......... .......... .......... .......... 7% 18,7M 50s + 3000K .......... .......... .......... .......... .......... 7% 8,07M 49s + 3050K .......... .......... .......... .......... .......... 7% 548K 50s + 3100K .......... .......... .......... .......... .......... 7% 56,1M 49s + 3150K .......... .......... .......... .......... .......... 7% 38,2M 48s + 3200K .......... .......... .......... .......... .......... 7% 25,9M 47s + 3250K .......... .......... .......... .......... .......... 7% 8,37M 46s + 3300K .......... .......... .......... .......... .......... 8% 7,57M 46s + 3350K .......... .......... .......... .......... .......... 8% 585K 46s + 3400K .......... .......... .......... .......... .......... 8% 28,9M 45s + 3450K .......... .......... .......... .......... .......... 8% 35,6M 45s + 3500K .......... .......... .......... .......... .......... 8% 8,14M 44s + 3550K .......... .......... .......... .......... .......... 8% 72,0M 43s + 3600K .......... .......... .......... .......... .......... 8% 4,17M 43s + 3650K .......... .......... .......... .......... .......... 8% 619K 43s + 3700K .......... .......... .......... .......... .......... 9% 28,8M 42s + 3750K .......... .......... .......... .......... .......... 9% 8,04M 42s + 3800K .......... .......... .......... .......... .......... 9% 57,3M 41s + 3850K .......... .......... .......... .......... .......... 9% 12,1M 41s + 3900K .......... .......... .......... .......... .......... 9% 6,22M 40s + 3950K .......... .......... .......... .......... .......... 9% 620K 40s + 4000K .......... .......... .......... .......... .......... 9% 19,1M 40s + 4050K .......... .......... .......... .......... .......... 9% 55,1M 39s + 4100K .......... .......... .......... .......... .......... 9% 9,63M 39s + 4150K .......... .......... .......... .......... .......... 10% 12,0M 38s + 4200K .......... .......... .......... .......... .......... 10% 8,14M 38s + 4250K .......... .......... .......... .......... .......... 10% 15,8M 37s + 4300K .......... .......... .......... .......... .......... 10% 625K 38s + 4350K .......... .......... .......... .......... .......... 10% 24,5M 37s + 4400K .......... .......... .......... .......... .......... 10% 8,66M 37s + 4450K .......... .......... .......... .......... .......... 10% 13,0M 36s + 4500K .......... .......... .......... .......... .......... 10% 71,5M 36s + 4550K .......... .......... .......... .......... .......... 11% 8,28M 36s + 4600K .......... .......... .......... .......... .......... 11% 6,10M 35s + 4650K .......... .......... .......... .......... .......... 11% 653K 35s + 4700K .......... .......... .......... .......... .......... 11% 50,6M 35s + 4750K .......... .......... .......... .......... .......... 11% 8,95M 35s + 4800K .......... .......... .......... .......... .......... 11% 11,5M 34s + 4850K .......... .......... .......... .......... .......... 11% 8,84M 34s + 4900K .......... .......... .......... .......... .......... 11% 53,4M 33s + 4950K .......... .......... .......... .......... .......... 12% 7,17M 33s + 5000K .......... .......... .......... .......... .......... 12% 53,7M 33s + 5050K .......... .......... .......... .......... .......... 12% 649K 33s + 5100K .......... .......... .......... .......... .......... 12% 9,07M 33s + 5150K .......... .......... .......... .......... .......... 12% 10,7M 32s + 5200K .......... .......... .......... .......... .......... 12% 9,40M 32s + 5250K .......... .......... .......... .......... .......... 12% 47,5M 32s + 5300K .......... .......... .......... .......... .......... 12% 68,6M 31s + 5350K .......... .......... .......... .......... .......... 12% 7,06M 31s + 5400K .......... .......... .......... .......... .......... 13% 11,4M 31s + 5450K .......... .......... .......... .......... .......... 13% 688K 31s + 5500K .......... .......... .......... .......... .......... 13% 8,70M 31s + 5550K .......... .......... .......... .......... .......... 13% 11,1M 30s + 5600K .......... .......... .......... .......... .......... 13% 8,83M 30s + 5650K .......... .......... .......... .......... .......... 13% 58,9M 30s + 5700K .......... .......... .......... .......... .......... 13% 83,1M 29s + 5750K .......... .......... .......... .......... .......... 13% 7,21M 29s + 5800K .......... .......... .......... .......... .......... 14% 66,1M 29s + 5850K .......... .......... .......... .......... .......... 14% 4,65M 29s + 5900K .......... .......... .......... .......... .......... 14% 757K 29s + 5950K .......... .......... .......... .......... .......... 14% 7,62M 29s + 6000K .......... .......... .......... .......... .......... 14% 10,4M 28s + 6050K .......... .......... .......... .......... .......... 14% 8,59M 28s + 6100K .......... .......... .......... .......... .......... 14% 51,4M 28s + 6150K .......... .......... .......... .......... .......... 14% 74,5M 28s + 6200K .......... .......... .......... .......... .......... 15% 6,84M 27s + 6250K .......... .......... .......... .......... .......... 15% 67,2M 27s + 6300K .......... .......... .......... .......... .......... 15% 5,40M 27s + 6350K .......... .......... .......... .......... .......... 15% 63,4M 27s + 6400K .......... .......... .......... .......... .......... 15% 706K 27s + 6450K .......... .......... .......... .......... .......... 15% 9,08M 27s + 6500K .......... .......... .......... .......... .......... 15% 9,43M 26s + 6550K .......... .......... .......... .......... .......... 15% 70,0M 26s + 6600K .......... .......... .......... .......... .......... 15% 65,4M 26s + 6650K .......... .......... .......... .......... .......... 16% 67,7M 26s + 6700K .......... .......... .......... .......... .......... 16% 7,02M 25s + 6750K .......... .......... .......... .......... .......... 16% 65,8M 25s + 6800K .......... .......... .......... .......... .......... 16% 4,77M 25s + 6850K .......... .......... .......... .......... .......... 16% 64,7M 25s + 6900K .......... .......... .......... .......... .......... 16% 783K 25s + 6950K .......... .......... .......... .......... .......... 16% 4,63M 25s + 7000K .......... .......... .......... .......... .......... 16% 9,00M 25s + 7050K .......... .......... .......... .......... .......... 17% 69,7M 24s + 7100K .......... .......... .......... .......... .......... 17% 64,8M 24s + 7150K .......... .......... .......... .......... .......... 17% 53,1M 24s + 7200K .......... .......... .......... .......... .......... 17% 6,69M 24s + 7250K .......... .......... .......... .......... .......... 17% 70,3M 24s + 7300K .......... .......... .......... .......... .......... 17% 8,28M 23s + 7350K .......... .......... .......... .......... .......... 17% 12,7M 23s + 7400K .......... .......... .......... .......... .......... 17% 765K 23s + 7450K .......... .......... .......... .......... .......... 18% 9,09M 23s + 7500K .......... .......... .......... .......... .......... 18% 4,85M 23s + 7550K .......... .......... .......... .......... .......... 18% 61,3M 23s + 7600K .......... .......... .......... .......... .......... 18% 61,6M 23s + 7650K .......... .......... .......... .......... .......... 18% 74,1M 23s + 7700K .......... .......... .......... .......... .......... 18% 73,6M 22s + 7750K .......... .......... .......... .......... .......... 18% 7,79M 22s + 7800K .......... .......... .......... .......... .......... 18% 49,1M 22s + 7850K .......... .......... .......... .......... .......... 18% 72,2M 22s + 7900K .......... .......... .......... .......... .......... 19% 8,42M 22s + 7950K .......... .......... .......... .......... .......... 19% 732K 22s + 8000K .......... .......... .......... .......... .......... 19% 8,99M 22s + 8050K .......... .......... .......... .......... .......... 19% 50,7M 22s + 8100K .......... .......... .......... .......... .......... 19% 5,19M 21s + 8150K .......... .......... .......... .......... .......... 19% 47,4M 21s + 8200K .......... .......... .......... .......... .......... 19% 48,4M 21s + 8250K .......... .......... .......... .......... .......... 19% 52,5M 21s + 8300K .......... .......... .......... .......... .......... 20% 80,5M 21s + 8350K .......... .......... .......... .......... .......... 20% 8,32M 21s + 8400K .......... .......... .......... .......... .......... 20% 40,0M 21s + 8450K .......... .......... .......... .......... .......... 20% 8,81M 20s + 8500K .......... .......... .......... .......... .......... 20% 75,7M 20s + 8550K .......... .......... .......... .......... .......... 20% 718K 20s + 8600K .......... .......... .......... .......... .......... 20% 46,3M 20s + 8650K .......... .......... .......... .......... .......... 20% 15,7M 20s + 8700K .......... .......... .......... .......... .......... 21% 81,4M 20s + 8750K .......... .......... .......... .......... .......... 21% 4,92M 20s + 8800K .......... .......... .......... .......... .......... 21% 44,6M 20s + 8850K .......... .......... .......... .......... .......... 21% 32,6M 20s + 8900K .......... .......... .......... .......... .......... 21% 94,8M 19s + 8950K .......... .......... .......... .......... .......... 21% 104M 19s + 9000K .......... .......... .......... .......... .......... 21% 8,37M 19s + 9050K .......... .......... .......... .......... .......... 21% 77,8M 19s + 9100K .......... .......... .......... .......... .......... 21% 76,5M 19s + 9150K .......... .......... .......... .......... .......... 22% 88,5M 19s + 9200K .......... .......... .......... .......... .......... 22% 4,91M 19s + 9250K .......... .......... .......... .......... .......... 22% 762K 19s + 9300K .......... .......... .......... .......... .......... 22% 57,2M 19s + 9350K .......... .......... .......... .......... .......... 22% 15,2M 19s + 9400K .......... .......... .......... .......... .......... 22% 4,79M 18s + 9450K .......... .......... .......... .......... .......... 22% 69,4M 18s + 9500K .......... .......... .......... .......... .......... 22% 66,2M 18s + 9550K .......... .......... .......... .......... .......... 23% 29,9M 18s + 9600K .......... .......... .......... .......... .......... 23% 58,8M 18s + 9650K .......... .......... .......... .......... .......... 23% 9,77M 18s + 9700K .......... .......... .......... .......... .......... 23% 45,1M 18s + 9750K .......... .......... .......... .......... .......... 23% 64,3M 18s + 9800K .......... .......... .......... .......... .......... 23% 59,4M 18s + 9850K .......... .......... .......... .......... .......... 23% 10,2M 17s + 9900K .......... .......... .......... .......... .......... 23% 55,9M 17s + 9950K .......... .......... .......... .......... .......... 24% 93,7M 17s + 10000K .......... .......... .......... .......... .......... 24% 730K 17s + 10050K .......... .......... .......... .......... .......... 24% 66,3M 17s + 10100K .......... .......... .......... .......... .......... 24% 13,6M 17s + 10150K .......... .......... .......... .......... .......... 24% 86,6M 17s + 10200K .......... .......... .......... .......... .......... 24% 4,97M 17s + 10250K .......... .......... .......... .......... .......... 24% 33,2M 17s + 10300K .......... .......... .......... .......... .......... 24% 34,1M 17s + 10350K .......... .......... .......... .......... .......... 24% 158M 17s + 10400K .......... .......... .......... .......... .......... 25% 65,6M 16s + 10450K .......... .......... .......... .......... .......... 25% 9,12M 16s + 10500K .......... .......... .......... .......... .......... 25% 101M 16s + 10550K .......... .......... .......... .......... .......... 25% 65,6M 16s + 10600K .......... .......... .......... .......... .......... 25% 44,4M 16s + 10650K .......... .......... .......... .......... .......... 25% 8,78M 16s + 10700K .......... .......... .......... .......... .......... 25% 97,5M 16s + 10750K .......... .......... .......... .......... .......... 25% 7,92M 16s + 10800K .......... .......... .......... .......... .......... 26% 6,88M 16s + 10850K .......... .......... .......... .......... .......... 26% 886K 16s + 10900K .......... .......... .......... .......... .......... 26% 66,7M 16s + 10950K .......... .......... .......... .......... .......... 26% 12,5M 16s + 11000K .......... .......... .......... .......... .......... 26% 5,70M 16s + 11050K .......... .......... .......... .......... .......... 26% 65,8M 15s + 11100K .......... .......... .......... .......... .......... 26% 25,5M 15s + 11150K .......... .......... .......... .......... .......... 26% 35,3M 15s + 11200K .......... .......... .......... .......... .......... 27% 55,0M 15s + 11250K .......... .......... .......... .......... .......... 27% 9,19M 15s + 11300K .......... .......... .......... .......... .......... 27% 58,9M 15s + 11350K .......... .......... .......... .......... .......... 27% 64,1M 15s + 11400K .......... .......... .......... .......... .......... 27% 57,1M 15s + 11450K .......... .......... .......... .......... .......... 27% 9,39M 15s + 11500K .......... .......... .......... .......... .......... 27% 84,9M 15s + 11550K .......... .......... .......... .......... .......... 27% 89,1M 15s + 11600K .......... .......... .......... .......... .......... 27% 8,04M 15s + 11650K .......... .......... .......... .......... .......... 28% 85,4M 14s + 11700K .......... .......... .......... .......... .......... 28% 815K 15s + 11750K .......... .......... .......... .......... .......... 28% 44,9M 14s + 11800K .......... .......... .......... .......... .......... 28% 131M 14s + 11850K .......... .......... .......... .......... .......... 28% 12,7M 14s + 11900K .......... .......... .......... .......... .......... 28% 5,71M 14s + 11950K .......... .......... .......... .......... .......... 28% 19,3M 14s + 12000K .......... .......... .......... .......... .......... 28% 22,0M 14s + 12050K .......... .......... .......... .......... .......... 29% 111M 14s + 12100K .......... .......... .......... .......... .......... 29% 44,5M 14s + 12150K .......... .......... .......... .......... .......... 29% 10,8M 14s + 12200K .......... .......... .......... .......... .......... 29% 169M 14s + 12250K .......... .......... .......... .......... .......... 29% 102M 14s + 12300K .......... .......... .......... .......... .......... 29% 97,9M 14s + 12350K .......... .......... .......... .......... .......... 29% 8,70M 14s + 12400K .......... .......... .......... .......... .......... 29% 47,2M 13s + 12450K .......... .......... .......... .......... .......... 30% 9,37M 13s + 12500K .......... .......... .......... .......... .......... 30% 77,2M 13s + 12550K .......... .......... .......... .......... .......... 30% 44,6M 13s + 12600K .......... .......... .......... .......... .......... 30% 84,0M 13s + 12650K .......... .......... .......... .......... .......... 30% 2,51M 13s + 12700K .......... .......... .......... .......... .......... 30% 1,15M 13s + 12750K .......... .......... .......... .......... .......... 30% 60,1M 13s + 12800K .......... .......... .......... .......... .......... 30% 12,1M 13s + 12850K .......... .......... .......... .......... .......... 30% 5,66M 13s + 12900K .......... .......... .......... .......... .......... 31% 22,1M 13s + 12950K .......... .......... .......... .......... .......... 31% 56,1M 13s + 13000K .......... .......... .......... .......... .......... 31% 27,4M 13s + 13050K .......... .......... .......... .......... .......... 31% 45,7M 13s + 13100K .......... .......... .......... .......... .......... 31% 10,4M 13s + 13150K .......... .......... .......... .......... .......... 31% 69,7M 13s + 13200K .......... .......... .......... .......... .......... 31% 60,2M 13s + 13250K .......... .......... .......... .......... .......... 31% 39,8M 12s + 13300K .......... .......... .......... .......... .......... 32% 11,8M 12s + 13350K .......... .......... .......... .......... .......... 32% 66,0M 12s + 13400K .......... .......... .......... .......... .......... 32% 48,4M 12s + 13450K .......... .......... .......... .......... .......... 32% 9,81M 12s + 13500K .......... .......... .......... .......... .......... 32% 23,9M 12s + 13550K .......... .......... .......... .......... .......... 32% 54,2M 12s + 13600K .......... .......... .......... .......... .......... 32% 54,2M 12s + 13650K .......... .......... .......... .......... .......... 32% 10,8M 12s + 13700K .......... .......... .......... .......... .......... 33% 908K 12s + 13750K .......... .......... .......... .......... .......... 33% 34,0M 12s + 13800K .......... .......... .......... .......... .......... 33% 14,8M 12s + 13850K .......... .......... .......... .......... .......... 33% 5,88M 12s + 13900K .......... .......... .......... .......... .......... 33% 44,5M 12s + 13950K .......... .......... .......... .......... .......... 33% 22,8M 12s + 14000K .......... .......... .......... .......... .......... 33% 22,8M 12s + 14050K .......... .......... .......... .......... .......... 33% 60,0M 12s + 14100K .......... .......... .......... .......... .......... 33% 10,5M 12s + 14150K .......... .......... .......... .......... .......... 34% 66,9M 11s + 14200K .......... .......... .......... .......... .......... 34% 63,9M 11s + 14250K .......... .......... .......... .......... .......... 34% 68,9M 11s + 14300K .......... .......... .......... .......... .......... 34% 11,4M 11s + 14350K .......... .......... .......... .......... .......... 34% 50,6M 11s + 14400K .......... .......... .......... .......... .......... 34% 54,7M 11s + 14450K .......... .......... .......... .......... .......... 34% 74,5M 11s + 14500K .......... .......... .......... .......... .......... 34% 10,4M 11s + 14550K .......... .......... .......... .......... .......... 35% 33,4M 11s + 14600K .......... .......... .......... .......... .......... 35% 62,0M 11s + 14650K .......... .......... .......... .......... .......... 35% 35,2M 11s + 14700K .......... .......... .......... .......... .......... 35% 75,6M 11s + 14750K .......... .......... .......... .......... .......... 35% 11,9M 11s + 14800K .......... .......... .......... .......... .......... 35% 908K 11s + 14850K .......... .......... .......... .......... .......... 35% 37,1M 11s + 14900K .......... .......... .......... .......... .......... 35% 12,6M 11s + 14950K .......... .......... .......... .......... .......... 36% 7,11M 11s + 15000K .......... .......... .......... .......... .......... 36% 13,5M 11s + 15050K .......... .......... .......... .......... .......... 36% 71,6M 11s + 15100K .......... .......... .......... .......... .......... 36% 24,4M 11s + 15150K .......... .......... .......... .......... .......... 36% 69,1M 10s + 15200K .......... .......... .......... .......... .......... 36% 63,0M 10s + 15250K .......... .......... .......... .......... .......... 36% 10,1M 10s + 15300K .......... .......... .......... .......... .......... 36% 37,9M 10s + 15350K .......... .......... .......... .......... .......... 36% 69,2M 10s + 15400K .......... .......... .......... .......... .......... 37% 68,1M 10s + 15450K .......... .......... .......... .......... .......... 37% 10,4M 10s + 15500K .......... .......... .......... .......... .......... 37% 64,3M 10s + 15550K .......... .......... .......... .......... .......... 37% 81,2M 10s + 15600K .......... .......... .......... .......... .......... 37% 71,2M 10s + 15650K .......... .......... .......... .......... .......... 37% 13,3M 10s + 15700K .......... .......... .......... .......... .......... 37% 43,7M 10s + 15750K .......... .......... .......... .......... .......... 37% 28,3M 10s + 15800K .......... .......... .......... .......... .......... 38% 59,9M 10s + 15850K .......... .......... .......... .......... .......... 38% 84,3M 10s + 15900K .......... .......... .......... .......... .......... 38% 12,2M 10s + 15950K .......... .......... .......... .......... .......... 38% 8,59M 10s + 16000K .......... .......... .......... .......... .......... 38% 926K 10s + 16050K .......... .......... .......... .......... .......... 38% 65,0M 10s + 16100K .......... .......... .......... .......... .......... 38% 70,3M 10s + 16150K .......... .......... .......... .......... .......... 38% 7,79M 10s + 16200K .......... .......... .......... .......... .......... 39% 14,6M 10s + 16250K .......... .......... .......... .......... .......... 39% 71,5M 10s + 16300K .......... .......... .......... .......... .......... 39% 21,6M 9s + 16350K .......... .......... .......... .......... .......... 39% 73,9M 9s + 16400K .......... .......... .......... .......... .......... 39% 56,4M 9s + 16450K .......... .......... .......... .......... .......... 39% 9,36M 9s + 16500K .......... .......... .......... .......... .......... 39% 69,8M 9s + 16550K .......... .......... .......... .......... .......... 39% 67,0M 9s + 16600K .......... .......... .......... .......... .......... 39% 58,4M 9s + 16650K .......... .......... .......... .......... .......... 40% 9,56M 9s + 16700K .......... .......... .......... .......... .......... 40% 71,2M 9s + 16750K .......... .......... .......... .......... .......... 40% 74,3M 9s + 16800K .......... .......... .......... .......... .......... 40% 63,4M 9s + 16850K .......... .......... .......... .......... .......... 40% 17,3M 9s + 16900K .......... .......... .......... .......... .......... 40% 60,6M 9s + 16950K .......... .......... .......... .......... .......... 40% 67,8M 9s + 17000K .......... .......... .......... .......... .......... 40% 30,6M 9s + 17050K .......... .......... .......... .......... .......... 41% 44,2M 9s + 17100K .......... .......... .......... .......... .......... 41% 92,3M 9s + 17150K .......... .......... .......... .......... .......... 41% 87,8M 9s + 17200K .......... .......... .......... .......... .......... 41% 14,1M 9s + 17250K .......... .......... .......... .......... .......... 41% 1,92M 9s + 17300K .......... .......... .......... .......... .......... 41% 1,41M 9s + 17350K .......... .......... .......... .......... .......... 41% 72,0M 9s + 17400K .......... .......... .......... .......... .......... 41% 61,9M 9s + 17450K .......... .......... .......... .......... .......... 42% 7,98M 9s + 17500K .......... .......... .......... .......... .......... 42% 18,0M 9s + 17550K .......... .......... .......... .......... .......... 42% 18,5M 9s + 17600K .......... .......... .......... .......... .......... 42% 60,6M 8s + 17650K .......... .......... .......... .......... .......... 42% 74,3M 8s + 17700K .......... .......... .......... .......... .......... 42% 71,4M 8s + 17750K .......... .......... .......... .......... .......... 42% 9,08M 8s + 17800K .......... .......... .......... .......... .......... 42% 67,1M 8s + 17850K .......... .......... .......... .......... .......... 42% 88,4M 8s + 17900K .......... .......... .......... .......... .......... 43% 63,0M 8s + 17950K .......... .......... .......... .......... .......... 43% 90,2M 8s + 18000K .......... .......... .......... .......... .......... 43% 9,69M 8s + 18050K .......... .......... .......... .......... .......... 43% 90,6M 8s + 18100K .......... .......... .......... .......... .......... 43% 88,4M 8s + 18150K .......... .......... .......... .......... .......... 43% 83,2M 8s + 18200K .......... .......... .......... .......... .......... 43% 20,2M 8s + 18250K .......... .......... .......... .......... .......... 43% 55,5M 8s + 18300K .......... .......... .......... .......... .......... 44% 24,3M 8s + 18350K .......... .......... .......... .......... .......... 44% 100M 8s + 18400K .......... .......... .......... .......... .......... 44% 31,8M 8s + 18450K .......... .......... .......... .......... .......... 44% 90,8M 8s + 18500K .......... .......... .......... .......... .......... 44% 16,1M 8s + 18550K .......... .......... .......... .......... .......... 44% 4,01M 8s + 18600K .......... .......... .......... .......... .......... 44% 60,9M 8s + 18650K .......... .......... .......... .......... .......... 44% 3,78M 8s + 18700K .......... .......... .......... .......... .......... 45% 1,39M 8s + 18750K .......... .......... .......... .......... .......... 45% 8,10M 8s + 18800K .......... .......... .......... .......... .......... 45% 60,9M 8s + 18850K .......... .......... .......... .......... .......... 45% 69,6M 8s + 18900K .......... .......... .......... .......... .......... 45% 15,8M 8s + 18950K .......... .......... .......... .......... .......... 45% 22,2M 8s + 19000K .......... .......... .......... .......... .......... 45% 63,8M 8s + 19050K .......... .......... .......... .......... .......... 45% 73,8M 7s + 19100K .......... .......... .......... .......... .......... 45% 75,6M 7s + 19150K .......... .......... .......... .......... .......... 46% 10,4M 7s + 19200K .......... .......... .......... .......... .......... 46% 48,1M 7s + 19250K .......... .......... .......... .......... .......... 46% 34,6M 7s + 19300K .......... .......... .......... .......... .......... 46% 108M 7s + 19350K .......... .......... .......... .......... .......... 46% 121M 7s + 19400K .......... .......... .......... .......... .......... 46% 10,9M 7s + 19450K .......... .......... .......... .......... .......... 46% 42,3M 7s + 19500K .......... .......... .......... .......... .......... 46% 63,6M 7s + 19550K .......... .......... .......... .......... .......... 47% 73,5M 7s + 19600K .......... .......... .......... .......... .......... 47% 25,8M 7s + 19650K .......... .......... .......... .......... .......... 47% 56,0M 7s + 19700K .......... .......... .......... .......... .......... 47% 49,8M 7s + 19750K .......... .......... .......... .......... .......... 47% 52,2M 7s + 19800K .......... .......... .......... .......... .......... 47% 61,9M 7s + 19850K .......... .......... .......... .......... .......... 47% 34,3M 7s + 19900K .......... .......... .......... .......... .......... 47% 50,3M 7s + 19950K .......... .......... .......... .......... .......... 48% 25,2M 7s + 20000K .......... .......... .......... .......... .......... 48% 7,45M 7s + 20050K .......... .......... .......... .......... .......... 48% 8,22M 7s + 20100K .......... .......... .......... .......... .......... 48% 3,67M 7s + 20150K .......... .......... .......... .......... .......... 48% 3,41M 7s + 20200K .......... .......... .......... .......... .......... 48% 1,78M 7s + 20250K .......... .......... .......... .......... .......... 48% 66,9M 7s + 20300K .......... .......... .......... .......... .......... 48% 74,2M 7s + 20350K .......... .......... .......... .......... .......... 48% 12,8M 7s + 20400K .......... .......... .......... .......... .......... 49% 29,9M 7s + 20450K .......... .......... .......... .......... .......... 49% 50,4M 7s + 20500K .......... .......... .......... .......... .......... 49% 63,1M 7s + 20550K .......... .......... .......... .......... .......... 49% 63,9M 7s + 20600K .......... .......... .......... .......... .......... 49% 15,6M 7s + 20650K .......... .......... .......... .......... .......... 49% 21,4M 7s + 20700K .......... .......... .......... .......... .......... 49% 54,6M 6s + 20750K .......... .......... .......... .......... .......... 49% 78,0M 6s + 20800K .......... .......... .......... .......... .......... 50% 93,0M 6s + 20850K .......... .......... .......... .......... .......... 50% 115M 6s + 20900K .......... .......... .......... .......... .......... 50% 13,9M 6s + 20950K .......... .......... .......... .......... .......... 50% 91,8M 6s + 21000K .......... .......... .......... .......... .......... 50% 33,4M 6s + 21050K .......... .......... .......... .......... .......... 50% 116M 6s + 21100K .......... .......... .......... .......... .......... 50% 28,1M 6s + 21150K .......... .......... .......... .......... .......... 50% 113M 6s + 21200K .......... .......... .......... .......... .......... 51% 39,4M 6s + 21250K .......... .......... .......... .......... .......... 51% 108M 6s + 21300K .......... .......... .......... .......... .......... 51% 30,8M 6s + 21350K .......... .......... .......... .......... .......... 51% 64,5M 6s + 21400K .......... .......... .......... .......... .......... 51% 75,7M 6s + 21450K .......... .......... .......... .......... .......... 51% 81,5M 6s + 21500K .......... .......... .......... .......... .......... 51% 16,2M 6s + 21550K .......... .......... .......... .......... .......... 51% 107M 6s + 21600K .......... .......... .......... .......... .......... 51% 4,12M 6s + 21650K .......... .......... .......... .......... .......... 52% 80,1M 6s + 21700K .......... .......... .......... .......... .......... 52% 3,73M 6s + 21750K .......... .......... .......... .......... .......... 52% 5,47M 6s + 21800K .......... .......... .......... .......... .......... 52% 1,50M 6s + 21850K .......... .......... .......... .......... .......... 52% 48,4M 6s + 21900K .......... .......... .......... .......... .......... 52% 65,3M 6s + 21950K .......... .......... .......... .......... .......... 52% 12,9M 6s + 22000K .......... .......... .......... .......... .......... 52% 34,5M 6s + 22050K .......... .......... .......... .......... .......... 53% 79,9M 6s + 22100K .......... .......... .......... .......... .......... 53% 75,7M 6s + 22150K .......... .......... .......... .......... .......... 53% 92,5M 6s + 22200K .......... .......... .......... .......... .......... 53% 14,2M 6s + 22250K .......... .......... .......... .......... .......... 53% 78,3M 6s + 22300K .......... .......... .......... .......... .......... 53% 23,3M 6s + 22350K .......... .......... .......... .......... .......... 53% 51,2M 6s + 22400K .......... .......... .......... .......... .......... 53% 35,1M 6s + 22450K .......... .......... .......... .......... .......... 54% 59,3M 6s + 22500K .......... .......... .......... .......... .......... 54% 84,3M 6s + 22550K .......... .......... .......... .......... .......... 54% 22,4M 6s + 22600K .......... .......... .......... .......... .......... 54% 66,5M 5s + 22650K .......... .......... .......... .......... .......... 54% 37,8M 5s + 22700K .......... .......... .......... .......... .......... 54% 81,6M 5s + 22750K .......... .......... .......... .......... .......... 54% 68,9M 5s + 22800K .......... .......... .......... .......... .......... 54% 29,8M 5s + 22850K .......... .......... .......... .......... .......... 54% 49,7M 5s + 22900K .......... .......... .......... .......... .......... 55% 68,8M 5s + 22950K .......... .......... .......... .......... .......... 55% 44,2M 5s + 23000K .......... .......... .......... .......... .......... 55% 56,1M 5s + 23050K .......... .......... .......... .......... .......... 55% 88,3M 5s + 23100K .......... .......... .......... .......... .......... 55% 87,2M 5s + 23150K .......... .......... .......... .......... .......... 55% 75,9M 5s + 23200K .......... .......... .......... .......... .......... 55% 20,9M 5s + 23250K .......... .......... .......... .......... .......... 55% 65,3M 5s + 23300K .......... .......... .......... .......... .......... 56% 99,4M 5s + 23350K .......... .......... .......... .......... .......... 56% 4,19M 5s + 23400K .......... .......... .......... .......... .......... 56% 6,24M 5s + 23450K .......... .......... .......... .......... .......... 56% 2,81M 5s + 23500K .......... .......... .......... .......... .......... 56% 6,61M 5s + 23550K .......... .......... .......... .......... .......... 56% 2,22M 5s + 23600K .......... .......... .......... .......... .......... 56% 31,8M 5s + 23650K .......... .......... .......... .......... .......... 56% 13,2M 5s + 23700K .......... .......... .......... .......... .......... 57% 27,7M 5s + 23750K .......... .......... .......... .......... .......... 57% 38,7M 5s + 23800K .......... .......... .......... .......... .......... 57% 56,6M 5s + 23850K .......... .......... .......... .......... .......... 57% 71,8M 5s + 23900K .......... .......... .......... .......... .......... 57% 20,8M 5s + 23950K .......... .......... .......... .......... .......... 57% 42,8M 5s + 24000K .......... .......... .......... .......... .......... 57% 60,5M 5s + 24050K .......... .......... .......... .......... .......... 57% 58,8M 5s + 24100K .......... .......... .......... .......... .......... 57% 31,7M 5s + 24150K .......... .......... .......... .......... .......... 58% 56,4M 5s + 24200K .......... .......... .......... .......... .......... 58% 94,3M 5s + 24250K .......... .......... .......... .......... .......... 58% 154M 5s + 24300K .......... .......... .......... .......... .......... 58% 166M 5s + 24350K .......... .......... .......... .......... .......... 58% 21,3M 5s + 24400K .......... .......... .......... .......... .......... 58% 28,9M 5s + 24450K .......... .......... .......... .......... .......... 58% 60,2M 5s + 24500K .......... .......... .......... .......... .......... 58% 99,0M 5s + 24550K .......... .......... .......... .......... .......... 59% 51,9M 5s + 24600K .......... .......... .......... .......... .......... 59% 109M 5s + 24650K .......... .......... .......... .......... .......... 59% 24,6M 5s + 24700K .......... .......... .......... .......... .......... 59% 78,5M 5s + 24750K .......... .......... .......... .......... .......... 59% 150M 5s + 24800K .......... .......... .......... .......... .......... 59% 58,7M 5s + 24850K .......... .......... .......... .......... .......... 59% 60,5M 4s + 24900K .......... .......... .......... .......... .......... 59% 95,2M 4s + 24950K .......... .......... .......... .......... .......... 60% 98,6M 4s + 25000K .......... .......... .......... .......... .......... 60% 88,9M 4s + 25050K .......... .......... .......... .......... .......... 60% 23,0M 4s + 25100K .......... .......... .......... .......... .......... 60% 61,5M 4s + 25150K .......... .......... .......... .......... .......... 60% 105M 4s + 25200K .......... .......... .......... .......... .......... 60% 6,64M 4s + 25250K .......... .......... .......... .......... .......... 60% 7,11M 4s + 25300K .......... .......... .......... .......... .......... 60% 4,75M 4s + 25350K .......... .......... .......... .......... .......... 60% 2,81M 4s + 25400K .......... .......... .......... .......... .......... 61% 50,6M 4s + 25450K .......... .......... .......... .......... .......... 61% 2,10M 4s + 25500K .......... .......... .......... .......... .......... 61% 26,6M 4s + 25550K .......... .......... .......... .......... .......... 61% 13,6M 4s + 25600K .......... .......... .......... .......... .......... 61% 16,6M 4s + 25650K .......... .......... .......... .......... .......... 61% 37,4M 4s + 25700K .......... .......... .......... .......... .......... 61% 69,9M 4s + 25750K .......... .......... .......... .......... .......... 61% 75,8M 4s + 25800K .......... .......... .......... .......... .......... 62% 32,8M 4s + 25850K .......... .......... .......... .......... .......... 62% 92,0M 4s + 25900K .......... .......... .......... .......... .......... 62% 163M 4s + 25950K .......... .......... .......... .......... .......... 62% 30,3M 4s + 26000K .......... .......... .......... .......... .......... 62% 35,2M 4s + 26050K .......... .......... .......... .......... .......... 62% 95,9M 4s + 26100K .......... .......... .......... .......... .......... 62% 55,0M 4s + 26150K .......... .......... .......... .......... .......... 62% 105M 4s + 26200K .......... .......... .......... .......... .......... 63% 142M 4s + 26250K .......... .......... .......... .......... .......... 63% 111M 4s + 26300K .......... .......... .......... .......... .......... 63% 17,8M 4s + 26350K .......... .......... .......... .......... .......... 63% 150M 4s + 26400K .......... .......... .......... .......... .......... 63% 41,1M 4s + 26450K .......... .......... .......... .......... .......... 63% 40,0M 4s + 26500K .......... .......... .......... .......... .......... 63% 90,6M 4s + 26550K .......... .......... .......... .......... .......... 63% 91,6M 4s + 26600K .......... .......... .......... .......... .......... 63% 69,6M 4s + 26650K .......... .......... .......... .......... .......... 64% 24,8M 4s + 26700K .......... .......... .......... .......... .......... 64% 94,8M 4s + 26750K .......... .......... .......... .......... .......... 64% 83,2M 4s + 26800K .......... .......... .......... .......... .......... 64% 42,4M 4s + 26850K .......... .......... .......... .......... .......... 64% 88,3M 4s + 26900K .......... .......... .......... .......... .......... 64% 88,8M 4s + 26950K .......... .......... .......... .......... .......... 64% 91,1M 4s + 27000K .......... .......... .......... .......... .......... 64% 35,7M 4s + 27050K .......... .......... .......... .......... .......... 65% 88,5M 4s + 27100K .......... .......... .......... .......... .......... 65% 83,5M 4s + 27150K .......... .......... .......... .......... .......... 65% 84,8M 4s + 27200K .......... .......... .......... .......... .......... 65% 6,73M 4s + 27250K .......... .......... .......... .......... .......... 65% 9,14M 4s + 27300K .......... .......... .......... .......... .......... 65% 28,7M 4s + 27350K .......... .......... .......... .......... .......... 65% 4,70M 4s + 27400K .......... .......... .......... .......... .......... 65% 2,82M 4s + 27450K .......... .......... .......... .......... .......... 66% 6,37M 4s + 27500K .......... .......... .......... .......... .......... 66% 3,01M 3s + 27550K .......... .......... .......... .......... .......... 66% 21,2M 3s + 27600K .......... .......... .......... .......... .......... 66% 13,7M 3s + 27650K .......... .......... .......... .......... .......... 66% 14,9M 3s + 27700K .......... .......... .......... .......... .......... 66% 55,1M 3s + 27750K .......... .......... .......... .......... .......... 66% 55,6M 3s + 27800K .......... .......... .......... .......... .......... 66% 67,1M 3s + 27850K .......... .......... .......... .......... .......... 66% 88,1M 3s + 27900K .......... .......... .......... .......... .......... 67% 61,5M 3s + 27950K .......... .......... .......... .......... .......... 67% 78,6M 3s + 28000K .......... .......... .......... .......... .......... 67% 28,8M 3s + 28050K .......... .......... .......... .......... .......... 67% 42,3M 3s + 28100K .......... .......... .......... .......... .......... 67% 46,7M 3s + 28150K .......... .......... .......... .......... .......... 67% 97,7M 3s + 28200K .......... .......... .......... .......... .......... 67% 72,4M 3s + 28250K .......... .......... .......... .......... .......... 67% 101M 3s + 28300K .......... .......... .......... .......... .......... 68% 104M 3s + 28350K .......... .......... .......... .......... .......... 68% 121M 3s + 28400K .......... .......... .......... .......... .......... 68% 21,7M 3s + 28450K .......... .......... .......... .......... .......... 68% 92,8M 3s + 28500K .......... .......... .......... .......... .......... 68% 99,8M 3s + 28550K .......... .......... .......... .......... .......... 68% 33,8M 3s + 28600K .......... .......... .......... .......... .......... 68% 114M 3s + 28650K .......... .......... .......... .......... .......... 68% 83,6M 3s + 28700K .......... .......... .......... .......... .......... 69% 142M 3s + 28750K .......... .......... .......... .......... .......... 69% 126M 3s + 28800K .......... .......... .......... .......... .......... 69% 9,03M 3s + 28850K .......... .......... .......... .......... .......... 69% 115M 3s + 28900K .......... .......... .......... .......... .......... 69% 101M 3s + 28950K .......... .......... .......... .......... .......... 69% 83,4M 3s + 29000K .......... .......... .......... .......... .......... 69% 88,0M 3s + 29050K .......... .......... .......... .......... .......... 69% 94,5M 3s + 29100K .......... .......... .......... .......... .......... 69% 122M 3s + 29150K .......... .......... .......... .......... .......... 70% 97,3M 3s + 29200K .......... .......... .......... .......... .......... 70% 91,8M 3s + 29250K .......... .......... .......... .......... .......... 70% 113M 3s + 29300K .......... .......... .......... .......... .......... 70% 35,7M 3s + 29350K .......... .......... .......... .......... .......... 70% 19,6M 3s + 29400K .......... .......... .......... .......... .......... 70% 110M 3s + 29450K .......... .......... .......... .......... .......... 70% 22,9M 3s + 29500K .......... .......... .......... .......... .......... 70% 6,27M 3s + 29550K .......... .......... .......... .......... .......... 71% 5,42M 3s + 29600K .......... .......... .......... .......... .......... 71% 5,40M 3s + 29650K .......... .......... .......... .......... .......... 71% 5,61M 3s + 29700K .......... .......... .......... .......... .......... 71% 3,47M 3s + 29750K .......... .......... .......... .......... .......... 71% 3,94M 3s + 29800K .......... .......... .......... .......... .......... 71% 17,8M 3s + 29850K .......... .......... .......... .......... .......... 71% 50,3M 3s + 29900K .......... .......... .......... .......... .......... 71% 15,4M 3s + 29950K .......... .......... .......... .......... .......... 72% 56,6M 3s + 30000K .......... .......... .......... .......... .......... 72% 39,4M 3s + 30050K .......... .......... .......... .......... .......... 72% 62,8M 3s + 30100K .......... .......... .......... .......... .......... 72% 49,8M 3s + 30150K .......... .......... .......... .......... .......... 72% 75,4M 3s + 30200K .......... .......... .......... .......... .......... 72% 63,8M 3s + 30250K .......... .......... .......... .......... .......... 72% 102M 3s + 30300K .......... .......... .......... .......... .......... 72% 79,7M 3s + 30350K .......... .......... .......... .......... .......... 72% 58,3M 3s + 30400K .......... .......... .......... .......... .......... 73% 36,5M 3s + 30450K .......... .......... .......... .......... .......... 73% 123M 3s + 30500K .......... .......... .......... .......... .......... 73% 21,5M 3s + 30550K .......... .......... .......... .......... .......... 73% 122M 3s + 30600K .......... .......... .......... .......... .......... 73% 121M 2s + 30650K .......... .......... .......... .......... .......... 73% 83,1M 2s + 30700K .......... .......... .......... .......... .......... 73% 122M 2s + 30750K .......... .......... .......... .......... .......... 73% 71,4M 2s + 30800K .......... .......... .......... .......... .......... 74% 30,6M 2s + 30850K .......... .......... .......... .......... .......... 74% 132M 2s + 30900K .......... .......... .......... .......... .......... 74% 89,6M 2s + 30950K .......... .......... .......... .......... .......... 74% 115M 2s + 31000K .......... .......... .......... .......... .......... 74% 117M 2s + 31050K .......... .......... .......... .......... .......... 74% 90,4M 2s + 31100K .......... .......... .......... .......... .......... 74% 9,46M 2s + 31150K .......... .......... .......... .......... .......... 74% 108M 2s + 31200K .......... .......... .......... .......... .......... 75% 51,7M 2s + 31250K .......... .......... .......... .......... .......... 75% 74,9M 2s + 31300K .......... .......... .......... .......... .......... 75% 104M 2s + 31350K .......... .......... .......... .......... .......... 75% 111M 2s + 31400K .......... .......... .......... .......... .......... 75% 102M 2s + 31450K .......... .......... .......... .......... .......... 75% 77,7M 2s + 31500K .......... .......... .......... .......... .......... 75% 104M 2s + 31550K .......... .......... .......... .......... .......... 75% 92,5M 2s + 31600K .......... .......... .......... .......... .......... 75% 94,8M 2s + 31650K .......... .......... .......... .......... .......... 76% 112M 2s + 31700K .......... .......... .......... .......... .......... 76% 23,4M 2s + 31750K .......... .......... .......... .......... .......... 76% 95,5M 2s + 31800K .......... .......... .......... .......... .......... 76% 21,2M 2s + 31850K .......... .......... .......... .......... .......... 76% 7,00M 2s + 31900K .......... .......... .......... .......... .......... 76% 5,33M 2s + 31950K .......... .......... .......... .......... .......... 76% 98,7M 2s + 32000K .......... .......... .......... .......... .......... 76% 5,87M 2s + 32050K .......... .......... .......... .......... .......... 77% 3,46M 2s + 32100K .......... .......... .......... .......... .......... 77% 3,11M 2s + 32150K .......... .......... .......... .......... .......... 77% 8,76M 2s + 32200K .......... .......... .......... .......... .......... 77% 47,3M 2s + 32250K .......... .......... .......... .......... .......... 77% 17,2M 2s + 32300K .......... .......... .......... .......... .......... 77% 13,4M 2s + 32350K .......... .......... .......... .......... .......... 77% 80,2M 2s + 32400K .......... .......... .......... .......... .......... 77% 75,5M 2s + 32450K .......... .......... .......... .......... .......... 78% 96,5M 2s + 32500K .......... .......... .......... .......... .......... 78% 63,6M 2s + 32550K .......... .......... .......... .......... .......... 78% 100M 2s + 32600K .......... .......... .......... .......... .......... 78% 30,2M 2s + 32650K .......... .......... .......... .......... .......... 78% 79,5M 2s + 32700K .......... .......... .......... .......... .......... 78% 91,0M 2s + 32750K .......... .......... .......... .......... .......... 78% 44,3M 2s + 32800K .......... .......... .......... .......... .......... 78% 49,2M 2s + 32850K .......... .......... .......... .......... .......... 78% 86,4M 2s + 32900K .......... .......... .......... .......... .......... 79% 20,8M 2s + 32950K .......... .......... .......... .......... .......... 79% 50,1M 2s + 33000K .......... .......... .......... .......... .......... 79% 86,0M 2s + 33050K .......... .......... .......... .......... .......... 79% 118M 2s + 33100K .......... .......... .......... .......... .......... 79% 121M 2s + 33150K .......... .......... .......... .......... .......... 79% 128M 2s + 33200K .......... .......... .......... .......... .......... 79% 103M 2s + 33250K .......... .......... .......... .......... .......... 79% 121M 2s + 33300K .......... .......... .......... .......... .......... 80% 39,0M 2s + 33350K .......... .......... .......... .......... .......... 80% 114M 2s + 33400K .......... .......... .......... .......... .......... 80% 95,3M 2s + 33450K .......... .......... .......... .......... .......... 80% 86,6M 2s + 33500K .......... .......... .......... .......... .......... 80% 116M 2s + 33550K .......... .......... .......... .......... .......... 80% 11,0M 2s + 33600K .......... .......... .......... .......... .......... 80% 76,4M 2s + 33650K .......... .......... .......... .......... .......... 80% 124M 2s + 33700K .......... .......... .......... .......... .......... 81% 43,7M 2s + 33750K .......... .......... .......... .......... .......... 81% 103M 2s + 33800K .......... .......... .......... .......... .......... 81% 86,7M 2s + 33850K .......... .......... .......... .......... .......... 81% 90,0M 2s + 33900K .......... .......... .......... .......... .......... 81% 47,6M 2s + 33950K .......... .......... .......... .......... .......... 81% 98,9M 2s + 34000K .......... .......... .......... .......... .......... 81% 79,3M 2s + 34050K .......... .......... .......... .......... .......... 81% 93,2M 2s + 34100K .......... .......... .......... .......... .......... 82% 96,5M 2s + 34150K .......... .......... .......... .......... .......... 82% 95,0M 2s + 34200K .......... .......... .......... .......... .......... 82% 52,0M 2s + 34250K .......... .......... .......... .......... .......... 82% 104M 2s + 34300K .......... .......... .......... .......... .......... 82% 93,2M 2s + 34350K .......... .......... .......... .......... .......... 82% 25,0M 1s + 34400K .......... .......... .......... .......... .......... 82% 7,35M 1s + 34450K .......... .......... .......... .......... .......... 82% 5,23M 1s + 34500K .......... .......... .......... .......... .......... 82% 6,79M 1s + 34550K .......... .......... .......... .......... .......... 83% 99,1M 1s + 34600K .......... .......... .......... .......... .......... 83% 3,23M 1s + 34650K .......... .......... .......... .......... .......... 83% 3,34M 1s + 34700K .......... .......... .......... .......... .......... 83% 6,32M 1s + 34750K .......... .......... .......... .......... .......... 83% 18,3M 1s + 34800K .......... .......... .......... .......... .......... 83% 12,6M 1s + 34850K .......... .......... .......... .......... .......... 83% 40,4M 1s + 34900K .......... .......... .......... .......... .......... 83% 68,0M 1s + 34950K .......... .......... .......... .......... .......... 84% 58,3M 1s + 35000K .......... .......... .......... .......... .......... 84% 45,2M 1s + 35050K .......... .......... .......... .......... .......... 84% 63,1M 1s + 35100K .......... .......... .......... .......... .......... 84% 54,5M 1s + 35150K .......... .......... .......... .......... .......... 84% 64,2M 1s + 35200K .......... .......... .......... .......... .......... 84% 74,6M 1s + 35250K .......... .......... .......... .......... .......... 84% 120M 1s + 35300K .......... .......... .......... .......... .......... 84% 95,9M 1s + 35350K .......... .......... .......... .......... .......... 85% 102M 1s + 35400K .......... .......... .......... .......... .......... 85% 117M 1s + 35450K .......... .......... .......... .......... .......... 85% 124M 1s + 35500K .......... .......... .......... .......... .......... 85% 139M 1s + 35550K .......... .......... .......... .......... .......... 85% 18,0M 1s + 35600K .......... .......... .......... .......... .......... 85% 98,5M 1s + 35650K .......... .......... .......... .......... .......... 85% 91,6M 1s + 35700K .......... .......... .......... .......... .......... 85% 120M 1s + 35750K .......... .......... .......... .......... .......... 85% 120M 1s + 35800K .......... .......... .......... .......... .......... 86% 107M 1s + 35850K .......... .......... .......... .......... .......... 86% 118M 1s + 35900K .......... .......... .......... .......... .......... 86% 83,0M 1s + 35950K .......... .......... .......... .......... .......... 86% 94,1M 1s + 36000K .......... .......... .......... .......... .......... 86% 69,9M 1s + 36050K .......... .......... .......... .......... .......... 86% 81,4M 1s + 36100K .......... .......... .......... .......... .......... 86% 117M 1s + 36150K .......... .......... .......... .......... .......... 86% 89,9M 1s + 36200K .......... .......... .......... .......... .......... 87% 83,4M 1s + 36250K .......... .......... .......... .......... .......... 87% 14,0M 1s + 36300K .......... .......... .......... .......... .......... 87% 84,0M 1s + 36350K .......... .......... .......... .......... .......... 87% 27,5M 1s + 36400K .......... .......... .......... .......... .......... 87% 94,0M 1s + 36450K .......... .......... .......... .......... .......... 87% 91,9M 1s + 36500K .......... .......... .......... .......... .......... 87% 47,3M 1s + 36550K .......... .......... .......... .......... .......... 87% 98,3M 1s + 36600K .......... .......... .......... .......... .......... 88% 88,5M 1s + 36650K .......... .......... .......... .......... .......... 88% 102M 1s + 36700K .......... .......... .......... .......... .......... 88% 97,9M 1s + 36750K .......... .......... .......... .......... .......... 88% 127M 1s + 36800K .......... .......... .......... .......... .......... 88% 57,2M 1s + 36850K .......... .......... .......... .......... .......... 88% 95,7M 1s + 36900K .......... .......... .......... .......... .......... 88% 88,0M 1s + 36950K .......... .......... .......... .......... .......... 88% 84,0M 1s + 37000K .......... .......... .......... .......... .......... 88% 38,4M 1s + 37050K .......... .......... .......... .......... .......... 89% 96,2M 1s + 37100K .......... .......... .......... .......... .......... 89% 10,9M 1s + 37150K .......... .......... .......... .......... .......... 89% 19,7M 1s + 37200K .......... .......... .......... .......... .......... 89% 5,09M 1s + 37250K .......... .......... .......... .......... .......... 89% 7,41M 1s + 37300K .......... .......... .......... .......... .......... 89% 3,85M 1s + 37350K .......... .......... .......... .......... .......... 89% 4,88M 1s + 37400K .......... .......... .......... .......... .......... 89% 133M 1s + 37450K .......... .......... .......... .......... .......... 90% 3,40M 1s + 37500K .......... .......... .......... .......... .......... 90% 17,3M 1s + 37550K .......... .......... .......... .......... .......... 90% 11,2M 1s + 37600K .......... .......... .......... .......... .......... 90% 123M 1s + 37650K .......... .......... .......... .......... .......... 90% 92,4M 1s + 37700K .......... .......... .......... .......... .......... 90% 68,4M 1s + 37750K .......... .......... .......... .......... .......... 90% 62,4M 1s + 37800K .......... .......... .......... .......... .......... 90% 59,1M 1s + 37850K .......... .......... .......... .......... .......... 91% 65,5M 1s + 37900K .......... .......... .......... .......... .......... 91% 55,8M 1s + 37950K .......... .......... .......... .......... .......... 91% 66,4M 1s + 38000K .......... .......... .......... .......... .......... 91% 56,0M 1s + 38050K .......... .......... .......... .......... .......... 91% 61,3M 1s + 38100K .......... .......... .......... .......... .......... 91% 60,9M 1s + 38150K .......... .......... .......... .......... .......... 91% 65,8M 1s + 38200K .......... .......... .......... .......... .......... 91% 57,1M 1s + 38250K .......... .......... .......... .......... .......... 91% 67,8M 1s + 38300K .......... .......... .......... .......... .......... 92% 74,7M 1s + 38350K .......... .......... .......... .......... .......... 92% 26,4M 1s + 38400K .......... .......... .......... .......... .......... 92% 70,8M 1s + 38450K .......... .......... .......... .......... .......... 92% 177M 1s + 38500K .......... .......... .......... .......... .......... 92% 103M 1s + 38550K .......... .......... .......... .......... .......... 92% 96,5M 1s + 38600K .......... .......... .......... .......... .......... 92% 92,9M 1s + 38650K .......... .......... .......... .......... .......... 92% 179M 1s + 38700K .......... .......... .......... .......... .......... 93% 64,0M 1s + 38750K .......... .......... .......... .......... .......... 93% 95,7M 1s + 38800K .......... .......... .......... .......... .......... 93% 69,1M 1s + 38850K .......... .......... .......... .......... .......... 93% 92,3M 1s + 38900K .......... .......... .......... .......... .......... 93% 97,2M 1s + 38950K .......... .......... .......... .......... .......... 93% 80,6M 0s + 39000K .......... .......... .......... .......... .......... 93% 89,0M 0s + 39050K .......... .......... .......... .......... .......... 93% 118M 0s + 39100K .......... .......... .......... .......... .......... 94% 21,5M 0s + 39150K .......... .......... .......... .......... .......... 94% 98,3M 0s + 39200K .......... .......... .......... .......... .......... 94% 25,7M 0s + 39250K .......... .......... .......... .......... .......... 94% 111M 0s + 39300K .......... .......... .......... .......... .......... 94% 64,2M 0s + 39350K .......... .......... .......... .......... .......... 94% 75,8M 0s + 39400K .......... .......... .......... .......... .......... 94% 64,2M 0s + 39450K .......... .......... .......... .......... .......... 94% 72,3M 0s + 39500K .......... .......... .......... .......... .......... 94% 72,0M 0s + 39550K .......... .......... .......... .......... .......... 95% 69,6M 0s + 39600K .......... .......... .......... .......... .......... 95% 75,7M 0s + 39650K .......... .......... .......... .......... .......... 95% 72,5M 0s + 39700K .......... .......... .......... .......... .......... 95% 74,1M 0s + 39750K .......... .......... .......... .......... .......... 95% 69,4M 0s + 39800K .......... .......... .......... .......... .......... 95% 61,5M 0s + 39850K .......... .......... .......... .......... .......... 95% 70,3M 0s + 39900K .......... .......... .......... .......... .......... 95% 76,4M 0s + 39950K .......... .......... .......... .......... .......... 96% 93,7M 0s + 40000K .......... .......... .......... .......... .......... 96% 73,8M 0s + 40050K .......... .......... .......... .......... .......... 96% 11,3M 0s + 40100K .......... .......... .......... .......... .......... 96% 5,42M 0s + 40150K .......... .......... .......... .......... .......... 96% 6,38M 0s + 40200K .......... .......... .......... .......... .......... 96% 37,9M 0s + 40250K .......... .......... .......... .......... .......... 96% 4,09M 0s + 40300K .......... .......... .......... .......... .......... 96% 4,75M 0s + 40350K .......... .......... .......... .......... .......... 97% 3,60M 0s + 40400K .......... .......... .......... .......... .......... 97% 16,7M 0s + 40450K .......... .......... .......... .......... .......... 97% 78,3M 0s + 40500K .......... .......... .......... .......... .......... 97% 10,4M 0s + 40550K .......... .......... .......... .......... .......... 97% 50,6M 0s + 40600K .......... .......... .......... .......... .......... 97% 96,0M 0s + 40650K .......... .......... .......... .......... .......... 97% 101M 0s + 40700K .......... .......... .......... .......... .......... 97% 114M 0s + 40750K .......... .......... .......... .......... .......... 97% 125M 0s + 40800K .......... .......... .......... .......... .......... 98% 81,4M 0s + 40850K .......... .......... .......... .......... .......... 98% 107M 0s + 40900K .......... .......... .......... .......... .......... 98% 107M 0s + 40950K .......... .......... .......... .......... .......... 98% 75,1M 0s + 41000K .......... .......... .......... .......... .......... 98% 108M 0s + 41050K .......... .......... .......... .......... .......... 98% 62,9M 0s + 41100K .......... .......... .......... .......... .......... 98% 51,6M 0s + 41150K .......... .......... .......... .......... .......... 98% 73,4M 0s + 41200K .......... .......... .......... .......... .......... 99% 47,4M 0s + 41250K .......... .......... .......... .......... .......... 99% 87,9M 0s + 41300K .......... .......... .......... .......... .......... 99% 18,0M 0s + 41350K .......... .......... .......... .......... .......... 99% 78,5M 0s + 41400K .......... .......... .......... .......... .......... 99% 78,3M 0s + 41450K .......... .......... .......... .......... .......... 99% 107M 0s + 41500K .......... .......... .......... .......... .......... 99% 73,6M 0s + 41550K .......... .......... .......... .......... .......... 99% 50,9M 0s + 41600K .......... .......... .......... .......... ...... 100% 122M=7,4s + +2014-06-18 13:38:29 (5,52 MB/s) - ‘/home/jwiklund/Documents/.git/annex/tmp/SHA256E-s42645638--4ae41fb29bd26339ea10f53ea2b7cf3132e53d5e8fbfde7b43b912aa52b3d319.tar.gz’ saved [42645638/42645638] + +[2014-06-18 13:38:29 CEST] main: Downloaded git-annex.. upgrade) +(checksum...) +[2014-06-18 13:38:29 CEST] Pusher: Syncing with born +(Recording state in git...) +To ssh://jwiklund@born/store/backup/Documents.annex.1/ + 38006f5..fdae080 git-annex -> synced/git-annex +git-annex version: 5.20140610-g5ec8bcf +build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash +key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL +remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external +local repository version: 5 +supported repository version: 5 +upgrade supported from repository versions: 0 1 2 4 +[2014-06-18 13:38:31 CEST] main: Upgrading git-annex +[2014-06-18 13:38:31 CEST] UpgradeWatcher: A new version of git-annex has been installed. + +Already up-to-date. + +Already up-to-date. + +Already up-to-date. + +Already up-to-date. +channel 4: bad ext data +channel 4: bad ext data +channel 4: bad ext data +channel 4: bad ext data +channel 4: bad ext data +channel 4: bad ext data +channel 4: bad ext data +channel 4: bad ext data +channel 4: bad ext data +channel 4: bad ext data +channel 4: bad ext data +channel 4: bad ext data +channel 4: bad ext data + +# End of transcript or log. +"""]] + +> [[fixed|done]]; the merge race has been fixed. The upgrade loop has also +> been dealt with. --[[Joey]] diff --git a/doc/bugs/files_lost_during_upgrade/comment_1_3f779c4d0c9fb27532b2981bd3ad4eee._comment b/doc/bugs/files_lost_during_upgrade/comment_1_3f779c4d0c9fb27532b2981bd3ad4eee._comment new file mode 100644 index 0000000000..b510d92c1f --- /dev/null +++ b/doc/bugs/files_lost_during_upgrade/comment_1_3f779c4d0c9fb27532b2981bd3ad4eee._comment @@ -0,0 +1,22 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.203" + subject="comment 1" + date="2014-06-18T18:12:47Z" + content=""" +So [[bugs/git-annex_auto_upgrade_is_redundant]] strikes again. I have fixed up the versions to avoid this upgrade loop again. I would rather discuss any problems with where the automatic upgrade code puts git-annex in a separate bug report than this one.. (If you're running git-annex as a user that is not allowed to write to the directory where you installed it in the first place then yes, it cannot write there and will instead unpack itself into the home directory.) + +There are many strange things in the log, but this is probably the strangest: + +> fatal: Could not switch to '/home/jwiklund/Documents/.git/annex/merge/': No such file or directory + +This is the gitAnnexMergeDir used for direct mode merges. Since git-annex always creates that directory before starting a merge, I don't know how it could fail to exist. + +Other strange things: + +* The assistant fixes stale index.lock files on startup. But the log shows the assistant starting up and shortly thereafter there's a stale index.lock file. All I can think is that perhaps two git processes are trying to commit at the same time. + +* \"fatal: pathspec 'music.txt' did not match any files\", apparently output by git-add. + +* \"error: duplicate parent 294b61a3dce1e87a62e4d675deac2a9130b819e6 ignored\", which would happen if git-commit-tree were passed duplicate parent refs. AFAICS, the only place in git-annex that might do that is when it commits the git-annex branch. (While this says it's an error, it really is ignored, and git-commit-tree continues and makes a valid commit.) +"""]] diff --git a/doc/bugs/files_lost_during_upgrade/comment_2_80ba8c217e83c9d44a9dc52f4028719d._comment b/doc/bugs/files_lost_during_upgrade/comment_2_80ba8c217e83c9d44a9dc52f4028719d._comment new file mode 100644 index 0000000000..b09df4eeba --- /dev/null +++ b/doc/bugs/files_lost_during_upgrade/comment_2_80ba8c217e83c9d44a9dc52f4028719d._comment @@ -0,0 +1,11 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 2" + date="2014-07-10T19:10:15Z" + content=""" +Looking back at this bug, it's clearly the same race that I later +debugged and fixed in [[bad_merge_commit_deleting_all_files]]. There are instructions in that bug for recovering it. + +In particular, the \"fatal: Could not switch to '/home/jwiklund/Documents/.git/annex/merge/': No such file or directory\" is because of the race; the merge directory is being created and deleted by two contending threads. +"""]] diff --git a/doc/bugs/git-annex.app_doesn__39__t_seem_to_use_the_bundled_git.mdwn b/doc/bugs/git-annex.app_doesn__39__t_seem_to_use_the_bundled_git.mdwn new file mode 100644 index 0000000000..47ee6ed81e --- /dev/null +++ b/doc/bugs/git-annex.app_doesn__39__t_seem_to_use_the_bundled_git.mdwn @@ -0,0 +1,50 @@ +### Please describe the problem. + +When trying to create a repository—i.e., running it for the first time—I get this error message: + +> user error (git ["--git-dir=(path)/.git","--work-tree=(path)","commit-tree","4b825dc642cb6eb9a060e54bf8d69288fbee4904","--no-gpg-sign"] exited 128) + +It _seems_ that it's because the bundled `git` executable isn't used, and instead `/usr/bin/git` is; and it's too old to support the `--no-gpg-sign` flag. + + +### What steps will reproduce the problem? + +Run `git-annex.app` for the first time and give it a path. + + +### What version of git-annex are you using? On what operating system? + + $ /Applications/Git-Annex.app/Contents/MacOS/git-annex version + git-annex version: 5.20140707-gf0c48e8 + build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi TDFA CryptoHash + key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL + remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external + + +### Please provide any additional information below. + +`…/.git/annex/daemon.log` doesn't exist + + $ tree -a + . + ├── .DS_Store + └── .git + ├── HEAD + ├── annex + │   ├── index + │   ├── misctmp + │   ├── sentinal + │   └── sentinal.cache + ├── config + ├── hooks + │   └── pre-commit + ├── objects + │   ├── 4b + │   │   └── 825dc642cb6eb9a060e54bf8d69288fbee4904 + │   ├── info + │   └── pack + └── refs + ├── heads + └── tags + +> [[fixed|done]] --[[Joey]] diff --git a/doc/bugs/git-annex.app_doesn__39__t_seem_to_use_the_bundled_git/comment_1_73924adc1c3c0dca5adce9a5e1740e48._comment b/doc/bugs/git-annex.app_doesn__39__t_seem_to_use_the_bundled_git/comment_1_73924adc1c3c0dca5adce9a5e1740e48._comment new file mode 100644 index 0000000000..888ef1e4a0 --- /dev/null +++ b/doc/bugs/git-annex.app_doesn__39__t_seem_to_use_the_bundled_git/comment_1_73924adc1c3c0dca5adce9a5e1740e48._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 1" + date="2014-07-08T16:44:32Z" + content=""" +No, it's using it, it seems the version of git in the OSX build does not support that option. + +I am going to fix the version problem, and update yesterday's OSX release with the fix. +"""]] diff --git a/doc/bugs/git-annex.app_doesn__39__t_seem_to_use_the_bundled_git/comment_2_81c2896c9dfe5d96ad5a8f40cb312790._comment b/doc/bugs/git-annex.app_doesn__39__t_seem_to_use_the_bundled_git/comment_2_81c2896c9dfe5d96ad5a8f40cb312790._comment new file mode 100644 index 0000000000..fef9712186 --- /dev/null +++ b/doc/bugs/git-annex.app_doesn__39__t_seem_to_use_the_bundled_git/comment_2_81c2896c9dfe5d96ad5a8f40cb312790._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawn0aWOz5xMj5VuexPl55h7IasQnsh7sVwE" + nickname="Andy" + subject="It works now" + date="2014-07-08T22:47:07Z" + content=""" +You were right, it was an old git. I could have sworn it worked, but I must've got the versions mixed up because it didn't earlier. + +Anyway, after updating, everything works fine. Thankyou! +"""]] diff --git a/doc/bugs/git-annex:_createSession:_permission_denied___40__Operation_not_permitted__41__/comment_5_013be36151fc710ec30756b0f68f43dc._comment b/doc/bugs/git-annex:_createSession:_permission_denied___40__Operation_not_permitted__41__/comment_5_013be36151fc710ec30756b0f68f43dc._comment new file mode 100644 index 0000000000..358a820bf9 --- /dev/null +++ b/doc/bugs/git-annex:_createSession:_permission_denied___40__Operation_not_permitted__41__/comment_5_013be36151fc710ec30756b0f68f43dc._comment @@ -0,0 +1,12 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawnNqLKszWk9EoD4CDCqNXJRIklKFBCN1Ao" + nickname="maurizio" + subject="package in debian backports shows the same error mesage" + date="2014-07-08T19:25:19Z" + content=""" +I upgraded recently (on wheezy) to package 5.20140529~bpo70+2 and when I to access the webapp I get: + + mezzo:~$ git-annex webapp + git-annex: createSession: permission denied (Operation not permitted) + +"""]] diff --git a/doc/bugs/git-annex_auto_upgrade_is_redundant.mdwn b/doc/bugs/git-annex_auto_upgrade_is_redundant.mdwn index 0250810d1b..582a8edee6 100644 --- a/doc/bugs/git-annex_auto_upgrade_is_redundant.mdwn +++ b/doc/bugs/git-annex_auto_upgrade_is_redundant.mdwn @@ -28,3 +28,7 @@ Current. [[!meta title="upgrade loop when info file contains newer version than distributed version of git-annex"]] [[!tag confirmed]] + +> [[fixed|done]]; the release process now uses versions from build-version +> files that are created by the autobuilders, so should always be accurate. +> --[[Joey]] diff --git a/doc/bugs/git-annex_sync_does_not_push.mdwn b/doc/bugs/git-annex_sync_does_not_push.mdwn new file mode 100644 index 0000000000..a5fbc17427 --- /dev/null +++ b/doc/bugs/git-annex_sync_does_not_push.mdwn @@ -0,0 +1,52 @@ +### Please describe the problem. + +From the description of `sync` in the man page I assume it should be able to push all the branches it needs: + +> The sync process involves first committing all local changes, then fetching and merging the `synced/master` and the `git-annex` branch from the remote repositories, and finally pushing the changes back to those branches on the remote repositories. You can use standard git commands to do each of those steps by hand, or if you don't want to worry about the details, you can use sync. + +However this does not seem to be the case if one starts from an empty repository. + +### What steps will reproduce the problem? + +The following script (from ) will reproduce this problem: + + #!/bin/sh -x + + set -e ; set -u + export LC_ALL=C + + d=$(pwd) + + # cleanup + chmod a+rwx -R REPO pc1 || true + rm -Rf REPO pc1 + + # create central git repo + mkdir -p REPO/Docs.git + cd REPO/Docs.git + git init --bare + cd $d + + # populate repo in PC1 + mkdir -p pc1/Docs + cd pc1/Docs + echo AAA > fileA + echo BBB > fileB + + git init + git remote add origin $d/REPO/Docs.git + git fetch --all + + git annex init "pc1" + git annex add . + git annex sync + + find $d/REPO/Docs.git/refs + + # there should be some branches inside refs + +### What version of git-annex are you using? On what operating system? + +5.20140412ubuntu1 from Ubuntu 14.04. + +> Documentation fixed, so provisionally [[done]] --[[Joey]] diff --git a/doc/bugs/git-annex_sync_does_not_push/comment_1_8b9b53163b012563b3e80f8eded76aaa._comment b/doc/bugs/git-annex_sync_does_not_push/comment_1_8b9b53163b012563b3e80f8eded76aaa._comment new file mode 100644 index 0000000000..424d4db0d7 --- /dev/null +++ b/doc/bugs/git-annex_sync_does_not_push/comment_1_8b9b53163b012563b3e80f8eded76aaa._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 1" + date="2014-07-11T18:09:51Z" + content=""" +git-annex sync only syncs with remotes that have an annex.uuid configured. So you can solve your problem by: `git annex sync origin`, which will sync to the remote and incidentially initialize it for git-annex use. + +I think this is merely a documentation problem, as the documentation says it syncs with all remotes. Although I don't have any strong feelings about whether sync should act on remotes that have not yet been initialized with git-annex. +"""]] diff --git a/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory.mdwn b/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory.mdwn new file mode 100644 index 0000000000..13ac5a98f6 --- /dev/null +++ b/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory.mdwn @@ -0,0 +1,43 @@ +### Please describe the problem. + +Adding my 43GB Music Studio folder with 85K files causes out of memory or file not found errors. I subsequently tried on a very small folder but it still fails. --debug gives nothing useful that I can see. + + +### What steps will reproduce the problem? + +cd Studio +git init +git annex init +git annex add + + +### What version of git-annex are you using? On what operating system? +git-annex version: 5.20140613-g5587055 +build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV DNS Feeds Quvi TDFA CryptoHash +key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL +remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external +local repository version: 5 +supported repository version: 5 +upgrade supported from repository versions: 2 3 4 + +Running on Windows 8.1 x64, Git Bash, Direct Mode, WORM backend + +### 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 + +fatal: Out of memory? mmap failed: No such file or directory +git-annex: add: 8562 failed + +Phil@DESKTOP /c/Studio (annex/direct/master) +$ git annex add audacity +fatal: Out of memory? mmap failed: No such file or directory +(Recording state in git...) + + +# End of transcript or log. +"""]] + +[[!meta title="msysgit failure on Windows: mmap failed: No such file or directory "]] diff --git a/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_1_984f75d8078f2809486f38ecb3b16be3._comment b/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_1_984f75d8078f2809486f38ecb3b16be3._comment new file mode 100644 index 0000000000..3662fe04fc --- /dev/null +++ b/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_1_984f75d8078f2809486f38ecb3b16be3._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawnOSgFb3l7nL3Fs7Y9gPGJJjFiV7aJ1tek" + nickname="Phil" + subject="comment 1" + date="2014-07-04T16:25:53Z" + content=""" +Looks like it might be related to msysGit: + +[bug on msysgit](http://osdir.com/ml/msysgit/2009-12/msg00007.html) +"""]] diff --git a/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_2_c0f07e2d4bb142389629050479dd1465._comment b/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_2_c0f07e2d4bb142389629050479dd1465._comment new file mode 100644 index 0000000000..0601b0a7de --- /dev/null +++ b/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_2_c0f07e2d4bb142389629050479dd1465._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 2" + date="2014-07-04T17:58:10Z" + content=""" +If you run git-annex with the --debug flag, you can see the git command that is presumably what is failing. You could then probably run the same git command manually and see if it fails that way too. + +Does your git repository have a large pack file (in `.git/objects/pack`) as mentioned in the msysgit bug report? +"""]] diff --git a/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_3_7a58a884aaacedca9697b17cd5248214._comment b/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_3_7a58a884aaacedca9697b17cd5248214._comment new file mode 100644 index 0000000000..c6aa8360a5 --- /dev/null +++ b/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_3_7a58a884aaacedca9697b17cd5248214._comment @@ -0,0 +1,33 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawnOSgFb3l7nL3Fs7Y9gPGJJjFiV7aJ1tek" + nickname="Phil" + subject="comment 3" + date="2014-07-04T22:28:27Z" + content=""" +I thought it might be related to using WORM but I've just hit it again on the default backend. + +--debug just seems to fail on the folder I tried to add: + +[[!format sh \"\"\" + +git annex --debug add samples + +[2014-07-04 23:24:42 GMT Summer Time] read: git [\"--git-dir=c:\\Studio\\.git\",\"--work-tree=c:\\Studio\",\"-c\",\"core.bare=false\",\"ls-files\",\"--others\",\"--exclude-standard\",\"-z\",\"--\",\"samples\"] +[2014-07-04 23:24:42 GMT Summer Time] chat: git [\"--git-dir=c:\\Studio\\.git\",\"--work-tree=c:\\Studio\",\"-c\",\"core.bare=false\",\"cat-file\",\"--batch\"] +add samples/cr_info.sh [2014-07-04 23:24:42 GMT Summer Time] chat: git [\"--git-dir=c:\\Studio\\.git\",\"--work-tree=c:\\Studio\",\"-c\",\"core.bare=false\",\"check-attr\",\"-z\",\"--stdin\",\"annex.backend\",\"annex.numcopies\",\"--\"] +[2014-07-04 23:24:42 GMT Summer Time] chat: git [\"--git-dir=c:\\Studio\\.git\",\"--work-tree=c:\\Studio\",\"-c\",\"core.bare=false\",\"hash-object\",\"-t\",\"blob\",\"-w\",\"--stdin\",\"--no-filters\"] +[2014-07-04 23:24:42 GMT Summer Time] chat: git [\"--git-dir=c:\\Studio\\.git\",\"--work-tree=c:\\Studio\",\"-c\",\"core.bare=false\",\"cat-file\",\"--batch\"] +ok +[2014-07-04 23:24:42 GMT Summer Time] read: git [\"--git-dir=c:\\Studio\\.git\",\"--work-tree=c:\\Studio\",\"-c\",\"core.bare=false\",\"ls-files\",\"--modified\",\"-z\",\"--\",\"samples\"] +fatal: Out of memory? mmap failed: No such file or directory +(Recording state in git...) +[2014-07-04 23:25:39 GMT Summer Time] feed: git [\"--git-dir=c:\\Studio\\.git\",\"--work-tree=c:\\Studio\",\"-c\",\"core.bare=false\",\"update-index\",\"-z\",\"--index-info\"] +[2014-07-04 23:25:39 GMT Summer Time] chat: git [\"--git-dir=c:\\Studio\\.git\",\"--work-tree=c:\\Studio\",\"-c\",\"core.bare=false\",\"hash-object\",\"-w\",\"--stdin-paths\",\"--no-filters\"] +[2014-07-04 23:25:39 GMT Summer Time] feed: git [\"--git-dir=c:\\Studio\\.git\",\"--work-tree=c:\\Studio\",\"-c\",\"core.bare=false\",\"update-index\",\"-z\",\"--index-info\"] +[2014-07-04 23:25:39 GMT Summer Time] read: git [\"--git-dir=c:\\Studio\\.git\",\"--work-tree=c:\\Studio\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"] +[2014-07-04 23:25:39 GMT Summer Time] read: git [\"--git-dir=c:\\Studio\\.git\",\"--work-tree=c:\\Studio\",\"-c\",\"core.bare=false\",\"write-tree\"] +[2014-07-04 23:25:39 GMT Summer Time] chat: git [\"--git-dir=c:\\Studio\\.git\",\"--work-tree=c:\\Studio\",\"-c\",\"core.bare=false\",\"commit-tree\",\"447be0c8a000f98e3c580c6dede7f0ba2208963d\",\"-p\",\"refs/heads/git-annex\"] +[2014-07-04 23:25:39 GMT Summer Time] call: git [\"--git-dir=c:\\Studio\\.git\",\"--work-tree=c:\\Studio\",\"-c\",\"core.bare=false\",\"update-ref\",\"refs/heads/git-annex\",\"8551a4e2f5c4f42823f7da3169d1f630622359ef\"] + +\"\"\"]] +"""]] diff --git a/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_4_aa4f1806207138115d2a95935bb0546b._comment b/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_4_aa4f1806207138115d2a95935bb0546b._comment new file mode 100644 index 0000000000..8e98152420 --- /dev/null +++ b/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_4_aa4f1806207138115d2a95935bb0546b._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawnOSgFb3l7nL3Fs7Y9gPGJJjFiV7aJ1tek" + nickname="Phil" + subject="comment 4" + date="2014-07-04T22:30:45Z" + content=""" +There is no pack file, .git/objects/pack is empty. This is the first commit. I've queued up a load of files to commit, could this be it? +"""]] diff --git a/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_5_fa95f93416e3d6e66af557df6562f1e5._comment b/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_5_fa95f93416e3d6e66af557df6562f1e5._comment new file mode 100644 index 0000000000..749ee44ad9 --- /dev/null +++ b/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_5_fa95f93416e3d6e66af557df6562f1e5._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 5" + date="2014-07-10T19:59:15Z" + content=""" +For some reason, this bug is also being discussed in the forum. This makes it hard for me to keep up with what's going on, and generally is not a good idea. Currently, the forum currently seems to have better information. +"""]] diff --git a/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_8_f1a6e413756066659020e20147373a11._comment b/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_8_f1a6e413756066659020e20147373a11._comment new file mode 100644 index 0000000000..c4a8749543 --- /dev/null +++ b/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_8_f1a6e413756066659020e20147373a11._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 8" + date="2014-07-11T19:57:35Z" + content=""" +Unfortunately, this seems to be somewhat intermittent, so while I had a test case that worked once, John never saw it fail and has not been able to debug it. The test case has successfully connected every time I've tried it recently too. Perhaps jabber.de has changed whatever was causing the problem.. +"""]] diff --git a/doc/bugs/git_mv_before_commit_breaks_symlinks.mdwn b/doc/bugs/git_mv_before_commit_breaks_symlinks.mdwn new file mode 100644 index 0000000000..66a199e8ca --- /dev/null +++ b/doc/bugs/git_mv_before_commit_breaks_symlinks.mdwn @@ -0,0 +1,28 @@ +### Please describe the problem. + +When I `git mv` a file that I just `git annex add`-ed without having `git commit`-ed it first, then the symlink will break. + +### What steps will reproduce the problem? + + $ mkdir foo + $ echo hello > foo/bar + $ git annex add foo/bar + $ git mv foo/bar . + +### What version of git-annex are you using? On what operating system? + +5.20140529 on Debian testing + +> This is fundamentally something git-annex cannot deal with, +> because there is no way to hook into git to fix the symlink when +> `git mv` moves the file. +> +> Instead, git-annex has several "good enough" fixes for the problem: +> +> * As soon as you `git commit`, the pre-commit hook will run `git annex +> fix` and this will fix the symlink before it gets committed. +> * You can run `git annex fix` yourself after `git mv`. +> * Even `git annex add $file` will fix the symlink if the file is already +> annexed. +> +> So, [[done]] --[[Joey]] diff --git a/doc/bugs/gpg_does_not_ask_for_password_inside_tmux.mdwn b/doc/bugs/gpg_does_not_ask_for_password_inside_tmux.mdwn new file mode 100644 index 0000000000..7dbcf3048b --- /dev/null +++ b/doc/bugs/gpg_does_not_ask_for_password_inside_tmux.mdwn @@ -0,0 +1,25 @@ +### Please describe the problem. + +When commands that need gpg like `git annex copy` are run inside tmux, the GPG prompt does not show up and the user cannot give their password. + +Running the same command outside tmux causes GPG to properly show its prompt + +### What steps will reproduce the problem? + + $ tmux + TMUX$ GIT_ANNEX_ROOT/runshell + TMUX$ git annex copy --not -in remote --to remote + +git-annex will show the name of the first filename but will get stuck soon after that, waiting for GPG. + +### What version of git-annex are you using? On what operating system? + +git-annex 5.20140708-g8c9cc55c from the precompiled binaries, run inside tmux 1.6. + +`tmux.conf` contains `set-option -g default-command $SHELL` (this means that a normal shell is spawned, not a login shell) + +Ubuntu 12.04.4 + +[[!tag moreinfo]] + +> [[done]]; apparently a local misconfiguration of some sort. --[[Joey]] diff --git a/doc/bugs/gpg_does_not_ask_for_password_inside_tmux/comment_1_053b12e8b412723ff1d6b4e64e71af9e._comment b/doc/bugs/gpg_does_not_ask_for_password_inside_tmux/comment_1_053b12e8b412723ff1d6b4e64e71af9e._comment new file mode 100644 index 0000000000..0359be5287 --- /dev/null +++ b/doc/bugs/gpg_does_not_ask_for_password_inside_tmux/comment_1_053b12e8b412723ff1d6b4e64e71af9e._comment @@ -0,0 +1,24 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 1" + date="2014-07-10T18:24:17Z" + content=""" +I cannot reproduce this. I made sure to unset `GPG_AGENT_INFO` so gpg would need to prompt for a password on the terminal, and it did. + +
+joey@darkstar:~/tmp/r>unset GPG_AGENT_INFO 
+joey@darkstar:~/tmp/r>git annex copy --to remote
+copy n/xxx (gpg) 
+You need a passphrase to unlock the secret key for
+user: \"Joey Hess \"
+4096-bit RSA key, ID 17065459, created 2009-06-17 (main key ID 2512E3C7)
+
+gpg: gpg-agent is not available in this session
+Enter passphrase: 
+
+ +I cannot think of anything that would make gpg's password prompting behave differently inside tmux than outside, either. + +I think that to debug this, you are going to need to look at what the gpg process is trying to do. +"""]] diff --git a/doc/bugs/gpg_does_not_ask_for_password_inside_tmux/comment_2_44830ba952cad3b153249bd405671507._comment b/doc/bugs/gpg_does_not_ask_for_password_inside_tmux/comment_2_44830ba952cad3b153249bd405671507._comment new file mode 100644 index 0000000000..28756f654c --- /dev/null +++ b/doc/bugs/gpg_does_not_ask_for_password_inside_tmux/comment_2_44830ba952cad3b153249bd405671507._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://svario.it/gioele" + nickname="gioele" + subject="GPG_AGENT_INFO was already set in the outside shell" + date="2014-07-11T07:19:45Z" + content=""" +I found what the problem is: GPG_AGENT_INFO was already set in the outside shell. + +Unsetting GPG_AGENT_INFO fixes the problem. +"""]] diff --git a/doc/bugs/gpg_does_not_ask_for_password_inside_tmux/comment_3_a63db33a1dc70e64418de8b4bea6a9fa._comment b/doc/bugs/gpg_does_not_ask_for_password_inside_tmux/comment_3_a63db33a1dc70e64418de8b4bea6a9fa._comment new file mode 100644 index 0000000000..4f5428b87a --- /dev/null +++ b/doc/bugs/gpg_does_not_ask_for_password_inside_tmux/comment_3_a63db33a1dc70e64418de8b4bea6a9fa._comment @@ -0,0 +1,11 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 3" + date="2014-07-11T18:15:09Z" + content=""" +AFAICS there is no problem with GPG_AGENT_INFO being set while using tmux. The gpg agent works as usual and pops up a passphrase prompt window. + +Is there something broken in your gpg agent that prevents it from working inside tmux, or working at all? In any case, this seems like a local misconfiruation problem and out of git-annex's scope anyway so I suppose I will close the bug. + +"""]] diff --git a/doc/bugs/no_git-annex_shell_on_Windows/comment_9_03646c9df9d4f4ea27459660fe65a976._comment b/doc/bugs/no_git-annex_shell_on_Windows/comment_9_03646c9df9d4f4ea27459660fe65a976._comment new file mode 100644 index 0000000000..7a5152b590 --- /dev/null +++ b/doc/bugs/no_git-annex_shell_on_Windows/comment_9_03646c9df9d4f4ea27459660fe65a976._comment @@ -0,0 +1,25 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawnOSgFb3l7nL3Fs7Y9gPGJJjFiV7aJ1tek" + nickname="Phil" + subject="comment 9" + date="2014-07-05T22:29:01Z" + content=""" +Copying the `git-annex.exe` does work but you can also create a symlink and tell Windows to execute symlinks by doing the following. + +On the remote machine (the one you are connecting to) + +## Create a symlink: + + mklink \"C:\Program Files (x86)\Git\bin\git-annex-shell\" \"C:\Program Files (x86)\Git\bin\git-annex.exe\" + +## Tell Windows to run files with no extension: + +* Open Environment Variables +* At the end of `PATHEXT` add `;.` + +## A problem with rsync + +Unfortunately I now get `Access is denied` and `rsync: connection unexpectedly closed`. I think this is due to path issues on Windows. Trying rsync manually I need to use the `/cygdrive/c/rest/of/path` syntax otherwise I get `No such file or directory.` + + +"""]] diff --git a/doc/bugs/repo_creation_fails_on_android_4.4.3.mdwn b/doc/bugs/repo_creation_fails_on_android_4.4.3.mdwn new file mode 100644 index 0000000000..335357c10f --- /dev/null +++ b/doc/bugs/repo_creation_fails_on_android_4.4.3.mdwn @@ -0,0 +1,30 @@ +Hello everyone, +Creating a new repository through the web-app fails on Android 4.4.3, git annex version 5.20140612-g1bebb0d. + +Steps to reproduce the problem: + +1. Install git annex for android 4.4.3 + +2. Launch git annex. + +3. The terminal opens up reporting some (non-fatal?) errors. (I notice that I can't do anything in the terminal, is it supposed to reply to git annex commands? typing in "git annex version" does nothing). + +4. The web-app is launched. + +5. Click on make repository. + +6. Error message. + +I've made a few screenshots to illustrate: + +[terminal screenshot](https://drive.google.com/file/d/0B1qM91oKErVDSEJwbnhiaFJhQVU/edit?usp=sharing) + +This is the webapp error when creating a new repo: + +[first](https://drive.google.com/file/d/0B1qM91oKErVDVHVuLVpacmJaOEU/edit?usp=sharing) + +[second](https://drive.google.com/file/d/0B1qM91oKErVDX3R3cFhyb2VjcHc/edit?usp=sharing) + +Being on android I can't find any ".git/annex/daemon.log to" to report. I tried to look in the repo folder but there was no .git in it (maybe hidden?) + +> dup; [[done]] --[[Joey]] diff --git a/doc/bugs/repo_creation_fails_on_android_4.4.3/comment_1_01e638ec9c6d74966d76b6ceb7c06bad._comment b/doc/bugs/repo_creation_fails_on_android_4.4.3/comment_1_01e638ec9c6d74966d76b6ceb7c06bad._comment new file mode 100644 index 0000000000..9994130f5e --- /dev/null +++ b/doc/bugs/repo_creation_fails_on_android_4.4.3/comment_1_01e638ec9c6d74966d76b6ceb7c06bad._comment @@ -0,0 +1,26 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawnxFr-i4nNUVrj3PJ_JKhp7GtZ5Xom7-3w" + nickname="John" + subject="Errors from Screenshots" + date="2014-07-03T20:00:25Z" + content=""" +A low-bandwidth version. + +*terminal screenshot:* + +Falling back to hardcoded app location; cannot find expected files in /data/app-lib +git annex webapp +nex webapp +WARNING: linker: git-annex has text relocations. This is wasting memory and is a security risk. Please fix. +error: fchmod on /sdcard/annex/.git/config.lock failed: Operation not permitted +error: fchmod on /sdcard/annex/.git/config.lock failed: Operation not permitted + +*first:* + +git [Param \"config\",Param \"annex.uuid\",Param \"51e7d274-9723-4b14-8c5 + +*second:* + +ram \"annex.uuid\",Param \"51e7d274-9723-4b14-8c57-1d72263e3982\"] failed + +"""]] diff --git a/doc/bugs/repo_creation_fails_on_android_4.4.3/comment_2_07c0f9387433b7107e9def2bfbed3039._comment b/doc/bugs/repo_creation_fails_on_android_4.4.3/comment_2_07c0f9387433b7107e9def2bfbed3039._comment new file mode 100644 index 0000000000..473bfb3087 --- /dev/null +++ b/doc/bugs/repo_creation_fails_on_android_4.4.3/comment_2_07c0f9387433b7107e9def2bfbed3039._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 2" + date="2014-07-03T20:13:57Z" + content=""" +Thanks, this is then a dup of [[bugs/Android_fails_on_Google_Nexus_10_Jellybean]]. +"""]] diff --git a/doc/bugs/repo_creation_fails_on_android_4.4.3/comment_3_caf4f02677ea9e7fe28dbace99aa6860._comment b/doc/bugs/repo_creation_fails_on_android_4.4.3/comment_3_caf4f02677ea9e7fe28dbace99aa6860._comment new file mode 100644 index 0000000000..0b46416f5c --- /dev/null +++ b/doc/bugs/repo_creation_fails_on_android_4.4.3/comment_3_caf4f02677ea9e7fe28dbace99aa6860._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 3" + date="2014-07-04T17:52:41Z" + content=""" +This problem should be fixed in the most recent daily build of git-annex for android. Testing appreciated. +"""]] diff --git a/doc/bugs/runs_of_of_memory_adding_2_million_files.mdwn b/doc/bugs/runs_of_of_memory_adding_2_million_files.mdwn new file mode 100644 index 0000000000..3891933a6e --- /dev/null +++ b/doc/bugs/runs_of_of_memory_adding_2_million_files.mdwn @@ -0,0 +1,17 @@ +Make 2 million files and `git annex add` (indirect mode), fails at the end: + +
+add 999996 ok
+add 999997 ok
+(Recording state in git...)
+[2014-06-21 11:49:28 JEST] feed: xargs ["-0","git","--git-dir=/home/joey/tmp/r/.git","--work-tree=/home/joey/tmp/r","add","--"]
+add 999998 ok
+add 999999 ok
+[2014-06-21 11:49:49 JEST] read: git ["--git-dir=/home/joey/tmp/r/.git","--work-tree=/home/joey/tmp/r","diff","--name-only","--diff-filter=T","-z","--","."]
+(Recording state in git...)
+[2014-06-21 11:52:24 JEST] feed: xargs ["-0","git","--git-dir=/home/joey/tmp/r/.git","--work-tree=/home/joey/tmp/r","add","--"]
+Stack space overflow: current size 8388608 bytes.
+Use `+RTS -Ksize -RTS' to increase it.
+
+ +> [[fixed|done]] --[[Joey]] diff --git a/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_1_8b60b7816b9bf2c8cdd21b5cae431555._comment b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_1_8b60b7816b9bf2c8cdd21b5cae431555._comment new file mode 100644 index 0000000000..d4b1c3fd8d --- /dev/null +++ b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_1_8b60b7816b9bf2c8cdd21b5cae431555._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 1" + date="2014-07-04T18:24:51Z" + content=""" +The diff-filter=T comes from when Command.Add runs its pass to find unlocked files. It's finished adding all the files, so it must either be that or the git-annex branch commit that's running out of memory, I think. +"""]] diff --git a/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_2_32908da23e4fb38a7d20b765a5ab4656._comment b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_2_32908da23e4fb38a7d20b765a5ab4656._comment new file mode 100644 index 0000000000..7f0e8ba704 --- /dev/null +++ b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_2_32908da23e4fb38a7d20b765a5ab4656._comment @@ -0,0 +1,12 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 2" + date="2014-07-04T18:36:49Z" + content=""" +Does not seem to be the diff-filter=T command that is the problem. It's not outputting a lot of files, and should stream over them even if it did. + +The last xargs appears to be at or near the problem. It is called by Annex.Content.saveState, which first does a Annex.Queue.flush, followed by a Annex.Branch.commit. I suspect the problem is the latter; at this point there are 2 million files in .git/annex/journal waiting to be committed to the git-annex branch. + +In the same big repo, I can add one more file and reproduce the problem running `git annex add $newfile`. +"""]] diff --git a/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_3_3cff88b50eb3872565bccbeb6ee15716._comment b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_3_3cff88b50eb3872565bccbeb6ee15716._comment new file mode 100644 index 0000000000..7e2c5568d2 --- /dev/null +++ b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_3_3cff88b50eb3872565bccbeb6ee15716._comment @@ -0,0 +1,27 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 3" + date="2014-07-04T19:26:00Z" + content=""" +Looking at the code, it's pretty clear why this is using a lot of memory: + +
+        fs <- getJournalFiles jl
+        liftIO $ do
+                h <- hashObjectStart g
+                Git.UpdateIndex.streamUpdateIndex g
+                        [genstream dir h fs]
+                hashObjectStop h
+        return $ liftIO $ mapM_ (removeFile . (dir )) fs
+
+ +So the big list in `fs` has to be retained in memory after the files are streamed to update-index, in order for them to be deleted! + +Fixing is a bit tricky.. New journal files can appear while this is going on, so it can't just run getJournalFiles a second time to get the files to clean. +Maybe delete the file after it's been sent to git-update-index? But git-update-index is going to want to read the file, and we don't really know when it will choose to do so. It could wait a while after we've sent the filename to it, potentially. + +Also, per [[!commit 750c4ac6c282d14d19f79e0711f858367da145e4]], we cannot delete the journal files until *after* the commit, or another git-annex process would see inconsistent data! + +I actually think I am going to need to use a temp file to hold the list of files.. +"""]] diff --git a/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_4_e991986eb8ae49d2e69f7ed7fd61485f._comment b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_4_e991986eb8ae49d2e69f7ed7fd61485f._comment new file mode 100644 index 0000000000..40ff69d056 --- /dev/null +++ b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_4_e991986eb8ae49d2e69f7ed7fd61485f._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 4" + date="2014-07-04T19:38:18Z" + content=""" +While I fixed the problem analized above, it still runs out of memory in the same place. Must be other strictness problems.. +"""]] diff --git a/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_5_241ad838135a7a377374ca9ba90aec5c._comment b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_5_241ad838135a7a377374ca9ba90aec5c._comment new file mode 100644 index 0000000000..41382e1c27 --- /dev/null +++ b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_5_241ad838135a7a377374ca9ba90aec5c._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 5" + date="2014-07-04T19:53:43Z" + content=""" +The other memory leak is in getJournalFiles itself! +"""]] diff --git a/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_6_744982b77cc867e9e3a7d638c7a653d6._comment b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_6_744982b77cc867e9e3a7d638c7a653d6._comment new file mode 100644 index 0000000000..574cc0dc7c --- /dev/null +++ b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_6_744982b77cc867e9e3a7d638c7a653d6._comment @@ -0,0 +1,12 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 6" + date="2014-07-04T21:10:17Z" + content=""" +Actually, it is in getDirectoryContents itself, so not even in git-annex's code. Filed a bug w/patch: + +I do not feel this is serious enough to work around in git-annex with a fixed copy of getDirectoryContents, so I'll wait for that get fixed. + +Testing with my patched getDirectoryContents, git-annex still uses up a lot of memory in this situation. It no longer blows the stack, but getDirectoryContents is still using entirely more memory than it needs to. +"""]] diff --git a/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_7_9add4ee13b7ea846e6495c28da214269._comment b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_7_9add4ee13b7ea846e6495c28da214269._comment new file mode 100644 index 0000000000..a6f837dff4 --- /dev/null +++ b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_7_9add4ee13b7ea846e6495c28da214269._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 7" + date="2014-07-04T22:09:38Z" + content=""" +I wrote my own getDirectoryContents' with different exception semantics and entirely fixed this now. git-annex's memory use remains stable at around 1.5 mb during the entire staging of the millions of files. git itself uses a few hundred mb ;) +"""]] diff --git a/doc/bugs/sync_does_not_commit_with_alwasycommit___61___false.mdwn b/doc/bugs/sync_does_not_commit_with_alwasycommit___61___false.mdwn new file mode 100644 index 0000000000..9b7ec7cf51 --- /dev/null +++ b/doc/bugs/sync_does_not_commit_with_alwasycommit___61___false.mdwn @@ -0,0 +1,90 @@ +### Please describe the problem. + +The documentation of `git annex sync` states + +> The sync process involves first committing all local changes, then fetching and merging […] +> You can use standard git commands to do each of those steps by hand, or if you +> don't want to worry about the details, you can use sync. + +The documentation of `alwasycommit` states + +> By default, git-annex automatically commits data to the git-annex branch after each +> command is run. To disable these commits, set to false. Then data will only be +> committed when running `git annex merge` (or by automatic merges) or `git annex sync`. + +In fact, however, `git annex sync` will not commit or will not commit some pieces of information when `alwasycommit` is false. This leads to various problems, the first of which is that cloned repositories do not have information about the other remotes. + +It is hard to work around this problem because `git commit` cannot be used in direct mode. + +This problem does not show up when using local, non over-the-network, remotes. + +### What steps will reproduce the problem? + +The following script (available at ) will reproduce this problem. If you do not have SSH running on localhost, you can change the `h` variable to point to another host. + + #!/bin/sh -x + + set -e ; set -u + export LC_ALL=C + + h=${h:-localhost} + dr="/tmp/annex" + + chmod a+rwx -R pc1 pc2 || true + rm -Rf pc1 pc2 + + # create central git repo + ssh $h "chmod a+rwx -R ${dr}/Docs.git" || true + ssh $h "rm -Rf ${dr}/Docs.git" + ssh $h "mkdir -p ${dr}/Docs.git" + ssh $h "cd ${dr}/Docs.git ; git init --bare" + + d=$(pwd) + + # populate repo in PC1 + mkdir -p pc1/Docs + cd pc1/Docs + echo AAA > fileA + echo BBB > fileB + + git init + git config annex.alwayscommit false # change to true to solve this problem + + git remote add origin $h:$dr/Docs.git + git fetch --all + + # simulate a host without git-annex + git config remote.origin.annex-ignore true + + git annex init "pc1" + git annex info + + git annex direct + git annex sync origin + + git annex add . + git annex sync + + # re-create repo on PC2 + cd $d + mkdir -p pc2 + cd pc2 + git clone $h:$dr/Docs.git + cd Docs + + git config remote.origin.annex-ignore true + + git annex init "pc2" + git annex direct + git annex info + + # git annex info shows only pc2, shouldn't pc1 be there as well? + +### What version of git-annex are you using? On what operating system? + +git-annex version: 5.20140708-g8c9c55c on Ubuntu 12.04.4 + +> I have improved the documentation to not imply that sync/merge are a +> special case. They honor the autocommit settings more or less +> intentionally, and to get a commit to be made, just pass -c +> autocommit=true when running them. [[done]] --[[Joey]] diff --git a/doc/bugs/using_gpg_encryption_with_multiple_keys_fails.mdwn b/doc/bugs/using_gpg_encryption_with_multiple_keys_fails.mdwn new file mode 100644 index 0000000000..887f9f1fdd --- /dev/null +++ b/doc/bugs/using_gpg_encryption_with_multiple_keys_fails.mdwn @@ -0,0 +1,57 @@ +### Please describe the problem. +git-annex assistant uses wrong key if multiple are available. If there is only one gpg available it works without issue. + +### What steps will reproduce the problem? + +I tried to creating a new key through cli or assistant UI. I also tried to select preexisting key but it always appears to choose the initial key. Log below is creating a new key through assistant UI. + +### What version of git-annex are you using? On what operating system? +git-annex version: 5.20140709-gc75193e on linux amd64 & os x 10.9.4 + +### 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 + +[2014-07-12 23:22:57 PDT] main: starting assistant version 5.20140709-gc75193e +[2014-07-12 23:22:57 PDT] Cronner: You should enable consistency checking to protect your data. +(Recording state in git...) +(scanning...) [2014-07-12 23:22:57 PDT] Watcher: Performing startup scan +(started...) gpg: Signature made Wed Jul 9 19:09:28 2014 PDT using DSA key ID 89C809CB +gpg: Can't check signature: public key not found + +(encryption setup) (hybrid cipher with gpg key A1FE7E9BECB5C7CA) gcrypt: Development version -- Repository format MAY CHANGE +gcrypt: Repository not found: ssh://admin@nappy.local/share/backups/annex/ +gcrypt: Development version -- Repository format MAY CHANGE +gcrypt: Repository not found: ssh://admin@nappy.local/share/backups/annex/ +gcrypt: Setting up new repository +gcrypt: Remote ID is :id:smTV2DKvbvPIi7ftJLey +gcrypt: Encrypting to: -R A1FE7E9BECB5C7CA +gcrypt: Requesting manifest signature +To gcrypt::ssh://admin@nappy.local/share/backups/annex/ + * [new branch] git-annex -> git-annex +ok +[2014-07-12 23:23:42 PDT] main: Syncing with nappy.local__share_backups_annex +gcrypt: Development version -- Repository format MAY CHANGE +gcrypt: Decrypting manifest +gpg: anonymous recipient; trying secret key 6DF1BC5D ... +gpg: cannot open tty `/dev/tty': Device not configured +gcrypt: Failed to decrypt manifest! +gcrypt: Development version -- Repository format MAY CHANGE +gcrypt: Decrypting manifest +gpg: anonymous recipient; trying secret key 6DF1BC5D ... +gpg: cannot open tty `/dev/tty': Device not configured +gcrypt: Failed to decrypt manifest! + + +# End of transcript or log. +"""]] + +[[!tag forwarded]] +[[!meta title="using git-remote-gcrypt with multiple keys causes unncessary password prompts for keys that did not encrypt the repository"]] + +> [[fixed|done]]; upgrade git-remote-gcrypt and `git config gcrypt.publish-participants true` +> and after the next push to the repo, it'll stop guessing at keys, and use +> the right one. git-annex will do this by default for new gcrypt +> repositories. --[[Joey]] diff --git a/doc/bugs/using_gpg_encryption_with_multiple_keys_fails/comment_1_584390159278577da78b05bc7bb0e673._comment b/doc/bugs/using_gpg_encryption_with_multiple_keys_fails/comment_1_584390159278577da78b05bc7bb0e673._comment new file mode 100644 index 0000000000..01b9726a95 --- /dev/null +++ b/doc/bugs/using_gpg_encryption_with_multiple_keys_fails/comment_1_584390159278577da78b05bc7bb0e673._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 1" + date="2014-07-14T20:54:32Z" + content=""" +AFAICs, this is a known bug in git-remote-gcrypt: + +In your log, it encrypts to A1FE7E9BECB5C7CA. I think this is the new key that git-annex generated. The problem comes when trying to decrypt the manifest, then it tries every gpg key until it finds one that works. +"""]] diff --git a/doc/bugs/using_gpg_encryption_with_multiple_keys_fails/comment_2_51855f5bb857e1b6bc5531cdd7073c31._comment b/doc/bugs/using_gpg_encryption_with_multiple_keys_fails/comment_2_51855f5bb857e1b6bc5531cdd7073c31._comment new file mode 100644 index 0000000000..df07fd04a7 --- /dev/null +++ b/doc/bugs/using_gpg_encryption_with_multiple_keys_fails/comment_2_51855f5bb857e1b6bc5531cdd7073c31._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="lex" + ip="17.199.80.21" + subject="comment 2" + date="2014-07-14T22:21:32Z" + content=""" +ah. It's bailing due to the first key requiring passphrase, and since it aborts there it never tries the second so the whole thing fails. + +okay thanks for the link. +"""]] diff --git a/doc/bugs/using_gpg_encryption_with_multiple_keys_fails/comment_3_3a6ff3dbc24850b065d045c7c9398eb1._comment b/doc/bugs/using_gpg_encryption_with_multiple_keys_fails/comment_3_3a6ff3dbc24850b065d045c7c9398eb1._comment new file mode 100644 index 0000000000..7dab630813 --- /dev/null +++ b/doc/bugs/using_gpg_encryption_with_multiple_keys_fails/comment_3_3a6ff3dbc24850b065d045c7c9398eb1._comment @@ -0,0 +1,20 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 3" + date="2014-07-15T20:42:15Z" + content=""" +So let's think about whether gcrypt using gpg -R makes sense from the git-annex perspective. + +Without -R, an attacker who can look at the remote, encrypted git repository can easily see the gpg keys of participants. This could allow them to perform other, more targeted attacks to get at the unencrypted repository. + +If the user is using eg, github to store the gcrypt repo, an attacker can easily find out who owns the repo anyway, so they know who to attack then, even when -R is used. The -R can still prevent them from finding out when it's encrypted to additional users than the owner. + +As far as the assistant goes, it only ever sets up a gcrypt repo with one participant. Using either an existing gpg key of the user, or generating a new one (which doesn't even have their name on it). Adding more participants to a gcrypt repo is tricky, and the assistant doesn't currently support it. But I'd like to have it support setting up multiple participants eventually. So the current limitations of the assistant are not a sufficient reason to avoid using -R. + +So, it seems to come down to the question of whether it's a reasonable goal for git-annex, when used with gcrypt, to hide the identities of people who use a repository. And whether such a goal is worth the security/usability tradeoff of the user getting gpg passphrase prompts for other keys. + +Hmm, when git-annex encrypts files to send them to a special remote, if it's using encryption=pubkey, it does not use -R. So an attacker can get the list of participants that way. Although the more common approach is for git-annex to encrypt using encryption=shared/hybrid, which uses a symmetric cipher, which avoids that problem. There are plenty of other things that git-annex can do that would leak identity. + +It kind of seems to me that if you want to prevent anyone learning who uses your repository, you are going to need to be very cautious (using tor etc) and the most git-annex can do is be open about how it works and avoid adding any obstacles. Looking at it this way, such a user, or group of users, would be well-served by using gpg keys that don't have their names on them... +"""]] diff --git a/doc/bugs/using_gpg_encryption_with_multiple_keys_fails/comment_4_84168b56288262e01280da59ffaf19f6._comment b/doc/bugs/using_gpg_encryption_with_multiple_keys_fails/comment_4_84168b56288262e01280da59ffaf19f6._comment new file mode 100644 index 0000000000..22f0e909f3 --- /dev/null +++ b/doc/bugs/using_gpg_encryption_with_multiple_keys_fails/comment_4_84168b56288262e01280da59ffaf19f6._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 4" + date="2014-07-15T21:06:23Z" + content=""" +@lex, it shouldn't fail due to passphrase if you have gpg-agent set up. You'll only get some unncessary passphrase prompts. +"""]] diff --git a/doc/bugs/weird_unicode_bug_on_windows.mdwn b/doc/bugs/weird_unicode_bug_on_windows.mdwn new file mode 100644 index 0000000000..f1f0377f89 --- /dev/null +++ b/doc/bugs/weird_unicode_bug_on_windows.mdwn @@ -0,0 +1,17 @@ +### Please describe the problem. + +My repo contains more than 1000 files, many are unicode filenames. Now that [this bug](http://git-annex.branchable.com/bugs/fails_to_get_content_from_bare_repo_on_windows/) is resolved, almost all files are fetched, except one file named '移动硬盘 1T Buffalo USB3.0 白色.rtf'. + +### What steps will reproduce the problem? + +I reproduced this problem by creating a repo containing only this file with no content. If anyone wants to reproduce this, just create an empty file by copy and paste the above filename in the quote. + +I created the repo on mac, synced with a usb drive, then on windows machine try to sync it back. + +* When run git-annex webapp in the newly created windows repo, after the usb drive is added as a remote, an error popups up: http://imgur.com/5ZfIeGQ although the remote is added successfully (http://imgur.com/04O8kaC) +* On the command line, git annex sync runs successfully, but git annex get . failed: http://imgur.com/bIVrbe2 +* The file is there (http://imgur.com/URGwWWt) with correct filename, just that the content is not there. + +### What version of git-annex are you using? On what operating system? + +Latest release of git-annex on both mac and windows. The initial repo on mac is indirect repo, the one on usb drive is a bare repo, the one on windows is direct repo. diff --git a/doc/bugs/weird_unicode_bug_on_windows/comment_1_69af9bd8c7898fccc2219edd860d547b._comment b/doc/bugs/weird_unicode_bug_on_windows/comment_1_69af9bd8c7898fccc2219edd860d547b._comment new file mode 100644 index 0000000000..b16155c5f0 --- /dev/null +++ b/doc/bugs/weird_unicode_bug_on_windows/comment_1_69af9bd8c7898fccc2219edd860d547b._comment @@ -0,0 +1,12 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.203" + subject="comment 1" + date="2014-06-19T22:39:46Z" + content=""" +I don't quite reproduce this on windows. Instead of the file showing up and `git annex get` not getting it, the file never shows up at all. It seems that the direct mode merge code fails to create the file in the work tree. This also means that another sync will commit the deletion of the file. + +Based on the screenshot, I do have the identical filename checked into git, which git ls-files etc represents as \"\347\247\273\345\212\250\347\241\254\347\233\230 1T Buffalo USB3.0 \347\231\275\350\211\262.rtf\" + +Anyway, the root cause is probably the same. See [[todo/windows_support]] for a discussion of several issues with filename encodings and windows. +"""]] diff --git a/doc/builds.mdwn b/doc/builds.mdwn index 1989f72c9d..b920643b57 100644 --- a/doc/builds.mdwn +++ b/doc/builds.mdwn @@ -1,5 +1,30 @@ [[!meta title="git-annex autobuild overview"]] +[[!sidebar content=""" +# last uploaded build-versions + +

Linux i386

+ +

Linux amd64

+ +

Linux armel

+ +

Android

+ +

OSX Mavericks

+ +

Windows

+ +"""]] + +# build logs +

Linux i386

@@ -17,4 +42,3 @@

Windows

here - diff --git a/doc/coding_style/comment_1_70521cf79ad06832b1d73fc2c20c68ec._comment b/doc/coding_style/comment_1_70521cf79ad06832b1d73fc2c20c68ec._comment new file mode 100644 index 0000000000..a8200f856c --- /dev/null +++ b/doc/coding_style/comment_1_70521cf79ad06832b1d73fc2c20c68ec._comment @@ -0,0 +1,20 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawnq-RfkVpFN15SWvQ2lpSGAi0XpNQuLxKM" + nickname="Yuval" + subject="What about safe?" + date="2014-07-06T10:45:59Z" + content=""" +https://hackage.haskell.org/package/safe + +> A library wrapping Prelude/Data.List functions that can throw exceptions, such as head and !!. Each unsafe function has up to four variants, e.g. with tail: +> +> tail :: [a] -> [a], raises an error on tail []. + +> tailMay :: [a] -> Maybe [a], turns errors into Nothing. + +> tailDef :: [a] -> [a] -> [a], takes a default to return on errors. + +> tailNote :: String -> [a] -> [a], takes an extra argument which supplements the error message. + +> tailSafe :: [a] -> [a], returns some sensible default if possible, [] in the case of tail. +"""]] diff --git a/doc/coding_style/comment_2_a820b7c8ae7c2290eb000f61bdb5c514._comment b/doc/coding_style/comment_2_a820b7c8ae7c2290eb000f61bdb5c514._comment new file mode 100644 index 0000000000..9f9d961962 --- /dev/null +++ b/doc/coding_style/comment_2_a820b7c8ae7c2290eb000f61bdb5c514._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 2" + date="2014-07-10T20:24:03Z" + content=""" +safe does not prevent using the unsafe prelude functions. Utility.PartialPrelude does, and provides a few safe wrappers like lastMaybe. +"""]] diff --git a/doc/design/assistant/inotify/comment_7_00809aaad6b68f189a9cc42af810a0a6._comment b/doc/design/assistant/inotify/comment_7_00809aaad6b68f189a9cc42af810a0a6._comment new file mode 100644 index 0000000000..7e1ad7db5c --- /dev/null +++ b/doc/design/assistant/inotify/comment_7_00809aaad6b68f189a9cc42af810a0a6._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawnwfqF4wL6l_O26RyzoBowUMvQ_955Vpao" + nickname="Markus" + subject="comment 7" + date="2014-06-14T06:29:55Z" + content=""" +FWIW: Removing the [raspi-copies-and-fills](https://github.com/simonjhall/copies-and-fills) package ('apt-get purge raspi-copies-and-fills') stops annex from printing the message over and over again. According to the package's description though, you suffer a performance penalty without the package. +"""]] diff --git a/doc/design/assistant/polls/prioritizing_special_remotes.mdwn b/doc/design/assistant/polls/prioritizing_special_remotes.mdwn index c7d7b1eef2..0b99e99183 100644 --- a/doc/design/assistant/polls/prioritizing_special_remotes.mdwn +++ b/doc/design/assistant/polls/prioritizing_special_remotes.mdwn @@ -6,7 +6,7 @@ locally paired systems, and remote servers with rsync. 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)" 72 "My phone (or MP3 player)" 25 "Tahoe-LAFS" 11 "OpenStack SWIFT" 34 "Google Drive"]] +[[!poll open=yes 16 "Amazon S3 (done)" 12 "Amazon Glacier (done)" 10 "Box.com (done)" 73 "My phone (or MP3 player)" 25 "Tahoe-LAFS" 13 "OpenStack SWIFT" 34 "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 diff --git a/doc/design/roadmap.mdwn b/doc/design/roadmap.mdwn index 890c39e628..6312808284 100644 --- a/doc/design/roadmap.mdwn +++ b/doc/design/roadmap.mdwn @@ -13,6 +13,6 @@ Now in the * Month 7 user-driven features and polishing * Month 8 [[!traillink git-remote-daemon]] * Month 9 Brazil!, [[!traillink assistant/sshpassword]] -* **Month 10 polish [[assistant/Windows]] port** -* Month 11 [[!traillink assistant/chunks]], [[!traillink assistant/deltas]], [[!traillink assistant/gpgkeys]] (pick 2?) +* Month 10 polish [[assistant/Windows]] port +* **Month 11 [[!traillink assistant/chunks]], [[!traillink assistant/deltas]], [[!traillink assistant/gpgkeys]] (pick 2?)** * Month 12 [[!traillink assistant/telehash]] diff --git a/doc/devblog/day_185__service.mdwn b/doc/devblog/day_185__service.mdwn new file mode 100644 index 0000000000..0613ae2bf9 --- /dev/null +++ b/doc/devblog/day_185__service.mdwn @@ -0,0 +1,6 @@ +More work on [[todo/windows_git-annex_service]], but am stuck with a +permissions problem. + +Fixed a bug that prevented two assistants from syncing when there was only +a uni-directional link between them. Only affected direct mode, and +was introduced back when I added the direct mode guard. diff --git a/doc/devblog/day_186__cracked_it.mdwn b/doc/devblog/day_186__cracked_it.mdwn new file mode 100644 index 0000000000..cff6130cbf --- /dev/null +++ b/doc/devblog/day_186__cracked_it.mdwn @@ -0,0 +1,8 @@ +After despairing of ever solving this yesterday (and for the past 6 months +really), I've got the webapp running on Windows with no visible DOS box. +Also have the assistant starting up in the background on login. + +It turns out a service was not the way to do. There is a way to write a VB +Script that runs a "DOS" command in a hidden window, and this is what I +used. Amazing how hard it was to work this out, probably partly because I +don't have the Windows vocabulary to know what to look for. diff --git a/doc/devblog/day_186__cracked_it/comment_1_288b736adf392acd0f45667b2980138d._comment b/doc/devblog/day_186__cracked_it/comment_1_288b736adf392acd0f45667b2980138d._comment new file mode 100644 index 0000000000..d85798eb88 --- /dev/null +++ b/doc/devblog/day_186__cracked_it/comment_1_288b736adf392acd0f45667b2980138d._comment @@ -0,0 +1,11 @@ +[[!comment format=mdwn + username="https://launchpad.net/~maestro-alubia" + nickname="maestro-alubia" + subject="Congratulations!" + date="2014-06-18T09:08:45Z" + content=""" +I really feel with you and I am glad I currently do not need to develop on/for Windows. I wish you good progress with Windows porting, so you can concentrate on the interesting stuff again :) + +Best regards, +Fabian +"""]] diff --git a/doc/devblog/day_186__cracked_it/comment_2_d1d79e93ac420f6b3a6f8a622e8e00bd._comment b/doc/devblog/day_186__cracked_it/comment_2_d1d79e93ac420f6b3a6f8a622e8e00bd._comment new file mode 100644 index 0000000000..d6ade5c01a --- /dev/null +++ b/doc/devblog/day_186__cracked_it/comment_2_d1d79e93ac420f6b3a6f8a622e8e00bd._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://id.clacke.se/" + nickname="Claes" + subject="VBScript + wscript to avoid DOS window" + date="2014-06-21T02:09:58Z" + content=""" +I use this technique too, to run cygwin xterm without an ugly DOS box popup. +"""]] diff --git a/doc/devblog/day_186__cracked_it/comment_3_8ca17a51b10b4e4a63d0672d5ce29024._comment b/doc/devblog/day_186__cracked_it/comment_3_8ca17a51b10b4e4a63d0672d5ce29024._comment new file mode 100644 index 0000000000..356453e8f2 --- /dev/null +++ b/doc/devblog/day_186__cracked_it/comment_3_8ca17a51b10b4e4a63d0672d5ce29024._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://id.clacke.se/" + nickname="Claes" + subject="VBScript + wscript to avoid DOS window" + date="2014-06-21T02:15:04Z" + content=""" +(sorry that I didn't see before that you had run into this annoying problem) +"""]] diff --git a/doc/devblog/day_187__release_prep.mdwn b/doc/devblog/day_187__release_prep.mdwn new file mode 100644 index 0000000000..a5207c373e --- /dev/null +++ b/doc/devblog/day_187__release_prep.mdwn @@ -0,0 +1,10 @@ +Last night, got logging to daemon.log working on Windows. Aside from XMPP +not working (but it's near to being deprecated anyway), and some possible +issues with unicode characters in filenames, the Windows port now seems in +pretty good shape for a beta release. + +Today, mostly worked on fixing the release process so the metadata +accurarely reflects the version from the autobuilder that is included in +the release. Turns out there was version skew in the last release (now +manually corrected). This should avoid that happening again, and also +automates more of my release process. diff --git a/doc/devblog/day_187__release_prep/comment_1_206692d16177c2a9ca11c0eeff545697._comment b/doc/devblog/day_187__release_prep/comment_1_206692d16177c2a9ca11c0eeff545697._comment new file mode 100644 index 0000000000..a9e982a211 --- /dev/null +++ b/doc/devblog/day_187__release_prep/comment_1_206692d16177c2a9ca11c0eeff545697._comment @@ -0,0 +1,13 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawlnoH5btjn_BLib3_IhES5uMhrzuOiwCYo" + nickname="András" + subject="sync options?" + date="2014-06-19T13:16:51Z" + content=""" +What options will we have in this beta for windows <=> windows (local network) and windows <=> linux (remote server) synchronization? I'm interested only in non-cloud sync possibilities. + +(I tried to follow the developments but apparently failed...) + +Also thank you for working on the windows port! + +"""]] diff --git a/doc/devblog/day_187__release_prep/comment_2_961fb35d9cf7d5e518f8d0bddb8626a6._comment b/doc/devblog/day_187__release_prep/comment_2_961fb35d9cf7d5e518f8d0bddb8626a6._comment new file mode 100644 index 0000000000..6abcfb7dd3 --- /dev/null +++ b/doc/devblog/day_187__release_prep/comment_2_961fb35d9cf7d5e518f8d0bddb8626a6._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.203" + subject="comment 2" + date="2014-06-19T22:13:23Z" + content=""" +windows to linux server (local or remote) to windows will work. +"""]] diff --git a/doc/devblog/day_188__back_sans_laptop.mdwn b/doc/devblog/day_188__back_sans_laptop.mdwn new file mode 100644 index 0000000000..080d6176ef --- /dev/null +++ b/doc/devblog/day_188__back_sans_laptop.mdwn @@ -0,0 +1,5 @@ +I am back from the beach, but my dev laptop is dead. A replacement is being +shipped, and I have spent today getting my old netbook into a usable state +so I can perhaps do some work using it in the meantime. + +(Backlog is 95 messages.) diff --git a/doc/devblog/day_189__finally_working_again.mdwn b/doc/devblog/day_189__finally_working_again.mdwn new file mode 100644 index 0000000000..54b72b52b5 --- /dev/null +++ b/doc/devblog/day_189__finally_working_again.mdwn @@ -0,0 +1,18 @@ +Finally back to work with a new laptop! + +Did one fairly major feature today: When using git-annex to pull down +podcasts, metadata from the feed is copied into git-annex's metadata store, +if annex.genmetadata is set. Should be great for views etc! + +Worked through a lot of the backlog, which is down to 47 messages now. + +Only other bug fix of note is a fix on Android. A recent change to git made +it try to chmod files, which tends to fail on the horrible /sdcard +filesystem. Patched git to avoid that. + +For some reason the autobuilder box rebooted while I was away, and +somehow the docker containers didn't come back up -- so they got +automatically rebuilt. But I have to manually finish up building the +android and armel ones. Will be babysitting that build this evening. + +Today's work was sponsored by Ævar Arnfjörð Bjarmason. diff --git a/doc/devblog/day_190__fun_fixes.mdwn b/doc/devblog/day_190__fun_fixes.mdwn new file mode 100644 index 0000000000..d3895df1f4 --- /dev/null +++ b/doc/devblog/day_190__fun_fixes.mdwn @@ -0,0 +1,13 @@ +Spent the morning improving behavior when `commit.gpgsign` is set. +Now git-annex will let gpg sign commits that are made when eg, manually +running `git annex sync`, but not commits implicitly made to the git-annex +branch. And any commits made by the assistant are not gpg signed. This was +slightly tricky, since lots of different places in git-annex ran `git +commit`, `git merge` and similar. + +Then got back to a test I left running over vacation, that added millions +of files to a git annex repo. This was able to reproduce a problem where +`git annex add` blew the stack and crashed at the end. There turned out to +be two different memory issues, one was in git-annex and the other is in +Haskell's core `getDirectoryContents`. Was able to entirely fix it, +eventually. diff --git a/doc/devblog/day_191__semidistracted.mdwn b/doc/devblog/day_191__semidistracted.mdwn new file mode 100644 index 0000000000..3d4b5b6efc --- /dev/null +++ b/doc/devblog/day_191__semidistracted.mdwn @@ -0,0 +1,7 @@ +Got a bit distracted improving Haskell's directory listing code. + +Only real git-annex work today was fixing [[bugs/Assistant_merge_loop]], +which was caused by changes in the last release (that made direct mode +merging crash/interrupt-safe). This is a kind of ugly bug, that can result +in the assistant making lots of empty commits in direct mode repositories. +So, I plan to make a new release on Monday. diff --git a/doc/devblog/day_192__release_day.mdwn b/doc/devblog/day_192__release_day.mdwn new file mode 100644 index 0000000000..ce1a38861c --- /dev/null +++ b/doc/devblog/day_192__release_day.mdwn @@ -0,0 +1,4 @@ +Got the release out. Had to fix various autobuilder issues. The arm autobuilder +is unfortunatly not working currently. + +Updated git-annex to build with a new version of the bloomfilter library. diff --git a/doc/devblog/day_193-194__ugly_bug.mdwn b/doc/devblog/day_193-194__ugly_bug.mdwn new file mode 100644 index 0000000000..668b7b2ab9 --- /dev/null +++ b/doc/devblog/day_193-194__ugly_bug.mdwn @@ -0,0 +1,37 @@ +**Important** A bug [[caused the assistant to sometimes remove all files|bugs/bad_merge_commit_deleting_all_files]] from the git repository. +You should check if your repository is ok. If the bug hit you, it should be +possible to revert the bad commit and recover your files with no data loss. +See the bug report for details. + +This affected git-annex versions since 5.20140613, and only when using the +assistant in direct mode. It should be fixed in today's release, +5.20140709. + +I'm available to help anyone hit by this +unfortunate bug. + +This is another bug in the direct mode merge code. I'm not happy about it. +It's particularly annoying that I can't fix up after it automatically +(because there's no way to know if any given commit in the git history that +deletes all the files is the result of this bug, or a legitimate deletion +of all files). + +The only good thing is that the design of git-annex is pretty robust, and +in this case, despite stupidly committing the deletion of all the files in +the repository, git-annex did take care to preserve all their contents and +so the problem should be able to be resolved without data loss. + +Unfortunately, the main autobuilder is down and I've had to spin up +autobuilders on a different machine (thank goodness that's very automated +now!), and so I have not been able to build the fixed git-annex for android +yet. I hope to get that done later this evening. + +--- + +Yesterday, I fixed a few (much less bad) bugs, and did some thinking about +plans for this month. The [[design/roadmap]] suggests working on some of +[[!traillink design/assistant/chunks]], [[!traillink design/assistant/deltas]] or [[!traillink design/assistant/gpgkeys]]. +I don't know how to do deltas yet really. Chunks is pretty easily done. +The gpg keys stuff is pretty open ended and needs some more work to define +some use cases. But, after today, I am more inclined to want to spend +time on better testing and other means of avoiding this kind of situation. diff --git a/doc/devblog/day_195-196__catching_up.mdwn b/doc/devblog/day_195-196__catching_up.mdwn new file mode 100644 index 0000000000..2c04eaa150 --- /dev/null +++ b/doc/devblog/day_195-196__catching_up.mdwn @@ -0,0 +1,13 @@ +Spent past 2 days catching up on backlog and doing bug triage and some +minor bug fixes and features. Backlog is 27, lowest in quite a while so I +feel well on top of things. + +I was saddened to find [this bug](http://git-annex.branchable.com/bugs/files_lost_during_upgrade/#comment-b265c796b1599d2dde649699cb54fa86) +where I almost managed to analize the [[ugy_bug|day_193-194__ugly_bug]]'s race +condition, but not quite (and then went on vacation). BTW, I have not heard +from anyone else who was hit by that bug so far. + +The linux autobuilders are still down; their host server had a disk crash +in an electrical outage. Might be down for a while. I would not mind +setting up a redundant autobuilder if anyone else would like to donate a +linux VM with 4+ gb of ram. diff --git a/doc/devblog/day_197__autobuilder_rescuscitation.mdwn b/doc/devblog/day_197__autobuilder_rescuscitation.mdwn new file mode 100644 index 0000000000..12dada287d --- /dev/null +++ b/doc/devblog/day_197__autobuilder_rescuscitation.mdwn @@ -0,0 +1,14 @@ +Yay, the Linux autobuilder is back! Also fixed the Windows build. + +Fixed a reversion that prevented the webapp from starting +properly on Windows, which was introduced by some bad locking when I put in +the hack that makes it log to the log file on that platform. + +Various other minor fixes here and there. There are almost enough +to do a release again soon. + +I've also been trying to bootstrap ghc 7.8 on arm, for Debian. There's a script +that's supposed to allow building 7.8 using 7.6.3, dealing with a linker +problem by using the gold linker. Hopefully that will work since otherwise +Debian could remain stuck with an old ghc or worse lose the arm ports. +Neither would be great for git-annex.. diff --git a/doc/devblog/day_198__branching_out.mdwn b/doc/devblog/day_198__branching_out.mdwn new file mode 100644 index 0000000000..cdb3a6d1b6 --- /dev/null +++ b/doc/devblog/day_198__branching_out.mdwn @@ -0,0 +1,23 @@ +I have mostly been thinking about gcrypt today. +[This issue](https://github.com/blake2-ppc/git-remote-gcrypt/issues/9) +needs to be dealt with. The question is, does it really make sense to +try to hide the people a git repository is encrypted for? I have +[posted some thoughts](http://git-annex.branchable.com/bugs/using_gpg_encryption_with_multiple_keys_fails/?updated#comment-0c4f679d972c63b0b25b6aa5e851af62) +and am coming to the viewpoint that obscuring the identities of users +of a repository is not a problem git-annex should try to solve itself, +although it also shouldn't get in the way of someone who is able and +wants to do that (by using tor, etc). + +Finally, I decided to go ahead and add a gcrypt.publish-participants +setting to git-remote-gcrypt, and make git-annex set that by default when +setting up a gcrypt repository. + +Some promising news from the ghc build on arm. I got a working ghc, and +even ghci works. Which would make the template haskell in the webapp etc +avaialble on arm without the current horrible hacks. Have not managed to +build the debian ghc package successfully yet though. + +Also, fixed a bug that made `git annex sync` not pull/push with a local +repository that had not yet been initialized for use with git-annex. + +Today's work was sponsored by Stanley Yamane. diff --git a/doc/devblog/day_198__branching_out/comment_1_91ce3dc707ba1ba7c5d9e57e20ffce40._comment b/doc/devblog/day_198__branching_out/comment_1_91ce3dc707ba1ba7c5d9e57e20ffce40._comment new file mode 100644 index 0000000000..7b9ba45b7d --- /dev/null +++ b/doc/devblog/day_198__branching_out/comment_1_91ce3dc707ba1ba7c5d9e57e20ffce40._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="lex" + ip="2620:149:7:303:796f:ae98:a0a1:94b" + subject="comment 1" + date="2014-07-16T21:13:06Z" + content=""" +glad my bug inspired a blog post about it. =] +"""]] diff --git a/doc/devblog/day_199__ten_minute_cycle.mdwn b/doc/devblog/day_199__ten_minute_cycle.mdwn new file mode 100644 index 0000000000..56b48747e2 --- /dev/null +++ b/doc/devblog/day_199__ten_minute_cycle.mdwn @@ -0,0 +1,6 @@ +Spent hours today in a 10-minute build/test cycle, tracking down a bug that +caused the assistant to crash on Windows after exactly 10 minutes uptime. +Eventually found the cause; this is fallout from last month's work +that got it logging to the debug.log on Windows. + +There was more, but that was the interesting one.. diff --git a/doc/direct_mode/comment_12_7d507b6f87085a19d8dd5014f580922b._comment b/doc/direct_mode/comment_12_7d507b6f87085a19d8dd5014f580922b._comment new file mode 100644 index 0000000000..bc8f006800 --- /dev/null +++ b/doc/direct_mode/comment_12_7d507b6f87085a19d8dd5014f580922b._comment @@ -0,0 +1,24 @@ +[[!comment format=mdwn + username="http://mildred.fr/" + ip="82.247.184.53" + subject="Fixing symlinks to the annex store in direct mode" + date="2014-07-16T06:52:33Z" + content=""" +I have an issue with direct mode: I have tons of symlinks that points to the git-annex store, while in direct mode. After investigation, I found that these files don't seem to be part of the repository. I can check with: + + $ git -c core.bare=false status --porcelain tr.html + ?? Documentation/Mozilla/developer.mozilla.org/tr.html + + $ ls -l tr.html + lrwxrwxrwx 1 mildred mildred 205 10 juin 16:22 tr.html -> ../../../.git/annex/objects/gF/z1/SHA256E-s31895--c873982bd742ba8db6e026afee26b7ab2f75f54f587304d8c2d877db3900c0f6.html/SHA256E-s31895--c873982bd742ba8db6e026afee26b7ab2f75f54f587304d8c2d877db3900c0f6.html + +The link is valid, and is probably pointing to a unused file in the annex store. How to add these files back? + +If I was in indirect mode, I could simply use `git add tr.html` (and **not** `git annex add`). This would stage to the git staging area the symlink, and all would be well. + +I found that in direct mode, the same was true. The command is: + + git -c core.bare=false add tr.html + +The file is added to the repository, and the link is converted to the target file. The question now is why? There is no hook on the add command. Could it be the annex assistant? If that didn't worked, my question would have been: how to checkout a file in direct mode? +"""]] diff --git a/doc/direct_mode/comment_13_5169c5541970d3b3bc1e080e07539b22._comment b/doc/direct_mode/comment_13_5169c5541970d3b3bc1e080e07539b22._comment new file mode 100644 index 0000000000..7d15fca6f8 --- /dev/null +++ b/doc/direct_mode/comment_13_5169c5541970d3b3bc1e080e07539b22._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://mildred.fr/" + ip="82.247.184.53" + subject="Re: Fixing symlinks to the annex store in direct mode" + date="2014-07-16T07:04:08Z" + content=""" +What I said was just wrong. Instead of trying on tr.html, I tried with a copy of that file. But making the copy of that file had the wanted effect, transforming the symlink to the actual file. Probably the assistant monitoring file creation, and transforming indirect file to direct file. Or perhaps the `cp` command follows symlinks by default (I thought it didn't). +"""]] diff --git a/doc/direct_mode/comment_14_03a02e689d92faa596de98e02b2ffe28._comment b/doc/direct_mode/comment_14_03a02e689d92faa596de98e02b2ffe28._comment new file mode 100644 index 0000000000..ce47a5eb8c --- /dev/null +++ b/doc/direct_mode/comment_14_03a02e689d92faa596de98e02b2ffe28._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 14" + date="2014-07-16T17:51:28Z" + content=""" +I kinda wish people would post questions to the forum, and not clutter up this page.. + +Anyway, there have been past bugs in the direct mode code that caused some files to not be checked out in direct mode, but stay as symlinks pointing at the content. That can be fixed by running `git annex fsck`. But, I am not aware of any problem that can leave a git-annex symlink that is not checked into git at all. Perhaps you copied the symlink from another location? +"""]] diff --git a/doc/forum/Android:_Encrypted_Remotes__63__.mdwn b/doc/forum/Android:_Encrypted_Remotes__63__.mdwn new file mode 100644 index 0000000000..b8342392fc --- /dev/null +++ b/doc/forum/Android:_Encrypted_Remotes__63__.mdwn @@ -0,0 +1,3 @@ +Hi, + +Does the Android app support encryption at all? The assistant allows me to create encrypted repositories but it just keeps telling me to install git-remote-gcrypt, which did not work. diff --git a/doc/forum/Android:_Encrypted_Remotes__63__/comment_1_6b16cd372a9bd4f99d4c8b09a82ce3ed._comment b/doc/forum/Android:_Encrypted_Remotes__63__/comment_1_6b16cd372a9bd4f99d4c8b09a82ce3ed._comment new file mode 100644 index 0000000000..3edcc5f900 --- /dev/null +++ b/doc/forum/Android:_Encrypted_Remotes__63__/comment_1_6b16cd372a9bd4f99d4c8b09a82ce3ed._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 1" + date="2014-07-03T19:14:37Z" + content=""" +Encrypted [[special_remotes]] are supported just fine on Android. + +As for storing the [[encrypted git repository itself on a remote|special_remotes/gcrypt]], which is what git-remote-gcrypt is used for, it would need porting that to Android. I don't think that should be very hard (it's just a rather complicated shell script and all the tools it uses are already included in the git-annex bundle). I may eventully end up reimplementing git-remote-gcrypt as part of git-annex in Haskell, since porting it to eg, Windows is likely to be a lot harder.. +"""]] diff --git a/doc/forum/Android_version_does_not_sync.mdwn b/doc/forum/Android_version_does_not_sync.mdwn new file mode 100644 index 0000000000..4c2d288be9 --- /dev/null +++ b/doc/forum/Android_version_does_not_sync.mdwn @@ -0,0 +1,23 @@ +Hey! + +I have got a Kindle Fire HD (2nd generation) and want to use Git Annex to sync my data round. However, it does not sync my data at all (my other setups, e.g. PC or laptop do work quite well). The reason for that seems to be quite simple, but I do not know how to fix that: + +I always get the warning message: + +> TransferScanner crashed: /storage/emulated/legacy/annex/.git/index: copyFile: does not exist (No such file or directory). + +I found the same error in the log: + +> git-annex: /storage/emulated/legacy/annex/.git/index: copyFile: does not exist (No such file or directory) +> ... +> fatal: Run with no arguments or with -c cmd +> git-annex-shell: git-shell failed + +I am using the latest versions for android and arm (server, raspberry pi) from this site from today (13.07.2014) + +http://git-annex.branchable.com/install/ + +I hope somebody can help me. I tried restaring the TransferScanner, restarting git-annex, restarting the OS, resetting the OS (to shipping defaults), nothing helped. + +Cheers, +Stephan diff --git a/doc/forum/Android_version_does_not_sync/comment_1_ed9e33eef2c6d651847dca9d3f7a63f6._comment b/doc/forum/Android_version_does_not_sync/comment_1_ed9e33eef2c6d651847dca9d3f7a63f6._comment new file mode 100644 index 0000000000..589b230c39 --- /dev/null +++ b/doc/forum/Android_version_does_not_sync/comment_1_ed9e33eef2c6d651847dca9d3f7a63f6._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="sts" + ip="134.147.119.104" + subject="comment 1" + date="2014-07-14T09:12:13Z" + content=""" +Ok, I checked and the index file was missing and not sure why, but I had to manually sync one time. So I had to go in the annex folder with the command line and make a \"git annex sync\". It works pretty well now, it seems not to automatically sync my data (have to force it with \"Sync Now\"), but at least I can sync data to my tablet and thats awesome :). +"""]] diff --git a/doc/forum/Android_version_does_not_sync/comment_2_4eafd3e989611f835c489b379bd6ec8a._comment b/doc/forum/Android_version_does_not_sync/comment_2_4eafd3e989611f835c489b379bd6ec8a._comment new file mode 100644 index 0000000000..bf2b412633 --- /dev/null +++ b/doc/forum/Android_version_does_not_sync/comment_2_4eafd3e989611f835c489b379bd6ec8a._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 2" + date="2014-07-14T18:21:15Z" + content=""" +How did you create this repository on the android device? Normally a git repository has an index file, unless it has just been manually created with `git init` and has not yet had anything added to it. When the webapp is used to create a repository, it should always leave it with an index file already present. +"""]] diff --git a/doc/forum/Annex_slow_on_Windows__47__direct_mode.mdwn b/doc/forum/Annex_slow_on_Windows__47__direct_mode.mdwn new file mode 100644 index 0000000000..57247ac5dd --- /dev/null +++ b/doc/forum/Annex_slow_on_Windows__47__direct_mode.mdwn @@ -0,0 +1,11 @@ +I've been using annex for some weeks now and while I more and more love how it behaves on my Linux machines, I just can't get it working on Windows... + +The setup consists of two Ubuntu machines (one being an always-on server) and a Windows laptop I keep for the occasional moment of gaming. My wife's Windows machine is a candidate to join the annex setup, as well as some other computers I still use every now and then. + +The first thing I started annexing was my pictures folder. It consists of about 40k files and occupies about 350GB. The Ubuntu server is running a hidden service as a substitute for a DynDNS with ssh basically the only thing going out/in. First, I couldn't get annex to properly sync its data via TOR, but when I instead set up a directory special remote on the server (with the annex repository there being "bare", i.e. not containing any actual data) I got them to sync as they should. + +Not the Windows machine though. It's just too slow. It seems that on every sync, every add, every anything it scans... well, everything. I added some files and after an hour I checked the resource monitor which files were being accessed and it seemed to be every last one of the files present in the pictures folder. I'm not sure what's going on there, but it's really getting to the point of being a dealbreaker... I think it's something with annex only supporting direct mode repositories on Windows and all files just lying around (as that's really the only large difference between those setups), although I'm of course not entirely sure. + +I'd really like to run annex in indirect mode on Windows. I can't really find any information on that (except those few "official" pages that just state that annex is running in direct mode on Windows). I know that creating symlinks needs elevated priviledges on Windows, but accepting a prompt seems to be much more realistic than waiting hours for a sync. + +So... Is there any way to get indirect running on Windows? And if there isn't, is there any other way to speed up direct mode / Windows performance? diff --git a/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_1_d80839f4582fc2a6269db31e30e1dbab._comment b/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_1_d80839f4582fc2a6269db31e30e1dbab._comment new file mode 100644 index 0000000000..c68c727385 --- /dev/null +++ b/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_1_d80839f4582fc2a6269db31e30e1dbab._comment @@ -0,0 +1,9 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawnOSgFb3l7nL3Fs7Y9gPGJJjFiV7aJ1tek" + nickname="Phil" + subject="Same boat" + date="2014-07-03T19:38:15Z" + content=""" +I'd love to know this too. I'm setting up on 2 Windows 8.1 machines (with a 3rd Windows 7 hopefully joining the party as well as a couple of Linux boxes) but doing anything is really slow. I just ran git annex status on a 50GB, 7000 file Music repo and it took 6 minutes. I've not even setup the remotes yet but as soon as I'd added and sync'd, things slowed down. I'm running on a nippy SSD and CPU usage is around 12%. + +"""]] diff --git a/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_2_593e1e01b70a2b6a15ad6bca09a80c7b._comment b/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_2_593e1e01b70a2b6a15ad6bca09a80c7b._comment new file mode 100644 index 0000000000..0e357f4d6d --- /dev/null +++ b/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_2_593e1e01b70a2b6a15ad6bca09a80c7b._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawnOSgFb3l7nL3Fs7Y9gPGJJjFiV7aJ1tek" + nickname="Phil" + subject="comment 2" + date="2014-07-03T19:39:12Z" + content=""" +Fortunately, git annex sync is pretty quick +"""]] diff --git a/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_3_c4e4c596f31aa97645fe1e1527dc2c31._comment b/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_3_c4e4c596f31aa97645fe1e1527dc2c31._comment new file mode 100644 index 0000000000..a97ccda2e3 --- /dev/null +++ b/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_3_c4e4c596f31aa97645fe1e1527dc2c31._comment @@ -0,0 +1,12 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 3" + date="2014-07-04T20:57:54Z" + content=""" +Yall need to tell me your git-annex versions. [[devblog/day_183__rubbing_sticks_together]] fixed a horrible slowdown that indeed causes git-annex on windows to unnecessarily look at lots of files. + +Also, is this using the git-annex assistant, or using git-annex at the command line that's being slow? + +As to using symlinks on windows, cygwin's build of git is able to handle them somehow. I have not tried to get it working with git-annex, but it seems at least possible that indirect mode could be accomplished that way. +"""]] diff --git a/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_4_92db0b99ada9af15a5383da41397ebd7._comment b/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_4_92db0b99ada9af15a5383da41397ebd7._comment new file mode 100644 index 0000000000..39e472606b --- /dev/null +++ b/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_4_92db0b99ada9af15a5383da41397ebd7._comment @@ -0,0 +1,19 @@ +[[!comment format=mdwn + username="divB" + ip="171.67.172.69" + subject="Also in the same boat" + date="2014-07-07T01:12:18Z" + content=""" +Even worse here. git-annex looked (and still looks) so promising for exactly I want (share >100GB photos/data with my girlfriend which are on my private DSL connected server but each of us should only download whatever he currently needs for offline usage and everything should stay consistent, e.g. is one edits, adds or deletes files). However, after long testing in Windows I gave up. I had so many issues and speed was one of them. So I looked again at other solutions (ownCloud pydio) but they are not good either. unison is one thing that just works perfectly but it is not suited to sync huge stuff where just parts are available on one machine. + +I still put much hope in git-annex that it's useable at some point also in Windows. If there would be another of these kickstarters for that, I'd be in. + +One BIG dealbreaker for me is SSH. It popped up a couple of times already there is inconsistency between ssh.exe, plink.exe and %GIT_SSH%. +But the biggest issue is that ssh.exe in Windows does not do connection sharing: For each single file a new SSH session is created! That way it works only for huge files (movies) where the overhead is small. In my tests I had smaller files, that's just unuseable. + +I know it's a conundrum. unison just leaves one ssh connection open, that would be nice. I know however that this requires bigger changes. But what about for example starting something in background (during a git-annex command) that leaves the SSH session open and pumps data via some IPC? + +Last but not least: links. I agree windows links are unuseable. But would it really be real links? What about just basic *.lnk files? + + +"""]] diff --git a/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_5_3d628c9db9ebdfd5bff92af105c47719._comment b/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_5_3d628c9db9ebdfd5bff92af105c47719._comment new file mode 100644 index 0000000000..9b7b166b3a --- /dev/null +++ b/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_5_3d628c9db9ebdfd5bff92af105c47719._comment @@ -0,0 +1,13 @@ +[[!comment format=mdwn + username="divB" + ip="171.67.172.69" + subject="comment 5" + date="2014-07-07T01:16:21Z" + content=""" +One more thing: integration in TortoiseGit would be sooooooooo great! You would then even be able to let novice computer users use git-annex. + +I added a feature request long time ago but it's on hold: http://code.google.com/p/tortoisegit/issues/detail?id=2166 + +I do hope that git-annex becomes more popular to increase the chance that it will be built into that... + +"""]] diff --git a/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_6_db7965fa928c093233769ed52b2fcd43._comment b/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_6_db7965fa928c093233769ed52b2fcd43._comment new file mode 100644 index 0000000000..90b6094fa8 --- /dev/null +++ b/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_6_db7965fa928c093233769ed52b2fcd43._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="Idhup" + ip="178.175.139.138" + subject="Connection sharing workaround" + date="2014-07-07T10:20:23Z" + content=""" +I had the same issues but was able to work around most of them. I simply created keypairs on my Windows machines that allowed me to log in to my Ubuntu server. Means that while the overhead does make it smaller (I guess), the whole sync process can simply be run in the background without me having to check for a password prompt for 30 minutes, just to miss the short period during which I can enter it. Also, the actual object storage was moved to a directory special remote on the server, so Windows clients can simply automount a samba share and push the content over that line, which is less of a hazzle. + +Also, the speed issue got *much* better when I added all files. I still had a lot of files just lying around on my Windows machine. Once I added them all, the sync process sped up by several magnitudes. So, if https://git-annex.branchable.com/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/ can be solved, I guess I'm happy on Windows. +"""]] diff --git a/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_7_674f52c5e5484207db403b18efc986c6._comment b/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_7_674f52c5e5484207db403b18efc986c6._comment new file mode 100644 index 0000000000..2b87a11e01 --- /dev/null +++ b/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_7_674f52c5e5484207db403b18efc986c6._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="Idhup" + ip="178.175.139.138" + subject="typo" + date="2014-07-07T10:23:23Z" + content=""" +Slower. It's not smaller, it's slower. Gee. +"""]] diff --git a/doc/forum/Best_approach_for_central_sharing_and_multiple_users.mdwn b/doc/forum/Best_approach_for_central_sharing_and_multiple_users.mdwn new file mode 100644 index 0000000000..6fc104cb8f --- /dev/null +++ b/doc/forum/Best_approach_for_central_sharing_and_multiple_users.mdwn @@ -0,0 +1,8 @@ +Just a quick question: Can anyone recomment me a good to handle a centralized repository which is used by different users? + +Requirements: must work in direct mode on both sides, server is Linux, clients are Windows and operated by 2 different users. + +- Should the repository create bare or not? +- Must the repository created on the server or can it also be "pushed" from one client to the server (via SSH on the server)? +- Is there a better way for data transfer than SSH (WebDAV as in SVN)? I am still struggling with an elegant way to handle public keys in windows +- What is the best way to not only keep meta data in sync but also the data each of the users has checked out? diff --git a/doc/forum/Best_approach_for_central_sharing_and_multiple_users/comment_1_48ffb50b92588daec6887bf08f1b97f5._comment b/doc/forum/Best_approach_for_central_sharing_and_multiple_users/comment_1_48ffb50b92588daec6887bf08f1b97f5._comment new file mode 100644 index 0000000000..17860d0372 --- /dev/null +++ b/doc/forum/Best_approach_for_central_sharing_and_multiple_users/comment_1_48ffb50b92588daec6887bf08f1b97f5._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 1" + date="2014-07-11T19:31:52Z" + content=""" +I suggest following this screencast: [[videos/git-annex_assistant_lan]] + +While it talks about a local network, this will also work with a server on the internet. +"""]] diff --git a/doc/forum/Best_approach_for_central_sharing_and_multiple_users/comment_2_6b9a20f9707da9d2cfc3697a538d6935._comment b/doc/forum/Best_approach_for_central_sharing_and_multiple_users/comment_2_6b9a20f9707da9d2cfc3697a538d6935._comment new file mode 100644 index 0000000000..c77e9a8fd1 --- /dev/null +++ b/doc/forum/Best_approach_for_central_sharing_and_multiple_users/comment_2_6b9a20f9707da9d2cfc3697a538d6935._comment @@ -0,0 +1,12 @@ +[[!comment format=mdwn + username="divB" + ip="171.67.173.91" + subject="comment 2" + date="2014-07-11T21:56:29Z" + content=""" +Thanks, great work! + +I wanted to avoid the assistant so far because I feel I do not get so much control (particularly which files are synced to the clients) but I think I'll start with the assistant ... + + +"""]] diff --git a/doc/forum/Comparison_with_other_big_files_solutions.mdwn b/doc/forum/Comparison_with_other_big_files_solutions.mdwn new file mode 100644 index 0000000000..cfbd12d29b --- /dev/null +++ b/doc/forum/Comparison_with_other_big_files_solutions.mdwn @@ -0,0 +1,11 @@ +# Comparison + +Based on my understanding of the http://git-annex.branchable.com/not/ page and of some research, +I have made a draft of an [Online excel document][1] that compares different git file solutions. + +Feel free to edit the document and help the community to understand the different solutions out there. + +[1]: https://onedrive.live.com/redir?resid=C66C90783BD2C185!1200&authkey=!ACF-Ol_mG3DwQ2k&ithint=file%2c.xlsx + +Thank you very much, +Alex diff --git a/doc/forum/Getting_the_status_of_a_remotely_changed_annex_file.mdwn b/doc/forum/Getting_the_status_of_a_remotely_changed_annex_file.mdwn new file mode 100644 index 0000000000..9a2c807992 --- /dev/null +++ b/doc/forum/Getting_the_status_of_a_remotely_changed_annex_file.mdwn @@ -0,0 +1,75 @@ +Hello, + +I am trying to wrap my head around annex still. I'm creating a source local git repo, editing an annex file, and then syncing in a second repo. In that second repo I'm trying to figure out how I can get a status notifying me that a file is out of date. + +If I use 'annex sync --content' the files are all up to date, as expected, but what I kind of expected is 'annex status' to say something like 'files out of date, blah blah'. I am spelling out my example below. + +Annex version is 5.20140613 + + +## I create a source and target repo, and I add a git managed file and an annex managed file + + $ mkdir source target + $ cd source + $ git init + $ git annex init + $ cat > gitfile + hi this is my git file + $ cat > annexfile + hi this is my annex file + $ git add gitfile + $ git annex add annexfile + $ git commit -m 'init commit' + $ cd ../target + $ git clone ../source/ . + $ ls -al + total 16 + drwxr-xr-x 170 Jul 15 15:55 . + drwxr-xr-x 136 Jul 15 15:54 .. + drwxr-xr-x 442 Jul 15 15:55 .git + lrwxr-xr-x 180 Jul 15 15:55 annexfile -> .git/annex/objects/Qp/F0/SHA256E-s25--045cf30cb201c6723cb6fad9ca539f639de7f242b87775b876ef9ccb1f577ccf/SHA256E-s25--045cf30cb201c6723cb6fad9ca539f639de7f242b87775b876ef9ccb1f577ccf + -rw-r--r-- 23 Jul 15 15:55 gitfile + $ git annex sync + ... + To [base path]/target/../source/ + * [new branch] git-annex -> synced/git-annex + * [new branch] master -> synced/master + ok + $ cat gitfile + hi this is my git file + $ cat annexfile + cat: annexfile: No such file or directory + $ git annex sync --content + $ cat annexfile + hi this is my annex file + +## So far so good. Now I'm going to edit my annexed file in source repo and see if I can find out that the file was edited in the target + + $ cd .. + $ cd source + $ git annex edit annexfile + $ cat > annexfile + wow I changed my annex file + $ git annex add annexfile + $ git commit -m 'changed an annex file' + $ cd .. + $ cd target + $ git pull + $ cat annexfile + cat: annexfile: No such file or directory + $ git annex sync + $ ls + annexfile gitfile + $ cat annexfile + cat: annexfile: No such file or directory + $ git annex status + [no output] + +## Here is where I'd expect something saying 'annexfile is out of date', etc. +## I can infer it because the link is missing, but I'm sure there's a more logical way. + + $ git annex sync --content + $ cat annexfile + wow I changed my annex file + +## After I synced content all is well. diff --git a/doc/forum/Getting_the_status_of_a_remotely_changed_annex_file/comment_1_e323c21d27bb0946993ba1438429c457._comment b/doc/forum/Getting_the_status_of_a_remotely_changed_annex_file/comment_1_e323c21d27bb0946993ba1438429c457._comment new file mode 100644 index 0000000000..78b0a9c1e5 --- /dev/null +++ b/doc/forum/Getting_the_status_of_a_remotely_changed_annex_file/comment_1_e323c21d27bb0946993ba1438429c457._comment @@ -0,0 +1,14 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 1" + date="2014-07-16T18:18:00Z" + content=""" +As soon as git-annex syncs with a remote that has made changes to the repository, any new files or files that have been modified, and the content is not yet available in the local repository will be broken symlinks. You can generally easily see a broken symlink by running `ls`, at least with a good `ls` on eg Linux that supports colorization. (Look for the red filenames.) Many file managers also represent broken symlinks in a visual way. + +Or, you can run a command like `git annex whereis $file` and see if it includes \"here\" in the list of locations. + +Or, you can run `git annex find --not --in here` to find all files whose current content is not present. + +The reason `git annex status` doesn't say is that it's focused on showing you which files in the local repository have not yet been committed to git. The `git annex list` command has a similar one line per file output, but puts a \"_\" in the first column (under \"here\") if the file is not locally present. +"""]] diff --git a/doc/forum/Git_Annex_Assistant_won__39__t_backup_files_to_removable_drive/comment_3_f359d9b9356de7ee10b9e725a011cc43._comment b/doc/forum/Git_Annex_Assistant_won__39__t_backup_files_to_removable_drive/comment_3_f359d9b9356de7ee10b9e725a011cc43._comment new file mode 100644 index 0000000000..caec25ffd1 --- /dev/null +++ b/doc/forum/Git_Annex_Assistant_won__39__t_backup_files_to_removable_drive/comment_3_f359d9b9356de7ee10b9e725a011cc43._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawnov5q9_Cl4Ps5NoYE08yE01NLSvBANnY8" + nickname="Eric" + subject="comment 3" + date="2014-07-10T05:50:32Z" + content=""" +Actually, I understand the logic behind encouraging bare repositories. +"""]] diff --git a/doc/forum/How_to_completely_remove_tracking_of_a_deleted_file_in_direct_mode.mdwn b/doc/forum/How_to_completely_remove_tracking_of_a_deleted_file_in_direct_mode.mdwn new file mode 100644 index 0000000000..82fc666a08 --- /dev/null +++ b/doc/forum/How_to_completely_remove_tracking_of_a_deleted_file_in_direct_mode.mdwn @@ -0,0 +1,7 @@ +I am in direct mode (managing music) and have no other repositories than the one I'm in. I would like to delete a file and have git no longer track it at all. + +So far I've manually deleted the file and run "git annex add .", but when I run "git annex status" the file is still marked as deleted. I would like to receive no message whatsoever. + +I tried "git annex drop path" , "git annex unannex path", and everything else I can think of but nothing will get git annex to forget the file. + +I'm sure this is easy, but how do you remove a deleted file in direct mode? diff --git a/doc/forum/How_to_completely_remove_tracking_of_a_deleted_file_in_direct_mode/comment_1_c6bd2ef90516dde928ff18ded36df625._comment b/doc/forum/How_to_completely_remove_tracking_of_a_deleted_file_in_direct_mode/comment_1_c6bd2ef90516dde928ff18ded36df625._comment new file mode 100644 index 0000000000..9b5881ad6b --- /dev/null +++ b/doc/forum/How_to_completely_remove_tracking_of_a_deleted_file_in_direct_mode/comment_1_c6bd2ef90516dde928ff18ded36df625._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="108.236.230.124" + subject="comment 1" + date="2014-07-02T16:57:46Z" + content=""" +git annex sync +"""]] diff --git a/doc/forum/How_to_get_git-annex_to_forget_a_commit__63__.mdwn b/doc/forum/How_to_get_git-annex_to_forget_a_commit__63__.mdwn new file mode 100644 index 0000000000..d5aa71b448 --- /dev/null +++ b/doc/forum/How_to_get_git-annex_to_forget_a_commit__63__.mdwn @@ -0,0 +1,54 @@ +I've done a `git annex add` and `git commit` on my annex which included some files I don't want to add to the annex. I've tried to reverse it all out, but whenever I `git annex add` something, the unwanted files show up in the git-annex branch. + + git init forgetmenot + cd forgetmenot + git commit -m "create" --allow-empty + git annex init fmn + + echo 'foo' > foo + echo 'bar' > bar + + git annex add + git commit -m "add foo" + + git log --oneline --name-only + # 28634c0 add foo + # bar + # foo + # 4a87050 create + + git log --oneline --name-only git-annex + 74e6969 update + 41d/a26/SHA256E-s4--b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c.log + a70/4a5/SHA256E-s4--7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730.log + 95285ed update + uuid.log + 2135e07 branch created + +If you now try to get git-annex to forget by reverting *master* and *git-annex* and only adding/commiting *foo*, the master branch ends up correct, but git-annex magically remembers *bar*! + + git reset --hard HEAD^ + git branch -f git-annex git-annex^ + + echo 'foo' > foo + git annex add + git commit -m "add foo" + + git log --oneline --name-only + # 1b4889e add foo + # foo + # 4a87050 create + + git log --oneline --name-only git-annex + # 3d0b9bc update + # 41d/a26/SHA256E-s4--b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c.log + # a70/4a5/SHA256E-s4--7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730.log + # 2e17a19 update + # uuid.log + # 646776b branch created + +How is git-annex remembering this and how can I get it to completely forget? + +I have tried `git gc --aggressive --prune=all`, `git annex fsck --all` and `git annex drop unused` but somehow, git-annex is remembering bar existed. + +This is an exercise in micro-managing the git-annex branch a bit, but this situation does also cause git-annex to complain about the missing files on fsck (0 out of 2 copies) so it isn't just being a control freak! Honest! :) diff --git a/doc/forum/How_to_get_git-annex_to_forget_a_commit__63__/comment_1_65471c42e163ac8ee6ec109f1397271b._comment b/doc/forum/How_to_get_git-annex_to_forget_a_commit__63__/comment_1_65471c42e163ac8ee6ec109f1397271b._comment new file mode 100644 index 0000000000..44b36ba604 --- /dev/null +++ b/doc/forum/How_to_get_git-annex_to_forget_a_commit__63__/comment_1_65471c42e163ac8ee6ec109f1397271b._comment @@ -0,0 +1,12 @@ +[[!comment format=mdwn + username="CandyAngel" + ip="81.111.193.130" + subject="comment 1" + date="2014-07-17T15:43:03Z" + content=""" +Joey has pointed me to the solution. + +git-annex was remembering these files due to them being present in *.git/annex/index*. + +A simple `rm .git/annex/index` after moving the git-annex branch to the earlier commit prevents the \"ghost\" log files from being recreated and Joey confirmed this is safe to do (git-annex automatically recreates it). +"""]] diff --git a/doc/forum/How_to_make_a_server_store_the_files.mdwn b/doc/forum/How_to_make_a_server_store_the_files.mdwn new file mode 100644 index 0000000000..1af29381f2 --- /dev/null +++ b/doc/forum/How_to_make_a_server_store_the_files.mdwn @@ -0,0 +1 @@ +How can I make one of my servers keep a copy of the files on the server, so I can easily SFTP in and download the files. I don't want to see the .git folder, I want to see the files synced there. diff --git a/doc/forum/How_to_make_a_server_store_the_files/comment_1_20196067475918e788afa0debc4d5ce5._comment b/doc/forum/How_to_make_a_server_store_the_files/comment_1_20196067475918e788afa0debc4d5ce5._comment new file mode 100644 index 0000000000..e653881637 --- /dev/null +++ b/doc/forum/How_to_make_a_server_store_the_files/comment_1_20196067475918e788afa0debc4d5ce5._comment @@ -0,0 +1,9 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="108.236.230.124" + subject="comment 1" + date="2014-07-02T17:18:00Z" + content=""" +Make a non-bare git repository on the server, and make it have a git post-receive hook that runs +\"git annex merge\" +"""]] diff --git a/doc/forum/MegaAnnex_not_working..mdwn b/doc/forum/MegaAnnex_not_working..mdwn new file mode 100644 index 0000000000..3eff4b7414 --- /dev/null +++ b/doc/forum/MegaAnnex_not_working..mdwn @@ -0,0 +1,32 @@ +When copying to a megaannex remote, it hangs after a while, and I get this: + + copy Boomarks/Android (gpg) Traceback (most recent call last): + File "/usr/local/bin//git-annex-remote-mega", line 511, in + common.startRemote() + File "/home/zack/megaannex/lib/CommonFunctions.py", line 557, in startRemote + sys.modules["__main__"].checkpresent(line) + File "/usr/local/bin//git-annex-remote-mega", line 483, in checkpresent + folder = setFolder(conf["folder"], common.ask("DIRHASH " + line[1])) + File "/usr/local/bin//git-annex-remote-mega", line 401, in setFolder + folder = createFolder(conf["folder"], 2) + File "/usr/local/bin//git-annex-remote-mega", line 378, in createFolder + res = m.create_folder(subject, folder) + File "/usr/lib/python2.7/site-packages/mega/mega.py", line 617, in create_folder + 'i': self.request_id}) + File "/usr/lib/python2.7/site-packages/mega/mega.py", line 110, in _api_request + timeout=self.timeout) + File "/usr/lib/python2.7/site-packages/requests/api.py", line 88, in post + return request('post', url, data=data, **kwargs) + File "/usr/lib/python2.7/site-packages/requests/api.py", line 44, in request + return session.request(method=method, url=url, **kwargs) + File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 354, in request + resp = self.send(prep, **send_kwargs) + File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 460, in send + r = adapter.send(request, **kwargs) + File "/usr/lib/python2.7/site-packages/requests/adapters.py", line 250, in send + raise SSLError(e) + requests.exceptions.SSLError: The read operation timed out + (external special remote protocol error, unexpectedly received "" (unable to parse command)) failed + + +Any help would be appreciated, thanks! diff --git a/doc/forum/MegaAnnex_not_working./comment_1_5aa3fd366d4c78ca79bb58005a49791c._comment b/doc/forum/MegaAnnex_not_working./comment_1_5aa3fd366d4c78ca79bb58005a49791c._comment new file mode 100644 index 0000000000..c2e7353dbc --- /dev/null +++ b/doc/forum/MegaAnnex_not_working./comment_1_5aa3fd366d4c78ca79bb58005a49791c._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 1" + date="2014-07-11T19:42:24Z" + content=""" +This looks to me like the connection to Mega fails, so either they have a server down, or a network problem, or perhaps the API that the megaannex remote was relying on might have been removed.. +"""]] diff --git a/doc/forum/Modification_time_of_files_retained_in_synchronized_remote_copies__63__.mdwn b/doc/forum/Modification_time_of_files_retained_in_synchronized_remote_copies__63__.mdwn new file mode 100644 index 0000000000..3cd519a6db --- /dev/null +++ b/doc/forum/Modification_time_of_files_retained_in_synchronized_remote_copies__63__.mdwn @@ -0,0 +1,5 @@ +I've noticed how, when files are synchronized/transferred from one repository (annex?) to another by the assistant, the files in the «remote» repository do no retain the modification time of the original files. +From what I know git does not save file-specific metadata (ownership/timestamps/etc.). +Since I've just started using git-annex, and I'd very much like for backup copies to retain the mtime of the originals, I would like to ask whether I am experiencing a malfunction or whether this is expected behaviour. + +Regards diff --git a/doc/forum/Performance_implications_of_triply_nested_objects_directory.mdwn b/doc/forum/Performance_implications_of_triply_nested_objects_directory.mdwn new file mode 100644 index 0000000000..7a6e548b1f --- /dev/null +++ b/doc/forum/Performance_implications_of_triply_nested_objects_directory.mdwn @@ -0,0 +1,23 @@ +Posting this in case anyone might find it interesting. + +I had noticed impractical and abysmally slow performance when tracking a huge number of files (150k) in a git-annex. In direct mode, the repo was outright unusable, but even in indirect mode, many operations where painfully slow; even operations beyond the well-known offender, «git annex findunused», e.g., the seemingly harmless «git annex info». + +I also noticed that the performance was hugely improved on my (otherwise comparable) machine running btrfs, and I wondered how this might be. From previous benchmarks, I had gained the impression that ext4 and btrfs are on par, performance-wise, and you choose btrfs for the features rather than performance. Now, after trying to update my back-ups via rsync, I have had an idea how the contrast between the two machines might might be accounted for. Specifically, I noted that, after converting my 150k folder into a git-annex repo, ascertaining that the back-up is current via rsync would take ~15 minutes, where it used to take mere seconds before. This could then only be due to the demands on directory traversal introduced by the annex-layout. + +Accordingly, I wanted to see whether the traversal would be something that explains the difference in performance between btrfs and ext4, so I ran a tiny benchmark, traversing the .git folder on my home drive (ext4, SATA) and the backup drive (btrfs, USB3), and I was astounded by the difference: + +zardoz [ /mnt/bak/m-annex ]$ time tree .git >/dev/null + +tree .git >/dev/null 14,23s user 2,78s system 24% cpu 1:09,69 total + +zardoz [ ~/m-annex ]$ time tree .git >/dev/null + +tree .git >/dev/null 26,40s user 0,96s system 1% cpu 23:37,94 total + +While running, I peeked into the io using iotop, and observed around 500K/s during traversal on ext4 vs. 5M/s on btrfs. + +While I was aquainted with the dogma that file-systems hate to have a single folder with a bazillion files, sources on the net seem to indicate that having lots and lots of sparse folders is even worse, and given the one-file-per-folder structure of the annex objects store, this would then potentially explain the heavy thrashing on ext4. + +Something I am wondering now: Which operations in git-annex (or plain git) incite that sort of directory traversal? One candidate which occurred to me is «git annex unused», and the differences in performance between ext4 and btrfs are on the same order as in the above benchmark. Originally, Joey related somewhere that the search in «unused» is expensive; but if traversal is involved, it could actually be that this has even more impact than searching git history. + +In any case, if anyone wants to track a very large number of files via git-annex, ext4 seems to be not the ideal file-system for this. diff --git a/doc/forum/Performance_implications_of_triply_nested_objects_directory/comment_1_068a8f120d188b8fa5d3e5b687fd02dc._comment b/doc/forum/Performance_implications_of_triply_nested_objects_directory/comment_1_068a8f120d188b8fa5d3e5b687fd02dc._comment new file mode 100644 index 0000000000..0a368b3a31 --- /dev/null +++ b/doc/forum/Performance_implications_of_triply_nested_objects_directory/comment_1_068a8f120d188b8fa5d3e5b687fd02dc._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 1" + date="2014-07-14T18:33:25Z" + content=""" +I'm afraid that you're comparing apples (SATA drives) and oranges (USB drives). +"""]] diff --git a/doc/forum/Performance_implications_of_triply_nested_objects_directory/comment_2_cc0f5be21fd1523bdddc7bcf6ff04435._comment b/doc/forum/Performance_implications_of_triply_nested_objects_directory/comment_2_cc0f5be21fd1523bdddc7bcf6ff04435._comment new file mode 100644 index 0000000000..e47565d676 --- /dev/null +++ b/doc/forum/Performance_implications_of_triply_nested_objects_directory/comment_2_cc0f5be21fd1523bdddc7bcf6ff04435._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="zardoz" + ip="78.49.247.112" + subject="comment 2" + date="2014-07-14T19:34:31Z" + content=""" +I suppose you misread something. Note that the 60s traversal was on the (slower) /external/ drive, and the 24minute traversal on the (faster) internal one, so if anything, the results become more pronounced because of the comparison. + +In the meantime I converted the internal drive to btrfs, and the traversal time on SATA is now 30s, as opposed to the >20min on ext. +"""]] diff --git a/doc/forum/Performance_implications_of_triply_nested_objects_directory/comment_3_1133795276371c86cdd52b25a8b20c52._comment b/doc/forum/Performance_implications_of_triply_nested_objects_directory/comment_3_1133795276371c86cdd52b25a8b20c52._comment new file mode 100644 index 0000000000..6b875932d0 --- /dev/null +++ b/doc/forum/Performance_implications_of_triply_nested_objects_directory/comment_3_1133795276371c86cdd52b25a8b20c52._comment @@ -0,0 +1,28 @@ +[[!comment format=mdwn + username="zardoz" + ip="134.147.14.84" + subject="comment 3" + date="2014-07-15T07:29:37Z" + content=""" +The ext-community seems to +[corroborate](http://www.redhat.com/archives/ext3-users/2013-March/msg00007.html) +the observation that having many sparse directories scales extremely +poorly, though this still leaves me curious as to how btrfs deals +with. + +One thing I read is that btrfs stores a secondary index on directories +and uses this index in the readdir() syscall; this secondary index +works in such a way that inodes are likely to be traversed in +sequential on-disk order, while for ext, the readdir() results will be +ordered by inode number, yielding a random access pattern. + +I must confess I’ve always liked to think of the file-system as a +cheap data-base, but apparently that is not such a good idea (i. e., +it’s not cheap at all, in the long run). On the other hand (supposing +that operations like «git annex unused» do indeed work by traversing +the object tree), it probably wouldn’t be easy coming up with a scheme +that scales better. For traversal-bound operations, one might maintain +a database, but it would be a hassle to ensure that this in always in +sync with the file-system. + +"""]] diff --git a/doc/forum/Recover_files__44___annex_stuck.mdwn b/doc/forum/Recover_files__44___annex_stuck.mdwn new file mode 100644 index 0000000000..b3e46471f8 --- /dev/null +++ b/doc/forum/Recover_files__44___annex_stuck.mdwn @@ -0,0 +1,28 @@ +I have a directory with 6TB of data in it. I tried to use git annex to back it up to three 3TB drives, I didn't want to use RAID as it sucks, and I didn't want to use tar as I wanted my files easily available. + +I added my remotes successfully, then I ran ``git annex add .`` + +That mostly worked, although it understandably took ages, although it missed several GB of files here and there. + +Next I tried to do ``git commit -a -m added``, hoping that this would copy all of my files to the remotes. It didn't it just died with the error + + fatal: No HEAD commit to compare with (yet) + fatal: No HEAD commit to compare with (yet) + Stack space overflow: current size 8388608 bytes. + Use `+RTS -Ksize -RTS' to increase it. + +So I freaked out and decided to undo the mess and just go with tar instead, since at this point every git command takes multiple minutes and fails with the same error as above. + +I tried to run ``git anne unannex .``, but I got this error: + +`` +unannex GWAS/by-download-number/27081.log.gz fatal: No HEAD commit to compare with (yet) +`` + +So now I can't do anything without committing the files it seems, and I somehow need to grow the git cache, although when I search online for `+RTS -Ksize -RTS', I get nothing. + +Does anyone know how to increase the cache size, or how to unannex the files without this HEAD error? + +Thanks, + +Mike diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_10_6d85c3ec73ddc0682d9643f4d5eeda70._comment b/doc/forum/Recover_files__44___annex_stuck/comment_10_6d85c3ec73ddc0682d9643f4d5eeda70._comment new file mode 100644 index 0000000000..1a8cca6009 --- /dev/null +++ b/doc/forum/Recover_files__44___annex_stuck/comment_10_6d85c3ec73ddc0682d9643f4d5eeda70._comment @@ -0,0 +1,18 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawmwjQzWgiD7_I3zw-_91rMRf_6qoThupis" + nickname="Mike" + subject="comment 10" + date="2014-06-18T20:15:42Z" + content=""" +``git ls-files --cached | wc -l`` returns: 1882028 + +As far as I can tell, the largest objects in .git/objects are 65kb, there are just a bunch of them (257). Also, my repo contains 1,886,125 files and directories total, most in a single directory (after git annex add completed, that one directory contained 8.3GB of symlinks. + +``git-annex add .`` just completed successfully, I am now running ``git commit -a -m added``, it is chugging away and taking its time. + +Is there an obvious upper limit to the number of files or the total size of files that git annex can handle? For example, is 1 million files too many? How about 6TB? or 9TB? For this repo I think I have a little less than 2m files, and the total size of the repo is greater than 6TB. Is that too much? Should I split it into multiple repos? + +I also have a question just about the utility of git-annex for this purpose. I don't need to backup this data, I just want to have it off the big hard drive and onto a bunch of small drives. I have added 3 4TB drives as remotes and I want all of the data stored on them, I will take them offline and put them in a safe. Ideally my file and directory structure will remain intact as symlinks, and then when I want to access a file in the future, I can run ``git annex get ``, connect the drive that git annex tells me to, and then get that file, use it, and then drop it when I am done. From all of my reading it seems like that is a good usage for git annex, but I want to check with you and see if that makes sense to you. Also, can I just run ``git annex drop --auto --numcopies=1`` to get git annex to move all of the files to my remote repositories? + +Thanks for all of your help, and let me know if there are any other debug steps you would like me to run. I am still waiting for git commit to run, and for an exact repo size for you. +"""]] diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_11_52e799bb6f24a1ebed58fad6cebd3a71._comment b/doc/forum/Recover_files__44___annex_stuck/comment_11_52e799bb6f24a1ebed58fad6cebd3a71._comment new file mode 100644 index 0000000000..d5fc3e7ae6 --- /dev/null +++ b/doc/forum/Recover_files__44___annex_stuck/comment_11_52e799bb6f24a1ebed58fad6cebd3a71._comment @@ -0,0 +1,17 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.203" + subject="comment 11" + date="2014-06-18T20:54:31Z" + content=""" +Ok, my suspicion is that the root problem is having a large number of file in a single directory. That would cause the git tree objects to get big, and it may +be that git-annex somewhere buffers a whole tree object in memory, although I cannot think of where off the top of my head. + +git-annex scales to any size of files (limited only by checksumming time unless you use the WORM backend to avoid checksumming). git-annex tries to scale at least as good as git does to a large quantity of files in a repository. git doesn't handle a million files in a repository very fast, due to a number of issues including how the index works. I have never tested git-annex with more than 1 million files, and not all in the same directory. + +Other than the number of files, your use case seems reasonable. `git annex drop` will drop files that you have already copied to enough of the remotes (using eg, `git-annex copy`). + +Above you show a git-annex add failing after 5 files. I suspect you truncated that output, and it processed rather more files. git-annex only says \"(Recording state in git...)\" once it's added all the files, or after it's added around 10 thousand files and still has more to do). It seems to have failed at the point where the files are staged into the index. + +I'm building a 2 million file in one directory repo on a fast server now to see if I can reproduce this. +"""]] diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_12_686a285bc7e950aae67856c47e7cb21e._comment b/doc/forum/Recover_files__44___annex_stuck/comment_12_686a285bc7e950aae67856c47e7cb21e._comment new file mode 100644 index 0000000000..0428dfd309 --- /dev/null +++ b/doc/forum/Recover_files__44___annex_stuck/comment_12_686a285bc7e950aae67856c47e7cb21e._comment @@ -0,0 +1,18 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawmwjQzWgiD7_I3zw-_91rMRf_6qoThupis" + nickname="Mike" + subject="comment 12" + date="2014-06-18T22:28:27Z" + content=""" +Yes, you are right. ``git-annex add`` got through almost all of the files in the first run, which I did a week ago, I am not sure how long it took, several days I think (which is fine, time isn't that important here). + +I re-ran ``git-annex add .`` yesterday after having trouble with ``git commit``, which is when I uncovered these problems. I think you are right that the problem appears when git-annex is staging files into the index. No problems occurred during checksumming or moving files. + +Also, the repo isn't as large as I thought, it if 4.1TB, so it makes sense that the issue is number of files, not files size. + +``git add`` and ``git commit`` are now working fine, all git operations (e.g. ``git status``) are now taking around 30s to 1 min, which is acceptable. + +I am going to try and move the data to the remotes now. Is there anything special I need to do since the remotes are smaller than the current repo? The remotes are just single drives with ext4 filesystems and an empty repo on them. I ideally want to fill each drive as much as possible, and have the current repo contain no files, how do I do that? Can I just run ``git-annex move --to mito_backup1`` and then when it is full run a second command of ``git-annex move --to mito_backup2``. Is it better to use ``git-annex copy`` instead of ``move`` and then use ``drop`` after? + +Thanks! +"""]] diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_13_a4d62d494b340458e6535d573bade965._comment b/doc/forum/Recover_files__44___annex_stuck/comment_13_a4d62d494b340458e6535d573bade965._comment new file mode 100644 index 0000000000..e68933b5c7 --- /dev/null +++ b/doc/forum/Recover_files__44___annex_stuck/comment_13_a4d62d494b340458e6535d573bade965._comment @@ -0,0 +1,12 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.203" + subject="comment 13" + date="2014-06-18T22:43:08Z" + content=""" +It will be faster to use `git annex move`, assuming you want to only have 1 copy of each file, and not more. git-annex will stop storing files on a drive once it gets close to full (annex.diskreserve), and you can safely interrupt it and switch to the next drive. + +Do you have any special git configuration? In particular I'm curious about any annex.queuesize setting, which if set to something really high would make `git annex add` buffer a lot of filenames and stage them all at once. (However, I just noticed that annex.queuesize didn't cause as large a queue to be used as intended, so it would need to have been set to some really enormous value to run it out of stack space.) + +Also, see [[scalability]]. +"""]] diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_14_c10f0fe1440ccd170804a433db2267ee._comment b/doc/forum/Recover_files__44___annex_stuck/comment_14_c10f0fe1440ccd170804a433db2267ee._comment new file mode 100644 index 0000000000..71c8d239db --- /dev/null +++ b/doc/forum/Recover_files__44___annex_stuck/comment_14_c10f0fe1440ccd170804a433db2267ee._comment @@ -0,0 +1,12 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawmwjQzWgiD7_I3zw-_91rMRf_6qoThupis" + nickname="Mike" + subject="comment 14" + date="2014-06-18T22:51:28Z" + content=""" +As far as I know I am using the defaults, I didn't customize anything. I am thinking of switching to the WORM backend though as I think it will make things a little faster, but I haven't done that yet. + +Also, I actually compiled cabal-install with the ghc flag ``-rtsopts`` and git-annex with flags ``-rtsopts -with-rtsopts=-K1000m``. Due to the amount of memory available, I am not worried if git-annex leaks memory and uses 1GB of memory during operations, but I have been watching it with htop, and its memory usage is usually very small. + + +"""]] diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_15_14446cafac6c33a3f95b5344c42c0bef._comment b/doc/forum/Recover_files__44___annex_stuck/comment_15_14446cafac6c33a3f95b5344c42c0bef._comment new file mode 100644 index 0000000000..bc1faa82cf --- /dev/null +++ b/doc/forum/Recover_files__44___annex_stuck/comment_15_14446cafac6c33a3f95b5344c42c0bef._comment @@ -0,0 +1,14 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawmwjQzWgiD7_I3zw-_91rMRf_6qoThupis" + nickname="Mike" + subject="comment 15" + date="2014-06-19T21:19:01Z" + content=""" +Everything seems to be working fine now, but I have another question: + +Is there any way to speed up the copying of many small files? It looks like git-annex is calling rsync for each individual file, which is very fast for large files, but on my directories with many small files, the total speed is working on to just a few MB an hour - it has only transferred 1GB in the last 4 hours. + +I am using the WORM backed with the ``-b WORM`` flag, but I wonder if there is a different move method implemented? For example many calls to ``mv`` will be much faster than many calls to ``rsync``. + +Thanks! +"""]] diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_16_63c19f58b7e95e39ba25a735bdcc0bcf._comment b/doc/forum/Recover_files__44___annex_stuck/comment_16_63c19f58b7e95e39ba25a735bdcc0bcf._comment new file mode 100644 index 0000000000..c55edddf97 --- /dev/null +++ b/doc/forum/Recover_files__44___annex_stuck/comment_16_63c19f58b7e95e39ba25a735bdcc0bcf._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.203" + subject="comment 16" + date="2014-06-19T22:16:21Z" + content=""" +git-annex could be made to always use cp for local transfers, see Remote/Git.hs rsyncOrCopyFile and change `ifM (sameDeviceIds src dest) (docopy, dorsync)` to just `docopy` + +However, I doubt that will be a significant speedup. It's more likely that the overhead around copying a file and updating the location tracking etc adds up with millions of small files. +"""]] diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_17_8e5c7572ab8d1f0e41fedf6f805b942a._comment b/doc/forum/Recover_files__44___annex_stuck/comment_17_8e5c7572ab8d1f0e41fedf6f805b942a._comment new file mode 100644 index 0000000000..4761bcf3ab --- /dev/null +++ b/doc/forum/Recover_files__44___annex_stuck/comment_17_8e5c7572ab8d1f0e41fedf6f805b942a._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawmwjQzWgiD7_I3zw-_91rMRf_6qoThupis" + nickname="Mike" + subject="comment 17" + date="2014-06-21T01:56:48Z" + content=""" +Would git-annex be able to detect if I manually moved some files? At this point it looks like the transfer will take multiple weeks... if I just moved the files from .git/annex directly from one repo to the other I could make the transfer significantly faster, but would that corrupt the repo? +"""]] diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_18_e5357c63107f79571bd3ff609b4406a7._comment b/doc/forum/Recover_files__44___annex_stuck/comment_18_e5357c63107f79571bd3ff609b4406a7._comment new file mode 100644 index 0000000000..0398980b44 --- /dev/null +++ b/doc/forum/Recover_files__44___annex_stuck/comment_18_e5357c63107f79571bd3ff609b4406a7._comment @@ -0,0 +1,26 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 18" + date="2014-07-04T18:03:54Z" + content=""" +You can manually move files and use `git annex fsck`, but it is not likely to be any faster. + +--- + +After letting a 2 million file import run while I was away on vacation, I came back to it, and it indeed ran out of memory: + +
+add 999996 ok
+add 999997 ok
+(Recording state in git...)
+[2014-06-21 11:49:28 JEST] feed: xargs [\"-0\",\"git\",\"--git-dir=/home/joey/tmp/r/.git\",\"--work-tree=/home/joey/tmp/r\",\"add\",\"--\"]
+add 999998 ok
+add 999999 ok
+[2014-06-21 11:49:49 JEST] read: git [\"--git-dir=/home/joey/tmp/r/.git\",\"--work-tree=/home/joey/tmp/r\",\"diff\",\"--name-only\",\"--diff-filter=T\",\"-z\",\"--\",\".\"]
+(Recording state in git...)
+[2014-06-21 11:52:24 JEST] feed: xargs [\"-0\",\"git\",\"--git-dir=/home/joey/tmp/r/.git\",\"--work-tree=/home/joey/tmp/r\",\"add\",\"--\"]
+Stack space overflow: current size 8388608 bytes.
+Use `+RTS -Ksize -RTS' to increase it.
+
+"""]] diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_19_3316652073710f39965cd49ceea5c4ff._comment b/doc/forum/Recover_files__44___annex_stuck/comment_19_3316652073710f39965cd49ceea5c4ff._comment new file mode 100644 index 0000000000..828b07d41f --- /dev/null +++ b/doc/forum/Recover_files__44___annex_stuck/comment_19_3316652073710f39965cd49ceea5c4ff._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 19" + date="2014-07-04T18:18:41Z" + content=""" +[[bugs/runs_of_of_memory_adding_2_million_files]] +"""]] diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_1_d605f755c363d56cf5f1060ad06ee173._comment b/doc/forum/Recover_files__44___annex_stuck/comment_1_d605f755c363d56cf5f1060ad06ee173._comment new file mode 100644 index 0000000000..18c1c0e9bb --- /dev/null +++ b/doc/forum/Recover_files__44___annex_stuck/comment_1_d605f755c363d56cf5f1060ad06ee173._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.203" + subject="comment 1" + date="2014-06-18T16:22:13Z" + content=""" +What version of git-annex are you using? And what version of git? Is your git-annex repository in direct mode or indirect mode? +"""]] diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_2_f3ee184a4d3b8d82a8a362a6c03a54a3._comment b/doc/forum/Recover_files__44___annex_stuck/comment_2_f3ee184a4d3b8d82a8a362a6c03a54a3._comment new file mode 100644 index 0000000000..7c46785bf2 --- /dev/null +++ b/doc/forum/Recover_files__44___annex_stuck/comment_2_f3ee184a4d3b8d82a8a362a6c03a54a3._comment @@ -0,0 +1,54 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawmwjQzWgiD7_I3zw-_91rMRf_6qoThupis" + nickname="Mike" + subject="Frustrating" + date="2014-06-18T16:29:31Z" + content=""" +OK, this is a little frustrating. I found this post from three years ago: [[http://git-annex.branchable.com/forum/Problems_with_large_numbers_of_files/]] and I decided to try a newer version of git-annex. + +I uninstalled ghc and haskell from Scientific Linux because all of these Red Hat based distros have ancient packages. + +I installed the latest git from source, the latest ghc linux x86_64 binary, and then the latest haskell platform from source. Then I used cabal to install all dependencies for git annex with ``cabal install --only-dependencies git-annex``. Finally I installed git annex from source. + +I then tried to run ``git-annex add .`` in my directory and got the following error: + + #> git annex add . + add AllStudies.txt.csv.gz ok + add GWAS/action.txt.gz ok + add GWAS/archive/dump2.txt.gz ok + add GWAS/archive/dump3.txt.gz ok + add GWAS/by-download-number/27080.log.gz ok + (Recording state in git...) + Stack space overflow: current size 8388608 bytes. + Use `+RTS -Ksize -RTS' to increase it. + + +Ok, I was hoping that the latest version would just work, no luck. So I did what it told me to: + +``git-annex +RTS -K1000000 -RTS add .`` + +That gave the error: + +`` + git-annex: Most RTS options are disabled. Link with -rtsopts to enable them. +`` + +Grr. + +So I went into the Makefile and added the line ``-rtsopts -with-rtsopts=\"-K1000m\"`` after every call to ghc I could find. I also added ``ghc-options: -with-rtsopts=\"-K100000\"`` to my ~/.cabal/config file. + +Now when I run ``make`` I get this error: + + + if [ \"cabal \" = ./Setup ]; then ghc --make Setup; fi + cabal configure + cabal: Most RTS options are disabled. Link with -rtsopts to enable them. + make: *** [Build/SysConfig.hs] Error 1 + + +Do I have to manually compile the entire Haskell Platform with the -rtsopts flag in order to get this to work? + +I can't find any easy-to-follow information anywhere that shows me how to just increase the memory limit. My server has 48 cores, 192GB of memory, over 1TB of scratch space, and over 60TB of storage. I really want to be able to use git-annex to easily move files from our large RAID arrays onto archive drives, and be able to intelligently get that data back whenever I want, I don't understand why I am being limited to 8MB of memory for this. + +Any advice would be fantastic, thank you. +"""]] diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_3_341b47663d133411587ec70ef2b178c6._comment b/doc/forum/Recover_files__44___annex_stuck/comment_3_341b47663d133411587ec70ef2b178c6._comment new file mode 100644 index 0000000000..77a7c93c8b --- /dev/null +++ b/doc/forum/Recover_files__44___annex_stuck/comment_3_341b47663d133411587ec70ef2b178c6._comment @@ -0,0 +1,14 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawmwjQzWgiD7_I3zw-_91rMRf_6qoThupis" + nickname="Mike" + subject="Version" + date="2014-06-18T16:32:32Z" + content=""" +Hi Joeyh, + +Thanks for the reply. I am using git version 2.0.0.390.gcb682f8, not sure what version of git-annex, but I downloaded it from github about 20 minutes ago. + +Thanks! + +-Mike +"""]] diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_4_66c0d9284d5edbac189a64b03c4fe50a._comment b/doc/forum/Recover_files__44___annex_stuck/comment_4_66c0d9284d5edbac189a64b03c4fe50a._comment new file mode 100644 index 0000000000..5d153e2481 --- /dev/null +++ b/doc/forum/Recover_files__44___annex_stuck/comment_4_66c0d9284d5edbac189a64b03c4fe50a._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.203" + subject="comment 4" + date="2014-06-18T16:35:29Z" + content=""" +You can find out the version of git-annex by running: git-annex version + +You can find out if your repository is in direct or indirect mode by running: git config annex.direct +"""]] diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_5_8b32f6597f447f88bee7a80698fb4df6._comment b/doc/forum/Recover_files__44___annex_stuck/comment_5_8b32f6597f447f88bee7a80698fb4df6._comment new file mode 100644 index 0000000000..cf656f3eae --- /dev/null +++ b/doc/forum/Recover_files__44___annex_stuck/comment_5_8b32f6597f447f88bee7a80698fb4df6._comment @@ -0,0 +1,18 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawmwjQzWgiD7_I3zw-_91rMRf_6qoThupis" + nickname="Mike" + subject="Versions" + date="2014-06-18T16:40:14Z" + content=""" +``git-annex version`` returns: + + git-annex version: 5.20140618-gc2f1c63 + build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash + key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL + remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external + local repository version: unknown + supported repository version: 5 + upgrade supported from repository versions: 0 1 2 4 + +``git config annex.direct`` exits with error code 1 and doesn't return any information, however I never explicitly set direct mode, and the repository is all symlinked, so my assumption is that it is in indirect mode. Would direct mode be better for such a large repo? +"""]] diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_6_4cc81169e99a453cdb6e83e57e638f37._comment b/doc/forum/Recover_files__44___annex_stuck/comment_6_4cc81169e99a453cdb6e83e57e638f37._comment new file mode 100644 index 0000000000..52e04dfc85 --- /dev/null +++ b/doc/forum/Recover_files__44___annex_stuck/comment_6_4cc81169e99a453cdb6e83e57e638f37._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawmwjQzWgiD7_I3zw-_91rMRf_6qoThupis" + nickname="Mike" + subject="Reinstall GHC or Cabal?" + date="2014-06-18T16:49:35Z" + content=""" +Do I need to reinstall ghc or cabal with rtsopts enabled somehow in order to be able to compile git-annex with -K1000m? +"""]] diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_7_2d104cf4682e04906f8ca0ced7288cf1._comment b/doc/forum/Recover_files__44___annex_stuck/comment_7_2d104cf4682e04906f8ca0ced7288cf1._comment new file mode 100644 index 0000000000..6ea7b45f64 --- /dev/null +++ b/doc/forum/Recover_files__44___annex_stuck/comment_7_2d104cf4682e04906f8ca0ced7288cf1._comment @@ -0,0 +1,17 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.203" + subject="comment 7" + date="2014-06-18T17:14:40Z" + content=""" +Ok, so the repository is in indirect mode, and this rules out a large quantity of problems that could have been caused by direct mode (no, I don't recommend using direct mode). + +If you want to build git-annex with the +RTS option enabled, you just need to pass -rtsopts to ghc when building git-annex. (Not -with-rtsopts ...) +That *might* let you pump up the memory and bypass whatever the problem is, or at least find out how much memory it's trying to allocate, which might be a useful clue. But I would be much more interested in debugging and fixing the actual problem, since git-annex should not normally need to allocate a 8+ mb chunk of memory. + +The \"No HEAD commit to compare with (yet)\" failure mode was removed from git in 2011. You must have been using old versions of git and git-annex before you upgraded. Perhaps they have left the repository in some broken state. + +What size does `du -hsc .git/objects` report? How about `du -h .git/index`? + +Are git commands that do not involve git-annex still taking a long time to run or failing in some way? (Note that `git commit` has a hook that runs git-annex; you can bypass that with `git commit --no-verify`) +"""]] diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_8_d356c4fce9f1197e5292f9dedf85bbc9._comment b/doc/forum/Recover_files__44___annex_stuck/comment_8_d356c4fce9f1197e5292f9dedf85bbc9._comment new file mode 100644 index 0000000000..df1af4f06b --- /dev/null +++ b/doc/forum/Recover_files__44___annex_stuck/comment_8_d356c4fce9f1197e5292f9dedf85bbc9._comment @@ -0,0 +1,22 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawmwjQzWgiD7_I3zw-_91rMRf_6qoThupis" + nickname="Mike" + subject="comment 8" + date="2014-06-18T17:31:58Z" + content=""" +The git available through yum is git 1.7.1, which looks like it was released in 2010 or earlier. (I really wish I had a different version of linux on this server). It is possible that in some way screwed up the repo. + +I figured out how to compile cabal and git-annex with rtsopts, so I can now set higher memory levels, but I am happy to help debug the problem too, as I would really love a fully functional git-annex. + +git commands now run quickly, thanks to the new git I think. + +``du -hsc .git/objects`` returns: ``8.1G .git/objects`` + +``du -h .git/index`` returns: ``437M .git/index`` + +I am currently running the command ``git-annex +RTS -K1000m -RTS add .``, it is chugging away doing something, but is not printing any messages yet after 11 minutes of running, it is a 6TB directory though, and there are a lot of concurrent IO operations on that disk right now. + +I am also running ``du -h --max-depth=1`` on the root repo directory, and also ``find | wc -l``, so that I can tell you the exact size of the dir and the total number of files too. These operations combined may take more than an hour though, I will send details when the commands complete. + +Let me know if you want me to stop the ``git-annex +RTS -K1000m -RTS add .`` command and run git-annex some other way. +"""]] diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_9_856c7e1575f5d99530ecd54004315487._comment b/doc/forum/Recover_files__44___annex_stuck/comment_9_856c7e1575f5d99530ecd54004315487._comment new file mode 100644 index 0000000000..c092d99f50 --- /dev/null +++ b/doc/forum/Recover_files__44___annex_stuck/comment_9_856c7e1575f5d99530ecd54004315487._comment @@ -0,0 +1,12 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.203" + subject="comment 9" + date="2014-06-18T17:36:44Z" + content=""" +Both of those du's look extremely large. How many files are listed by `git ls-files --cached | wc -l` ? + +I don't think that there's any point in running `git annex add` while you're still having some problem. I am curious though how much memory the git-annex add you have running has used. + +If I were you, I'd look in .git/objects for large files (> 100kb, say). +"""]] diff --git a/doc/forum/Restricting_SSH_+_supply_key.mdwn b/doc/forum/Restricting_SSH_+_supply_key.mdwn new file mode 100644 index 0000000000..59dd72fdc6 --- /dev/null +++ b/doc/forum/Restricting_SSH_+_supply_key.mdwn @@ -0,0 +1,7 @@ +Just two very simple questions: + +1.) Is there a way to restrict the SSH key for git annex by supplying a command= ? Even better, is it also possible to supply a directory in which the repository is? (I do not want chroot - too complicated but a soft check would be sufficient for me). + +2.) Can I tell git and git-ssh which pubkey to use WITHOUT changing system-/user wide config (e.g.., .ssh/*)? If it is indeed not possible, what's the best way to do it in Windows? + +Thanks! diff --git a/doc/forum/Restricting_SSH_+_supply_key/comment_10_8bbd0b6488c23ce8b182bd6b1765c94b._comment b/doc/forum/Restricting_SSH_+_supply_key/comment_10_8bbd0b6488c23ce8b182bd6b1765c94b._comment new file mode 100644 index 0000000000..2bcf658b96 --- /dev/null +++ b/doc/forum/Restricting_SSH_+_supply_key/comment_10_8bbd0b6488c23ce8b182bd6b1765c94b._comment @@ -0,0 +1,11 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="ooooh" + date="2014-07-16T22:21:36Z" + content=""" +Thank *you* for taking the time to figure that out! + +I agree on moving the .vbs files. I have done so. (Well, you have to run the git-annex-uninstall.exe to remove the old ones, but that shouldn't matter.) +Testing of an autobuild would be appreciated. +"""]] diff --git a/doc/forum/Restricting_SSH_+_supply_key/comment_1_cac35ac1ac0b300ddfac5ffc74291bce._comment b/doc/forum/Restricting_SSH_+_supply_key/comment_1_cac35ac1ac0b300ddfac5ffc74291bce._comment new file mode 100644 index 0000000000..edcb5307e6 --- /dev/null +++ b/doc/forum/Restricting_SSH_+_supply_key/comment_1_cac35ac1ac0b300ddfac5ffc74291bce._comment @@ -0,0 +1,12 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 1" + date="2014-07-10T19:41:54Z" + content=""" +1. Yes, use [[git-annex-shell]]. + +2. The best way to do this is to use a dummy hostname in the git url for the remote. Then in .ssh/config, you can add a Host stanza that sets the real Hostname and also specifies the IdentityFile to use for that host. + +Incidentially, the git-annex webapp takes care of both of these things for you automatically when setting up a remote on a ssh server. +"""]] diff --git a/doc/forum/Restricting_SSH_+_supply_key/comment_2_e9803dd1794b4d078efa9435ff5ba295._comment b/doc/forum/Restricting_SSH_+_supply_key/comment_2_e9803dd1794b4d078efa9435ff5ba295._comment new file mode 100644 index 0000000000..e3ae82116e --- /dev/null +++ b/doc/forum/Restricting_SSH_+_supply_key/comment_2_e9803dd1794b4d078efa9435ff5ba295._comment @@ -0,0 +1,19 @@ +[[!comment format=mdwn + username="divB" + ip="171.67.173.91" + subject="comment 2" + date="2014-07-11T21:43:11Z" + content=""" +Hey Joey, + +Cool, that's great! Thanks! + +As for the client side. I assume you probably don't know too much about the git setup on Windows ... but maybe (or someone else has an idea :) + +1.) The ssh client config for git is \"c:\Program Files (x86)\Git\etc\ssh\ssh_config\" which is *very* unhandy since it's system wide! If it would at least be in the user profile ... (as mentioned, within the \".git\" directory of the repository would be the best) + +2.) Even if I create a \"Host\" and use \"IdentityFile\", ssh still queries the agent! This is absolutely unwanted and slows down things! I have a particular key \"git-annex.key\" and *only* this should be tried - no agent. The reason why the agent is especially problematic for me is that I use a special agent which \"locks\" itself after some inactivity and requires to re-enter the passwords. + +Thank you! + +"""]] diff --git a/doc/forum/Restricting_SSH_+_supply_key/comment_3_1c3beb859e76cb69d2bacd2473ec72b7._comment b/doc/forum/Restricting_SSH_+_supply_key/comment_3_1c3beb859e76cb69d2bacd2473ec72b7._comment new file mode 100644 index 0000000000..5412405e7e --- /dev/null +++ b/doc/forum/Restricting_SSH_+_supply_key/comment_3_1c3beb859e76cb69d2bacd2473ec72b7._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 3" + date="2014-07-14T20:20:28Z" + content=""" +Re the ssh config on Windows, my windows VM has a per-user .ssh/config inside c:\Documents and Settings\$user. This is where the assistant stores configurations so I know it works. + +The soution to ssh still trying to use the agent is probably to set \"IdentitiesOnly yes\" in the stanza for a host. This is what the assistant does, anyway. +"""]] diff --git a/doc/forum/Restricting_SSH_+_supply_key/comment_4_1c541fc9a44e5cfb13c7d3ef0eeba2c7._comment b/doc/forum/Restricting_SSH_+_supply_key/comment_4_1c541fc9a44e5cfb13c7d3ef0eeba2c7._comment new file mode 100644 index 0000000000..cba554860f --- /dev/null +++ b/doc/forum/Restricting_SSH_+_supply_key/comment_4_1c541fc9a44e5cfb13c7d3ef0eeba2c7._comment @@ -0,0 +1,23 @@ +[[!comment format=mdwn + username="divB" + ip="128.12.90.218" + subject="comment 4" + date="2014-07-15T03:11:18Z" + content=""" +Hi Joey, + +Sorry that I bother so much with this. +Thank you so much for your answer. At least with the command line it works now. I had it in %USERPROFILE%/.ssh/ssh_config (where I think it's supposed to be) rather than %USERPROFILE%/.ssh/config. In this file I have a stanza \"Host annex\" with Hostname, Port and IdentityFile set. When I call \"ssh annex\" from the command line everything works. It seems that it also works when I use e.g. \"git annex sync\" from the command line. + +However, if I use the webapp, the daemon.log is full of: + + Please make sure you have the correct access rights + and the repository exists. + ssh: Could not resolve hostname annex: hostname nor servname provided, or not known + fatal: Could not read from remote repository. + +Is it possible that the assistant ignores the ssh config or does something differently? + +Thanks again! + +"""]] diff --git a/doc/forum/Restricting_SSH_+_supply_key/comment_5_4dbd5605f2638de0a3edfb3886a47938._comment b/doc/forum/Restricting_SSH_+_supply_key/comment_5_4dbd5605f2638de0a3edfb3886a47938._comment new file mode 100644 index 0000000000..26792873d1 --- /dev/null +++ b/doc/forum/Restricting_SSH_+_supply_key/comment_5_4dbd5605f2638de0a3edfb3886a47938._comment @@ -0,0 +1,22 @@ +[[!comment format=mdwn + username="divB" + ip="128.12.90.218" + subject="comment 5" + date="2014-07-15T04:03:16Z" + content=""" +After some debugging I found another weird thing which is I think the reason. If I execute + git annex get file.jpg + +everything works. But if I do + + \"c:\program files (x86)\git\bin\git.exe\" annex get file.jpg + +it fails, claiming it can't connect to host \"annex\". I found that there are 3 (!) git.exe installed. When I choose + + \"c:\program files (x86)\git\cmd\git.exe\" annex get file.jpg + +it works again. When I use \"which git\" in cygwin, it also points me to the \"cmd/git.exe\" version. +So I think this is a bug and git annex assistant should call the executeable in \"cmd\" rather than \"bin\". +Why are there three versions of git.exe at all (one more is in directory libexec/git-core)? + +"""]] diff --git a/doc/forum/Restricting_SSH_+_supply_key/comment_6_a9c5b424a6acb2da152bf87b2e7617bb._comment b/doc/forum/Restricting_SSH_+_supply_key/comment_6_a9c5b424a6acb2da152bf87b2e7617bb._comment new file mode 100644 index 0000000000..ef15c43a28 --- /dev/null +++ b/doc/forum/Restricting_SSH_+_supply_key/comment_6_a9c5b424a6acb2da152bf87b2e7617bb._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 6" + date="2014-07-15T19:20:13Z" + content=""" +msgit seems to install it in both places, I am not sure why. Either one works ok when I try to use them. The msgit installer puts \"c:\program files (x86)\git\cmd\\" into PATH so I assume that's the one you're supposed to use. +"""]] diff --git a/doc/forum/Restricting_SSH_+_supply_key/comment_7_93b7c2a5947fb6904c88cd5c120e404c._comment b/doc/forum/Restricting_SSH_+_supply_key/comment_7_93b7c2a5947fb6904c88cd5c120e404c._comment new file mode 100644 index 0000000000..caeec29e59 --- /dev/null +++ b/doc/forum/Restricting_SSH_+_supply_key/comment_7_93b7c2a5947fb6904c88cd5c120e404c._comment @@ -0,0 +1,16 @@ +[[!comment format=mdwn + username="divB" + ip="128.12.90.218" + subject="comment 7" + date="2014-07-15T20:33:07Z" + content=""" +Thanks Joey, + +The problem is more that git-annex assistant takes the wrong (which is in \"bin\" rather than \"cmd\"). I think this is a bug. Because this way the connection does not work in git-annex assistant the same way it does not work with the version in \"bin\" ... + +I think when git-annex assistant just calls the git.exe from path (which should be cmd/git.exe) then it should work. + +Regards +Niki + +"""]] diff --git a/doc/forum/Restricting_SSH_+_supply_key/comment_8_beaa350751eca4642545d1b83e528dd7._comment b/doc/forum/Restricting_SSH_+_supply_key/comment_8_beaa350751eca4642545d1b83e528dd7._comment new file mode 100644 index 0000000000..0d236d5e58 --- /dev/null +++ b/doc/forum/Restricting_SSH_+_supply_key/comment_8_beaa350751eca4642545d1b83e528dd7._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 8" + date="2014-07-16T18:10:09Z" + content=""" +git-annex only ever runs git from PATH; I never hardcode paths to programs. + +You can verify this by running it with the --debug flag to see the exact commands it runs. +"""]] diff --git a/doc/forum/Restricting_SSH_+_supply_key/comment_9_2faceeaf0d39f82e5d624eae19e4ca53._comment b/doc/forum/Restricting_SSH_+_supply_key/comment_9_2faceeaf0d39f82e5d624eae19e4ca53._comment new file mode 100644 index 0000000000..8ed240a818 --- /dev/null +++ b/doc/forum/Restricting_SSH_+_supply_key/comment_9_2faceeaf0d39f82e5d624eae19e4ca53._comment @@ -0,0 +1,31 @@ +[[!comment format=mdwn + username="divB" + ip="204.17.143.10" + subject="comment 9" + date="2014-07-16T20:54:54Z" + content=""" +Hi Joey, + +Thanks for taking care about all these Windows troubles (Windows and POSIX is unfortunately a big mess). + +I finally found the issue now and maybe the bug is related to msysgit. I guess you don't know too much about it so I will report to the msysgit folks. + +However, there is still an (easy to fix) \"bug\" related to git-annex I think. I shortly describe the issue and a possible fix: + +1.) As mentioned above, from the 3 git.exe, only the one in \"cmd\" should be called! It seems to be a wrapper for the \"bin\"-version. If the git.exe from \"bin\" is called something with the environment is wrong (e.g., ssh_config can not be found) + +2.) cmd/git.exe is in %PATH% so usually no problem + +3.) However, git-annex-autostart.vbs is in \"bin\" folder. Therefore, when called from there PWD is the \"bin\" folder and when calling \"git.exe\" without absolute path, this overwrites %PATH% because it's the current directory (of course, such behavior does not appear on UNIX). + +4.) Now the git-annex assistant daemon always calls the wrong git.exe resulting in a broken config + + +Short term fix for users: Create a shortcut to git-annex-autostart.vbs and change the working directory to anything else + +Long term fix for git-annex option 1: Do a chdir in the vbs file before calling git. This is not so good because where to? + +Long term fix for git-annex option 2: Just place the vbs files in the parent directory (where \"Git Bash.vbs\" is). This looks like the cleanest solution to me. + + +"""]] diff --git a/doc/forum/Sending_requests_across_the_network.mdwn b/doc/forum/Sending_requests_across_the_network.mdwn new file mode 100644 index 0000000000..db53224776 --- /dev/null +++ b/doc/forum/Sending_requests_across_the_network.mdwn @@ -0,0 +1,15 @@ +Hi, + +Is it possible to have git-annex send requests across the repository network? Say I have a network topology like this: +Home (annex) <-> Cloud (S3) <-> Laptop (annex) + +Home has all files, cloud has zero, and laptop has subset of files. Let's also assume Laptop can't talk to Home directly (maybe it's behind a NAT), but both Home and Laptop are connected to the internet. +If I'm away on my laptop, can I retrieve a file from Home "through" Cloud? + +That is, Laptop checking its remotes and none of them have the file I want, so it checks remotes of remotes, etc. I'm not sure if git-annex knows the topology (seems likely considering it can generate the graphviz image). It also seems there is a communication medium of Jabber/XMPP where it could communicate between internet-connected git-annex servers (which might not otherwise be able to talk to each other directly)? So the fact that Cloud isn't a git-annex server, just a dumb key/value store would be okay? + +I realize that I could set it up so Home mirrors everything to Cloud and then that eventually mirrors over to Laptop, but let's assume both Cloud and Laptop have small storage capacities, so on-demand fetching would be needed. + +This is basically the same usecase as the USB transfer drive to sync two annexes not on the same network, but automated. + +Thanks! diff --git a/doc/forum/Sending_requests_across_the_network/comment_1_8ff713d4c968705061bf2044ea0fe5a0._comment b/doc/forum/Sending_requests_across_the_network/comment_1_8ff713d4c968705061bf2044ea0fe5a0._comment new file mode 100644 index 0000000000..8cb4575c10 --- /dev/null +++ b/doc/forum/Sending_requests_across_the_network/comment_1_8ff713d4c968705061bf2044ea0fe5a0._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://ypid.wordpress.com/" + ip="213.153.84.215" + subject="preferred content …" + date="2014-07-02T07:26:59Z" + content=""" +Hi + +This can be accomplished with the use of [[/preferred_content/]]. +"""]] diff --git a/doc/forum/Sending_requests_across_the_network/comment_2_cb29e5346a8775d87d30b18b7fc005a7._comment b/doc/forum/Sending_requests_across_the_network/comment_2_cb29e5346a8775d87d30b18b7fc005a7._comment new file mode 100644 index 0000000000..87e6976fe9 --- /dev/null +++ b/doc/forum/Sending_requests_across_the_network/comment_2_cb29e5346a8775d87d30b18b7fc005a7._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="108.236.230.124" + subject="comment 2" + date="2014-07-02T17:25:51Z" + content=""" +The network topology shown has only a S3 special remote connecting the two repositories. This only provides a place to store file contents, it does not allow syncing the contents of git repositories. + +You need either XMPP(Jabber) for that, or a git remote on some other server. Once there is a way for the git repository to sync, the Home repository will see when Laptop is missing a file it wants (configured via the preferred content mentioned above), and upload it to S3. +"""]] diff --git a/doc/forum/Somehow_have_lots_of_directories_in_root:_000...ffff.mdwn b/doc/forum/Somehow_have_lots_of_directories_in_root:_000...ffff.mdwn new file mode 100644 index 0000000000..3d93d80269 --- /dev/null +++ b/doc/forum/Somehow_have_lots_of_directories_in_root:_000...ffff.mdwn @@ -0,0 +1,22 @@ +I'm using git-annex to manage my photos on my laptop, and have my NAS (which is just a debian linux system with lots of disks) as one of my remotes. I use my NAS as a backup, and to free up space on my laptop. + +But somehow I now have lots of directories in my main root directory of the photos directory. it looks like [0-9a-f][0-9a-f][0-9a-f], so I have 000, ... a00, ... ddd, ..., all the way to fff. Thousands of them. Each one has a few directories that also match [0-9a-f][0-9a-f][0-9a-f], and each one has a file with names of the git annex object filename. + +e.g.: + + $ cat e1d/760/SHA256-s4061375--7909e266f340ff8bc692e073e776ceda267042adf790275a2d851f2c7eb1ca83.log + 1338931894.759394s 1 1adfa84c-af51-11e1-b075-0b1206d553bc + 1338992164.202818s 1 721d82ae-afbb-11e1-b78f-f396ebf52c05 + 1339862991.346546s 1 721d82ae-afbb-11e1-b78f-f396ebf52c05 + 1339946933.224915s 1 224d85b4-b86f-11e1-b11e-3333ce526126 + 1339964057.205993s 1 224d85b4-b86f-11e1-b11e-3333ce526126 + 1343495865.083951s 1 721d82ae-afbb-11e1-b78f-f396ebf52c05 + 1344788941.403528s 1 721d82ae-afbb-11e1-b78f-f396ebf52c05 + 1351802706.679542s 1 721d82ae-afbb-11e1-b78f-f396ebf52c05 + 1362423729.820711s 1 721d82ae-afbb-11e1-b78f-f396ebf52c05 + +My remote (NAS) has these files & directories as well as my laptop. The regular photo directory hierarchy is there as well, the files work, can be copied etc. "git status" say nothing has changed. Those files are tracked by git (they have lot messages). Everything just works, it's just that there's loads of these directories? Can I remove them? How can I clear it up? I can't remember when these directories/files were added, I only noticed it today. + +I don't know if I had my remote (NAS) as a bare git repo and used it as that, then somehow used it as a non-bare one, would that cause this? + +Can I remove them? Where did they come from? What's going on? diff --git a/doc/forum/Somehow_have_lots_of_directories_in_root:_000...ffff/comment_1_20147b287fd995fa8ac9e868b5974d8a._comment b/doc/forum/Somehow_have_lots_of_directories_in_root:_000...ffff/comment_1_20147b287fd995fa8ac9e868b5974d8a._comment new file mode 100644 index 0000000000..1f5018e34a --- /dev/null +++ b/doc/forum/Somehow_have_lots_of_directories_in_root:_000...ffff/comment_1_20147b287fd995fa8ac9e868b5974d8a._comment @@ -0,0 +1,12 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 1" + date="2014-07-10T19:50:38Z" + content=""" +The files that you describe are normally tucked away on the git-annex branch of the git repository, where they're neither seen nor heard. + +The most likely cause of your problem would be if you have done a \"git checkout git-annex\" ... or worse, a \"git merge git-annex\". + +So, check what branch you have checked out, and if it's the git-annex branch, you'll want to change back to master. If you've got master checked out and have these files, you can use `git log --stat` and see if there's a commit that added a bunch of these files to your master branch. Then you can revert that commit. +"""]] diff --git a/doc/forum/Ssh_remote_on_NAS.mdwn b/doc/forum/Ssh_remote_on_NAS.mdwn new file mode 100644 index 0000000000..27bca5a510 --- /dev/null +++ b/doc/forum/Ssh_remote_on_NAS.mdwn @@ -0,0 +1,34 @@ +Hello, + +I finally have git annex working on my NAS (QNAP TS-119P II) thanks to the stand-alone arm pre-build package. + +I've just extracted all the files on my NAS and I've linked all the exec files from the git-annex.linux folder to links placed in a path folder, so that I can run git annex everywhere on the NAS. + + [~] # git annex version + git-annex version: 5.20140528-g92a0591 + build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash + key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL + remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external + +Now I'm trying to set it up as an SSH remote of my laptop repository, but I get this error: + + git clone ssh://admin@nas:/share/HDA_DATA/myDir ./ + Cloning into '.'... + admin@nas's password: + sh: git-upload-pack: command not found + fatal: Could not read from remote repository. + + Please make sure you have the correct access rights + and the repository exists. + +I've checked that git-upload-pack is available both on my laptop and on the NAS and the "myDir" folder is supposed to be readable for the admin user on the NAS, even if the user I use on the laptop and on the NAS for git annex is different from the one I use to login. In fact, if I try to scp files from the annex folder then I don't get any permissions error. + + scp admin@192.168.132.66:/share/HDA_DATA/myDir/* ./ + admin@192.168.132.66's password: + doctest 100% 5 0.0KB/s 0.0KB/s 00:00 + doctest2 100% 51 0.1KB/s 0.1KB/s 00:01 + +Is there something else I should look at, in order to fix it and make it work? + +Thanks, +Fabio diff --git a/doc/forum/Ssh_remote_on_NAS/comment_1_1dd8a0d0e70a1fb36fce62e89c99b404._comment b/doc/forum/Ssh_remote_on_NAS/comment_1_1dd8a0d0e70a1fb36fce62e89c99b404._comment new file mode 100644 index 0000000000..6563a9bb60 --- /dev/null +++ b/doc/forum/Ssh_remote_on_NAS/comment_1_1dd8a0d0e70a1fb36fce62e89c99b404._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 1" + date="2014-07-11T19:46:05Z" + content=""" +How did you set your PATH? Note that the bash shell provides a lot of dotfiles which you can set the PATH in -- and reuses to read any single one of them when a noninteractive login is made to run a command. + +It might help to install git on the NAS. It's included in the git-annex tarball, but not in a way that will put it on PATH; only in a way that will let git-annex use it. +"""]] diff --git a/doc/forum/Ssh_remote_on_NAS/comment_2_261601313d8825c52322949b8509bc74._comment b/doc/forum/Ssh_remote_on_NAS/comment_2_261601313d8825c52322949b8509bc74._comment new file mode 100644 index 0000000000..1cc8fb4443 --- /dev/null +++ b/doc/forum/Ssh_remote_on_NAS/comment_2_261601313d8825c52322949b8509bc74._comment @@ -0,0 +1,16 @@ +[[!comment format=mdwn + username="feulif" + ip="20.133.1.1" + subject="comment 2" + date="2014-07-15T18:03:56Z" + content=""" +> How did you set your PATH? Note that the bash shell provides a lot of dotfiles which you can set the PATH in -- and reuses to read any single one of them when a noninteractive login is made to run a command. + +Actually I didn't set the PATH: I've just sim-linked executable files from git-annex stand-alone folder to a directory that was in my PATH already. + +> It might help to install git on the NAS. It's included in the git-annex tarball, but not in a way that will put it on PATH; only in a way that will let git-annex use it. + +It was installed, bud I've removed it because it was \"conflicting\" with the one used by git-annex. That is, when I ran any \"git annex ...\" command, git was complaining it could not find git-annex (because my nas was running the installed git binary file). +Without git, I don't have this conflict anymore and I can effectively use git-annex when I'm logged in my NAS, but I still can't add it as an SSH remote. + +"""]] diff --git a/doc/forum/Ssh_remote_on_NAS/comment_3_ed602f4f972b78bce4f62bdfca8cfe47._comment b/doc/forum/Ssh_remote_on_NAS/comment_3_ed602f4f972b78bce4f62bdfca8cfe47._comment new file mode 100644 index 0000000000..7ddb9dc8de --- /dev/null +++ b/doc/forum/Ssh_remote_on_NAS/comment_3_ed602f4f972b78bce4f62bdfca8cfe47._comment @@ -0,0 +1,11 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 3" + date="2014-07-15T18:55:58Z" + content=""" +I don't think it was a good idea to remove git from the NAS. To set up a git remote, you necessarily need to have git installed on the remote. + +`git annex` should work as long as git-annex is somewhere in PATH -- unless your build of git is very strange and does not check PATH for git-foo commands. +Even if this was the case, you could run `git-annex` instead. +"""]] diff --git a/doc/forum/Standard_groups__47__preferred_contents.mdwn b/doc/forum/Standard_groups__47__preferred_contents.mdwn new file mode 100644 index 0000000000..89e2b848c7 --- /dev/null +++ b/doc/forum/Standard_groups__47__preferred_contents.mdwn @@ -0,0 +1,14 @@ +Sorry that I am not stop asking questions - I am trying to wrap my head around annex still - and I do not fully understand the standard groups/preferred contents yet. + + +First, basic: Is the "preferred content group" an attribute of a repository or of a remote? E.g., when I use assistant, I can set this property for a *remote* repository. Will this property be synced to all other clients then or is it only valid for this particular client? + +Second, I think the standard groups do still not cover what I want and I wonder if this could be done with preferred contents somehow? What I want: + +* Generally only the structure should be synced, no contents (i.e. "manual" is the closest) + +* When I (manually) do "git annex get" on a file this file should be synced whenever it changes locally *or* remotely (until I drop it again). Currently it seems that when it changes remotely, it is "dropped" again so I need to manually use "git annex get" again + +* When I (manually) do "git annex get" on a directory, it should be (recursively) synced whenever it or any file changes locally or remotely (until I drop it again). Currently nothing seems to sync at all in this case (except the meta data) + +Thanks! diff --git a/doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant/comment_2_f9eef3019fe690e90c1228d62a16f70a._comment b/doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant/comment_2_f9eef3019fe690e90c1228d62a16f70a._comment new file mode 100644 index 0000000000..7f761419c5 --- /dev/null +++ b/doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant/comment_2_f9eef3019fe690e90c1228d62a16f70a._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawnNqLKszWk9EoD4CDCqNXJRIklKFBCN1Ao" + nickname="maurizio" + subject="even a client repository you had once but have now deleted" + date="2014-07-09T22:08:44Z" + content=""" +if this client repository has been deleted, why does it still have an impact? What is the user supposed to do to use a transfer repository if some day another client which was deleted has existed? + +Old repositories seem to remain for ever in the webapp. You can try to delete them with the webapp, they will stay there. You can disable them, they will stay there. If you want to try to delete them again in the webapp, you first have to enable them again and nothing ever happens. There seems to be basically no way to delete repositories which have some day existed... +"""]] diff --git a/doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant/comment_3_7fb74f7fab6c1baff4ffc270cf15ef0a._comment b/doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant/comment_3_7fb74f7fab6c1baff4ffc270cf15ef0a._comment new file mode 100644 index 0000000000..df8333cb3c --- /dev/null +++ b/doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant/comment_3_7fb74f7fab6c1baff4ffc270cf15ef0a._comment @@ -0,0 +1,15 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 3" + date="2014-07-11T19:29:06Z" + content=""" +The webapp certianly allows deleting repositories. + +But, you can always go in and manually do it: + +
+git annex dead $uuid
+git annex group $uuid unwanted
+
+"""]] diff --git a/doc/forum/View_performance_with_7__44__000_files.mdwn b/doc/forum/View_performance_with_7__44__000_files.mdwn new file mode 100644 index 0000000000..21491c77f5 --- /dev/null +++ b/doc/forum/View_performance_with_7__44__000_files.mdwn @@ -0,0 +1,26 @@ +I've imported about half of my photos into an annex on an external HDD, +using metadata extensively for EXIF info, including place names. + +Checking out a new view is slower than I expected, at ~6 minutes. +Is this expected behavior, am I pushing the limits of file count already? + +Is there anything I can do to speed things up? + + % ls -1 | wc -l + 7050 + + % git branch -vv + git-annex 4e590d4 update + * master 985ba54 add jen's phone backups + views/Year=_;Month=_;Address=_ 795a58b refs/heads/views/Year=_;Month=_;Address=_ + + % /usr/bin/time -p git annex view "Year=*" "Address=*" + view (searching...) + + Checking out files: 100% (12789/12789), done. + Switched to branch 'views/Year=_;Address=_' + ok + real 376.80 + user 17.98 + sys 9.66 + diff --git a/doc/forum/View_performance_with_7__44__000_files/comment_1_e45ea752100d09d29efb6136a722eab3._comment b/doc/forum/View_performance_with_7__44__000_files/comment_1_e45ea752100d09d29efb6136a722eab3._comment new file mode 100644 index 0000000000..cf6f140b2a --- /dev/null +++ b/doc/forum/View_performance_with_7__44__000_files/comment_1_e45ea752100d09d29efb6136a722eab3._comment @@ -0,0 +1,34 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawmvzzyDA8uXFz8yokeCrepbh8PwWe_WrjE" + nickname="Michael" + subject="debug output" + date="2014-06-16T14:17:06Z" + content=""" +So after looking for a debug flag, I see that it's spending all its time in cat-file, which I guess is probably not a surprise: + + % /usr/bin/time -p git annex view \"Year=*\" \"Address=*\" -d + view [2014-06-16 06:29:12 PDT] read: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"symbolic-ref\",\"HEAD\"] + [2014-06-16 06:29:12 PDT] read: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"show-ref\",\"refs/heads/master\"] + [2014-06-16 06:29:12 PDT] read: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"symbolic-ref\",\"HEAD\"] + [2014-06-16 06:29:12 PDT] read: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"show-ref\",\"refs/heads/master\"] + (searching...) + [2014-06-16 06:29:12 PDT] read: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"ls-files\",\"--cached\",\"-z\",\"--\",\"/Volumes/Four TB Backup/Photos\"] + [2014-06-16 06:29:12 PDT] feed: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"update-index\",\"-z\",\"--index-info\"] + [2014-06-16 06:29:12 PDT] chat: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"hash-object\",\"-w\",\"--stdin-paths\",\"--no-filters\"] + [2014-06-16 06:29:12 PDT] read: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"show-ref\",\"git-annex\"] + [2014-06-16 06:29:12 PDT] read: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"] + [2014-06-16 06:29:12 PDT] read: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"log\",\"refs/heads/git-annex..4e590d433e01886e2823c3316d18b7e3cbafe227\",\"--oneline\",\"-n1\"] + [2014-06-16 06:29:12 PDT] chat: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"cat-file\",\"--batch\"] + [2014-06-16 06:34:54 PDT] read: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"write-tree\"] + [2014-06-16 06:34:55 PDT] chat: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"commit-tree\",\"c0fd1ea9ccae70a7353a2e787089b88115a42b7a\"] + [2014-06-16 06:34:55 PDT] call: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"update-ref\",\"refs/heads/views/Year=_;Address=_\",\"249c37d78e45d1fccfcb00f40337e05cb69fb64c\"] + + [2014-06-16 06:34:55 PDT] call: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"checkout\",\"views/Year=_;Address=_\"] + Checking out files: 100% (12789/12789), done. + Switched to branch 'views/Year=_;Address=_' + ok + real 362.14 + user 18.16 + sys 7.70 + +"""]] diff --git a/doc/forum/View_performance_with_7__44__000_files/comment_2_b1942eed65e9b5c046095a094191a38c._comment b/doc/forum/View_performance_with_7__44__000_files/comment_2_b1942eed65e9b5c046095a094191a38c._comment new file mode 100644 index 0000000000..91259f3351 --- /dev/null +++ b/doc/forum/View_performance_with_7__44__000_files/comment_2_b1942eed65e9b5c046095a094191a38c._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="108.236.230.124" + subject="comment 2" + date="2014-06-16T17:52:34Z" + content=""" +View's don't scale to lots of files yet. Discussed in [[design/caching_database]] +"""]] diff --git a/doc/forum/View_performance_with_7__44__000_files/comment_3_e6e19339c9d72cf8eaae32ef4269e850._comment b/doc/forum/View_performance_with_7__44__000_files/comment_3_e6e19339c9d72cf8eaae32ef4269e850._comment new file mode 100644 index 0000000000..01ac676cbf --- /dev/null +++ b/doc/forum/View_performance_with_7__44__000_files/comment_3_e6e19339c9d72cf8eaae32ef4269e850._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawmvzzyDA8uXFz8yokeCrepbh8PwWe_WrjE" + nickname="Michael" + subject="comment 3" + date="2014-06-16T18:19:20Z" + content=""" +@joeyh, thanks - is that code all up to date here: https://github.com/joeyh/git-annex/tree/database ? + +I'd be interested in helping test it. +"""]] diff --git a/doc/forum/Want_to_stop_using_Git-Annex.mdwn b/doc/forum/Want_to_stop_using_Git-Annex.mdwn new file mode 100644 index 0000000000..a076cf1b06 --- /dev/null +++ b/doc/forum/Want_to_stop_using_Git-Annex.mdwn @@ -0,0 +1,9 @@ +Hi + +I created a git annex repo in one of my drives. But now all my files have turned into symbolic links. +I need to remove the git repo and get my files back. How can I do that. + +Some of the softwares am using will not follow symbolic links, so need put the files back properly as soon as possible. + +Please help. +Thank you in advance :) diff --git a/doc/forum/Want_to_stop_using_Git-Annex/comment_1_32e37515bd4f5d22ff9aedd3c9d98046._comment b/doc/forum/Want_to_stop_using_Git-Annex/comment_1_32e37515bd4f5d22ff9aedd3c9d98046._comment new file mode 100644 index 0000000000..9937e5d0ca --- /dev/null +++ b/doc/forum/Want_to_stop_using_Git-Annex/comment_1_32e37515bd4f5d22ff9aedd3c9d98046._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://ypid.wordpress.com/" + ip="213.153.84.215" + subject="Direct mode" + date="2014-06-27T07:36:40Z" + content=""" +Hi + +[[direct_mode/]] is your friend. +"""]] diff --git a/doc/forum/Want_to_stop_using_Git-Annex/comment_2_e29e6d052ef3677ad7d5615721f3fe33._comment b/doc/forum/Want_to_stop_using_Git-Annex/comment_2_e29e6d052ef3677ad7d5615721f3fe33._comment new file mode 100644 index 0000000000..0eddeb201c --- /dev/null +++ b/doc/forum/Want_to_stop_using_Git-Annex/comment_2_e29e6d052ef3677ad7d5615721f3fe33._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="108.236.230.124" + subject="comment 2" + date="2014-07-02T17:04:29Z" + content=""" +git annex uninit +"""]] diff --git a/doc/forum/Where_is_the_content__63__.mdwn b/doc/forum/Where_is_the_content__63__.mdwn new file mode 100644 index 0000000000..0d79bbb093 --- /dev/null +++ b/doc/forum/Where_is_the_content__63__.mdwn @@ -0,0 +1,8 @@ +On Android 4.4.4, I can install the most recent git annex. I want to join a git annex running on my linux server. Git annex on android seems to be able to contact remote, and it asks if I want to 'merge' with it. I hope that did not mean erase the remote. Anyway, the sync says it is proceeding, but when it is done, I cannot find a folder with remote copies of files. + +I figure either it worked, or it destroyed my remote. + +After new install, I have folders /sdcard/annex and /sdcard/git-annex.home. I don't find a new folder with name of remote repo, don't understand why. + +Help? + diff --git a/doc/forum/Where_is_the_content__63__/comment_1_812e1cf740cbfa449ab3ef4dd5f2df08._comment b/doc/forum/Where_is_the_content__63__/comment_1_812e1cf740cbfa449ab3ef4dd5f2df08._comment new file mode 100644 index 0000000000..423bd82d28 --- /dev/null +++ b/doc/forum/Where_is_the_content__63__/comment_1_812e1cf740cbfa449ab3ef4dd5f2df08._comment @@ -0,0 +1,132 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawkpIIYg6Fl7OFsOHVPEchZYj68A3dk4lVg" + nickname="Paul" + subject="install log" + date="2014-07-15T12:02:59Z" + content=""" +Installation starting to /data/data/ga.androidterm +ac90d4f57076a59cac3a8017b89ac9b5ab4e5021 +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-show to git +linking ./libexec/git-core/git-cherry-pick to git +linking ./libexec/git-core/git-revert to git +linking ./libexec/git-core/git-rerere to git +linking ./libexec/git-core/git to git +linking ./libexec/git-core/git-cat-file to git +linking ./libexec/git-core/git-archive to git +linking ./libexec/git-core/git-apply to git +linking ./libexec/git-core/git-repack to git +linking ./libexec/git-core/git-replace to git +linking ./libexec/git-core/git-verify-pack to git +linking ./libexec/git-core/git-name-rev to git +linking ./libexec/git-core/git-grep to git +linking ./libexec/git-core/git-format-patch to git +linking ./libexec/git-core/git-log to git +linking ./libexec/git-core/git-read-tree to git +linking ./libexec/git-core/git-fast-export to git +linking ./libexec/git-core/git-mktag to git +linking ./libexec/git-core/git-cherry to git +linking ./libexec/git-core/git-stage to git +linking ./libexec/git-core/git-blame to git +linking ./libexec/git-core/git-help to git +linking ./libexec/git-core/git-tag to git +linking ./libexec/git-core/git-column to git +linking ./libexec/git-core/git-clone to git +linking ./libexec/git-core/git-pack-redundant to git +linking ./libexec/git-core/git-rev-list to git +linking ./libexec/git-core/git-ls-files to git +linking ./libexec/git-core/git-update-index to git +linking ./libexec/git-core/git-merge-tree to git +linking ./libexec/git-core/git-shortlog to git +linking ./libexec/git-core/git-pack-refs to git +linking ./libexec/git-core/git-fsck to git +linking ./libexec/git-core/git-mv to git +linking ./libexec/git-core/git-index-pack to git +linking ./libexec/git-core/git-upload-archive to git +linking ./libexec/git-core/git-unpack-file to git +linking ./libexec/git-core/git-merge-recursive to git +linking ./libexec/git-core/git-checkout to git +linking ./libexec/git-core/git-mailsplit to git +linking ./libexec/git-core/git-whatchanged to git +linking ./libexec/git-core/git-remote-fd to git +linking ./libexec/git-core/git-fsck-objects to git +linking ./libexec/git-core/git-diff to git +linking ./libexec/git-core/git-diff-tree to git +linking ./libexec/git-core/git-check-ref-format to git +linking ./libexec/git-core/git-status to git +linking ./libexec/git-core/git-annotate to git +linking ./libexec/git-core/git-bisect--helper to git +linking ./libexec/git-core/git-mktree to git +linking ./libexec/git-core/git-check-ignore to git +linking ./libexec/git-core/git-clean to git +linking ./libexec/git-core/git-merge to git +linking ./libexec/git-core/git-var to git +linking ./libexec/git-core/git-get-tar-commit-id to git +linking ./libexec/git-core/git-remote-ext to git +linking ./libexec/git-core/git-stripspace to git +linking ./libexec/git-core/git-send-pack to git +linking ./libexec/git-core/git-fetch to git +linking ./libexec/git-core/git-ls-remote to git +linking ./libexec/git-core/git-init to git +linking ./libexec/git-core/git-notes to git +linking ./libexec/git-core/git-commit to git +linking ./libexec/git-core/git-receive-pack to git +linking ./libexec/git-core/git-prune to git +linking ./libexec/git-core/git-update-server-info to git +linking ./libexec/git-core/git-gc to git +linking ./libexec/git-core/git-show-ref to git +linking ./libexec/git-core/git-merge-subtree to git +linking ./libexec/git-core/git-describe to git +linking ./libexec/git-core/git-branch to git +linking ./libexec/git-core/git-checkout-index to git +linking ./libexec/git-core/git-prune-packed to git +linking ./libexec/git-core/git-ls-tree to git +linking ./libexec/git-core/git-hash-object 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-verify-tag to git +linking ./libexec/git-core/git-diff-files to git +linking ./libexec/git-core/git-check-attr to git +linking ./libexec/git-core/git-mailinfo to git +linking ./libexec/git-core/git-check-mailmap to git +linking ./libexec/git-core/git-fetch-pack to git +linking ./libexec/git-core/git-diff-index to git +linking ./libexec/git-core/git-add to git +linking ./libexec/git-core/git-config to git +linking ./libexec/git-core/git-merge-ours to git +linking ./libexec/git-core/git-symbolic-ref to git +linking ./libexec/git-core/git-init-db to git +linking ./libexec/git-core/git-pack-objects to git +linking ./libexec/git-core/git-rm to git +linking ./libexec/git-core/git-write-tree to git +linking ./libexec/git-core/git-show-branch to git +linking ./libexec/git-core/git-fmt-merge-msg to git +linking ./libexec/git-core/git-count-objects to git +linking ./libexec/git-core/git-reset to git +linking ./libexec/git-core/git-reflog to git +linking ./libexec/git-core/git-rev-parse to git +linking ./libexec/git-core/git-update-ref to git +linking ./libexec/git-core/git-patch-id to git +linking ./libexec/git-core/git-commit-tree to git +linking ./libexec/git-core/git-merge-file to git +linking ./libexec/git-core/git-credential to git +linking ./libexec/git-core/git-unpack-objects to git +linking ./libexec/git-core/git-bundle to git +linking ./libexec/git-core/git-merge-index to git +linking ./libexec/git-core/git-remote to git +linking ./libexec/git-core/git-merge-base 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 + +"""]] diff --git a/doc/forum/Where_is_the_content__63__/comment_2_5e2cfdfab6c4f84fe7a19447b417b5a7._comment b/doc/forum/Where_is_the_content__63__/comment_2_5e2cfdfab6c4f84fe7a19447b417b5a7._comment new file mode 100644 index 0000000000..45b7b024e4 --- /dev/null +++ b/doc/forum/Where_is_the_content__63__/comment_2_5e2cfdfab6c4f84fe7a19447b417b5a7._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 2" + date="2014-07-15T18:37:34Z" + content=""" +It'll be in `/sdcard/annex` by defualt, unless you told the webapp to put it somewhere else when it asked where to put the repository. `/sdcard/annex` is a git repository which should contain all the files from the remote (not in any separate subdirectory, that's not how git works). If it does not, you can run commands like `git log --stat` in that repository to see what files have been added/removed, or `git annex status` to check the status of the files. +"""]] diff --git a/doc/forum/Where_is_the_content__63__/comment_3_bd4cbc8f256a94ffde4f57d2c406a9ec._comment b/doc/forum/Where_is_the_content__63__/comment_3_bd4cbc8f256a94ffde4f57d2c406a9ec._comment new file mode 100644 index 0000000000..5b736b4100 --- /dev/null +++ b/doc/forum/Where_is_the_content__63__/comment_3_bd4cbc8f256a94ffde4f57d2c406a9ec._comment @@ -0,0 +1,16 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawkpIIYg6Fl7OFsOHVPEchZYj68A3dk4lVg" + nickname="Paul" + subject="text relocations refusal" + date="2014-07-16T02:19:27Z" + content=""" +I'm afraid I've ruined the remote repo. For directory, I wrote \"mediashare\" because that's where I want copy to go. i don't want it in default \"annex\". In git assistant, it is unclearbwhst directory means. Mount point for cooy of remote? + +Well, this is all I get now... + +1|u0_a127@manta:/sdcard $ cd annex +u0_a127@manta:/sdcard/annex $ git annex status +WARNING: linker: git-annex has text relocations. This is wasting memory and is a security risk. Please fix. + + +"""]] diff --git a/doc/forum/Where_is_the_content__63__/comment_4_a36b35d47472b5db779b0489bf3d4893._comment b/doc/forum/Where_is_the_content__63__/comment_4_a36b35d47472b5db779b0489bf3d4893._comment new file mode 100644 index 0000000000..69b929810e --- /dev/null +++ b/doc/forum/Where_is_the_content__63__/comment_4_a36b35d47472b5db779b0489bf3d4893._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 4" + date="2014-07-16T20:41:17Z" + content=""" +That warning about text relocations always happens on Android and is not relevant to whatever problem you're having. + +If git-annex status does not print anything else, then it seems you have a git-annex repository in /sdcard/annex. If you entered \"mediashare\" in the webapp, you might have another repository in another location. When you open the webapp, it tells you the location of the repository in the upper-right corner -- \"Repository: $location\" +"""]] diff --git a/doc/forum/Workflow_for_adding_files/comment_2_28dd15ac50f79fb07bacf8b8326c7edc._comment b/doc/forum/Workflow_for_adding_files/comment_2_28dd15ac50f79fb07bacf8b8326c7edc._comment new file mode 100644 index 0000000000..c11be26673 --- /dev/null +++ b/doc/forum/Workflow_for_adding_files/comment_2_28dd15ac50f79fb07bacf8b8326c7edc._comment @@ -0,0 +1,19 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawk9SYh6N-JUMkYkW4aOk55zC3Vr9KonDV4" + nickname="Florian" + subject="comment 2" + date="2014-06-18T07:35:31Z" + content=""" +Just to be sure I understood the topic, this would be achieved in putting the repo in the manual transfer group? + +manual + +This gives you nearly full manual control over what content is stored in the repository. This allows using the assistant without it trying to keep a local copy of every file. Instead, you can manually run git annex get, git annex drop, etc to manage content. Only content that is already present is wanted. + +The exception to this manual control is that content that a client repository would not want is not wanted. So, files in archive directories are not wanted once their content has reached an archive repository. + +present and ($client) + +(Where $client is a copy of the preferred content expression used for clients.) +<<< +"""]] diff --git a/doc/forum/__171__Locking__187___files_until_synced.mdwn b/doc/forum/__171__Locking__187___files_until_synced.mdwn new file mode 100644 index 0000000000..129927bdc1 --- /dev/null +++ b/doc/forum/__171__Locking__187___files_until_synced.mdwn @@ -0,0 +1,7 @@ +I’m currently trying to set up a sync which involves an SQLite3 database file that should always be in the same state on all systems at all times (since there is no readily available way of merging the data). Basically, I’m looking for a practical way that gives me some help in making sure the files never drift apart between my remotes. Since I’m forgetful and might forget syncing the repo before going home from the office, I was wondering whether there might be a good way to assist me in this. Has anyone had some good ideas in this direction, or is there a canonical solution? + +It occurred to me one way would be to instate a hook somewhere that links the database to /dev/null in all other remotes (so the software will fail to work if I start it without having synced), but it seems tricky. I guess would have to involve per-remote branches, which will be hard to do, since I need to use direct mode. + +A less complex method might be forcing a sync before shutting down the system resp. when booting up. + +Maybe other folks have had ideas for a practical, yet robust solution. diff --git a/doc/forum/__171__Locking__187___files_until_synced/comment_1_8bf59f47fee0a8d5741fe209b5899863._comment b/doc/forum/__171__Locking__187___files_until_synced/comment_1_8bf59f47fee0a8d5741fe209b5899863._comment new file mode 100644 index 0000000000..d327a58b4c --- /dev/null +++ b/doc/forum/__171__Locking__187___files_until_synced/comment_1_8bf59f47fee0a8d5741fe209b5899863._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 1" + date="2014-07-08T17:31:53Z" + content=""" +This is something git's distributed nature preludes. You might frankly be better with one of the centralized VCSs that supports locking in this specific case. Or, you can do some kind of \"lock server\" that the clients contact, layering a centralized approach on top of git. +"""]] diff --git a/doc/forum/__171__Locking__187___files_until_synced/comment_2_0c683547a6178e4303f0b1ed1f5605a5._comment b/doc/forum/__171__Locking__187___files_until_synced/comment_2_0c683547a6178e4303f0b1ed1f5605a5._comment new file mode 100644 index 0000000000..b76f35da5e --- /dev/null +++ b/doc/forum/__171__Locking__187___files_until_synced/comment_2_0c683547a6178e4303f0b1ed1f5605a5._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="zardoz" + ip="134.147.14.84" + subject="comment 2" + date="2014-07-09T07:07:27Z" + content=""" +Yea, it’s basically just the isolated one file that needs «locking», so one could just try a different route. The idea with keeping state on a server sounds like a pretty good idea. I could just «echo» via SSH to my webserver some info on who has the file locked; then I could wrap the program that uses the SQLite3 DB in a script that checks whether it’s safe. +"""]] diff --git a/doc/forum/__34__git_annex_lock__34___very_slow_for_big_repo/comment_4_a4fd212cb066cd53d0d66eb09f3b39a8._comment b/doc/forum/__34__git_annex_lock__34___very_slow_for_big_repo/comment_4_a4fd212cb066cd53d0d66eb09f3b39a8._comment new file mode 100644 index 0000000000..ecb5ba913b --- /dev/null +++ b/doc/forum/__34__git_annex_lock__34___very_slow_for_big_repo/comment_4_a4fd212cb066cd53d0d66eb09f3b39a8._comment @@ -0,0 +1,18 @@ +[[!comment format=mdwn + username="josch" + ip="2001:638:709:5:2ad2:44ff:fe4b:56aa" + subject="thanks a lot!" + date="2014-06-23T15:13:34Z" + content=""" +Thank you for the answer to this problem! + +I put 150k emails in maildir format in git annex. Adding them took a couple of hours and so did the first full sync. But after that things didnt noticibly slow down - that was a surprise! + +What but then I wanted to do a one-time sync using rsync. I didnt find out how to tell rsync to follow symlinks at the destination instead of replacing symlinks with normal files. So I first unlocked the 150k emails (which was moderately quick and probably only I/O bound) and then did the rsync using the --checksum option which worked well as well. The problems started when I wanted to lock the whole thing again. This took ages and even after two days it did not output that it was adding files at all. So I used `find -type f | split -a3 -l100` and then `for f in x*; do echo $f; git annex add `echo \`cat $f\``; rm $f; done`. This started off well and I could finally see files being added. Unfortunately when I came back after a couple of hours, the progress slowed down to a crawl of only one file every few seconds. + +The solution was to just `git checkout -- Mail` everything. This finished in a matter of seconds and left the new mail which was copied over by rsync intact. + +Thanks a lot for the tip! + +Let me hereby also report that git annex seems to work without problems when using it with offlineimap and notmuch. At least I did not run into any problems with that setup yet. +"""]] diff --git a/doc/forum/__91__announce__93___metadata_extration_utility.mdwn b/doc/forum/__91__announce__93___metadata_extration_utility.mdwn new file mode 100644 index 0000000000..3214f36d9b --- /dev/null +++ b/doc/forum/__91__announce__93___metadata_extration_utility.mdwn @@ -0,0 +1,30 @@ +Let me announce 'metatag', a simple metadata extraction utility. + +The Design Idea is to make it completely event driven. There are string matching rules over added metadata, +who invoke engines when matched, which in turn add more metadata and so on. +Thus the whole metadata extraction process is controlled by those easily configurable rules. Processing a file or +directory just starts by adding "/=filename" to the metadata, everything else bootstraps from that. After metadata +got extracted there are exporters which implement different backends for storing this metadata (currently only a +'print' and a 'gitannex' exporter are implemented) + +While still in a infancy state it already works for me. It now needs more rules and engines for metadata extraction +and some more efforts to 'standardize' generated metadata. I'd like to welcome comments and contributions. + +A README about it can be found at + + + +The code is available under git from + + git clone git://git.pipapo.org/metatag + +To make the contribution barrier as low as possible there is a public pushable 'mob' repository where everyone can +send changes too at `git://git.pipapo.org/mob/metatag` + +after installing it, using it on a annexed directory is like + + metatag -r -O gitannex,gitexclude -o gitannex:-stat ./ + +There is a mailinglist for the project, you can subscribe at + + diff --git a/doc/forum/comprehension_question:_repository_vs._working_copy_in_direct_mode.mdwn b/doc/forum/comprehension_question:_repository_vs._working_copy_in_direct_mode.mdwn new file mode 100644 index 0000000000..350bcd7bd2 --- /dev/null +++ b/doc/forum/comprehension_question:_repository_vs._working_copy_in_direct_mode.mdwn @@ -0,0 +1,10 @@ +(I put this in a separate topic because it is a different question) + +I still do not fully understand when (in direct mode!) a file is in the work copy and when in the repository. +Because what git-annex always refers to a "repository" is actually a repository (i.e., the server part for subversion) *and* a work copy (the client part in subversion), right? (except for bare repositories which have only the former) + +When I change a file in the work copy, I still need to "git annex sync", right? But do I also need to "git annex sync --content" to move the changes from the work copy to the repository? + +Because I have a headless server where the annex should also be accessed via samba. When files are added/changed, the annex clients do not see the changes until I manually do a couple of "git annex sync" and "git annex sync --content" (it's not deterministic yet for me how often). + +Is this the intended behavior? If yes, is there a better way to automatically sync the changes on the headless server other than a cron job? diff --git a/doc/forum/downloading_from_moodle.mdwn b/doc/forum/downloading_from_moodle.mdwn new file mode 100644 index 0000000000..ad38d7f1ff --- /dev/null +++ b/doc/forum/downloading_from_moodle.mdwn @@ -0,0 +1,76 @@ +my school uses moodle for our classes. We have to sign in and then manually click to download each file, assignment and video uploaded. I asked the school's tech administrator if there was a direct way I could access the videos through the ssh access they've given us to one of the servers, but he said it wasn't possible. + +when I click on the link shown, the location I see is: http://moodle.jct.ac.il/mod/resource/view.php?id=135374 +Inspect element gives more information. the response from the server is: + + Remote Address:147.161.6.59:80 + Request URL:http://moodle.jct.ac.il/mod/resource/view.php?id=135374 + Request Method:GET + Status Code:303 See Other + Request Headersview source + Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 + Accept-Encoding:gzip,deflate,sdch + Accept-Language:en-US,en;q=0.8,he;q=0.6 + Connection:keep-alive + Cookie:visid_incap_97364=qJx2WaKqQfGidGf9VfM6QWrnlFIAAAAAQUIPAAAAAAC5EXcbt00vqNu9jdVDwEDN; __utma=98014340.1409421308.1381214363.1381214363.1390387318.2; __utmz=98014340.1381214363.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); MoodleSession5771=7s1cfqfo4ahdtmna5h7vserg97; MOODLEID1_5771=%257F%25D39%2522N%25B4%25AFY + DNT:1 + Host:moodle.jct.ac.il + Referer:http://moodle.jct.ac.il/course/view.php?id=20151 + User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36 + Query String Parametersview sourceview URL encoded + id:135374 + Response Headersview source + Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0 + Connection:Keep-Alive + Content-Encoding:gzip + Content-Language:he + Content-Length:503 + Content-Type:text/html + Date:Mon, 16 Jun 2014 12:31:22 GMT + Expires:Thu, 19 Nov 1981 08:52:00 GMT + Keep-Alive:timeout=15, max=100 + Location:http://moodle.jct.ac.il/pluginfile.php/288409/mod_resource/content/0/movie%205773/150151.5773.week1.wmv?forcedownload=1 + Pragma:no-cache + Server:Apache/2.2.14 (Ubuntu) + Vary:Accept-Encoding + X-Powered-By:PHP/5.3.2-1ubuntu4.24 + +this then pulls the following: + + Remote Address:147.161.6.59:80 + Request URL:http://moodle.jct.ac.il/pluginfile.php/288409/mod_resource/content/0/movie%205773/150151.5773.week1.wmv?forcedownload=1 + Request Method:GET + Status Code:200 OK + Request Headersview source + Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 + Accept-Encoding:gzip,deflate,sdch + Accept-Language:en-US,en;q=0.8,he;q=0.6 + Connection:keep-alive + Cookie:visid_incap_97364=qJx2WaKqQfGidGf9VfM6QWrnlFIAAAAAQUIPAAAAAAC5EXcbt00vqNu9jdVDwEDN; __utma=98014340.1409421308.1381214363.1381214363.1390387318.2; __utmz=98014340.1381214363.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); MoodleSession5771=7s1cfqfo4ahdtmna5h7vserg97; MOODLEID1_5771=%257F%25D39%2522N%25B4%25AFY + DNT:1 + Host:moodle.jct.ac.il + Referer:http://moodle.jct.ac.il/course/view.php?id=20151 + User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36 + Query String Parametersview sourceview URL encoded + forcedownload:1 + Response Headersview source + Accept-Ranges:bytes + Cache-Control:max-age=86400 + Connection:Keep-Alive + Content-Disposition:attachment; filename="150151.5773.week1.wmv" + Content-Length:1353673203 + Content-Type:application/x-forcedownload + Date:Mon, 16 Jun 2014 12:31:23 GMT + ETag:675e7d2cffd7a79afd8686c59ff2533f9e3508b7 + Expires:Tue, 17 Jun 2014 12:31:23 GMT + Keep-Alive:timeout=15, max=99 + Last-Modified:Fri, 19 Jul 2013 17:06:54 GMT + Pragma: + Server:Apache/2.2.14 (Ubuntu) + X-Powered-By:PHP/5.3.2-1ubuntu4.24 + +when I right-click on the second one in the inspect element window, I can select "copy as cURL" i get: + + curl 'http://moodle.jct.ac.il/pluginfile.php/288409/mod_resource/content/0/movie%205773/150151.5773.week1.wmv?forcedownload=1' -H 'DNT: 1' -H 'Accept-Encoding: gzip,deflate,sdch' -H 'Accept-Language: en-US,en;q=0.8,he;q=0.6' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Referer: http://moodle.jct.ac.il/course/view.php?id=20151' -H 'Cookie: visid_incap_97364=qJx2WaKqQfGidGf9VfM6QWrnlFIAAAAAQUIPAAAAAAC5EXcbt00vqNu9jdVDwEDN; __utma=98014340.1409421308.1381214363.1381214363.1390387318.2; __utmz=98014340.1381214363.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); MoodleSession5771=7s1cfqfo4ahdtmna5h7vserg97; MOODLEID1_5771=%257F%25D39%2522N%25B4%25AFY' -H 'Connection: keep-alive' --compressed + +if I append " > week1.wmv" to the end of that output it downloads fine. How can I add this file to a git-annex repo? diff --git a/doc/forum/downloading_from_moodle/comment_1_3f677130d268de4288e87cfa86ea055c._comment b/doc/forum/downloading_from_moodle/comment_1_3f677130d268de4288e87cfa86ea055c._comment new file mode 100644 index 0000000000..a489859adf --- /dev/null +++ b/doc/forum/downloading_from_moodle/comment_1_3f677130d268de4288e87cfa86ea055c._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="108.236.230.124" + subject="comment 1" + date="2014-06-16T17:55:13Z" + content=""" +`git annex addurl` does not support storing cookies needed to access files. I doubt that makes sense anyway, since most login cookies expire. + +So, your best bet seems to just be to `git annex add` the file after you download it. +"""]] diff --git a/doc/forum/downloading_from_moodle/comment_2_dcef60ec144f123dadd165fb602ab950._comment b/doc/forum/downloading_from_moodle/comment_2_dcef60ec144f123dadd165fb602ab950._comment new file mode 100644 index 0000000000..1529004333 --- /dev/null +++ b/doc/forum/downloading_from_moodle/comment_2_dcef60ec144f123dadd165fb602ab950._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="108.236.230.124" + subject="comment 2" + date="2014-06-16T17:59:20Z" + content=""" +Another option would be to set up some kind of http proxy that adds the login cookie to requests.. If you really wanted to use `git annex addurl`. +"""]] diff --git a/doc/forum/downloading_from_moodle/comment_3_d3efb767bf9b20f96242dcf64817bd4b._comment b/doc/forum/downloading_from_moodle/comment_3_d3efb767bf9b20f96242dcf64817bd4b._comment new file mode 100644 index 0000000000..c9b1012254 --- /dev/null +++ b/doc/forum/downloading_from_moodle/comment_3_d3efb767bf9b20f96242dcf64817bd4b._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="108.236.230.124" + subject="comment 3" + date="2014-06-16T18:04:48Z" + content=""" +Actually, a simpler option may be to set `annex.http-headers` in the git config, to the appropriate http headers that set the cookie. +"""]] diff --git a/doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__.mdwn b/doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__.mdwn new file mode 100644 index 0000000000..2fd18f9888 --- /dev/null +++ b/doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__.mdwn @@ -0,0 +1,24 @@ +I have Ubuntu and Debian systems, playing with git-annex. This is not mission critical data, just testing. I ended up with an extra duplicate of the media files on the laptop. + +The whereis listing is lots and lots like this: + +whereis 00-Unsorted/2008-RobustStats-AmerPsyc.pdf (3 copies) + 67e69242-d57c-4b50-aaf9-74876b899962 + 9e0bc9e4-f8bf-11e3-b9c1-9b4158540a9d -- pols110.pols.ku.edu_mediashare ( +pdf and mp3) + d82d2e6f-9200-49cf-86a3-1d674a768971 -- here (pauljohn@dellap14:~/medias +hare) +ok + +(I'm pretty sure) This happened because I copied the media files to /home/pauljohn/mediashare/manuscripts manually, and then I used the git-annex assistant to set up the remote linkage to same content, from the workstation, and it apparently copied in a whole new set. + +How to clean this up? Without erasing everything and starting over? + +Can I guess? + +Open a terminal and git remove manually 67e69242-d57c-4b50-aaf9-74876b899962 ??? + +Thanks in advance if you care to advise me :) + +Paul Johnson +http://pj.freefaculty.org diff --git a/doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__/comment_1_bb6d749b758b17178227929bf7327fe1._comment b/doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__/comment_1_bb6d749b758b17178227929bf7327fe1._comment new file mode 100644 index 0000000000..d528331cef --- /dev/null +++ b/doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__/comment_1_bb6d749b758b17178227929bf7327fe1._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="https://openid.stackexchange.com/user/e65e6d0e-58ba-41de-84cc-1f2ba54cf574" + nickname="Mica Semrick" + subject="comment 1" + date="2014-06-24T04:24:12Z" + content=""" +You should first try `git-annex unused` and if that doesn't work just `git-annex drop` the unwanted files. +"""]] diff --git a/doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__/comment_2_d834df30633f7d5569797ee818cf38c3._comment b/doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__/comment_2_d834df30633f7d5569797ee818cf38c3._comment new file mode 100644 index 0000000000..1f2cf2ff55 --- /dev/null +++ b/doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__/comment_2_d834df30633f7d5569797ee818cf38c3._comment @@ -0,0 +1,20 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawkpIIYg6Fl7OFsOHVPEchZYj68A3dk4lVg" + nickname="Paul" + subject="please explain" + date="2014-07-01T13:45:08Z" + content=""" +Sorry. I just don't understand. +what am I doing wrong? How to remove extra copy: + +
+whereis WaldTest/Vaeth_WaldTest.pdf (3 copies)
+        67e69242-d57c-4b50-aaf9-74876b899962
+        9e0bc9e4-f8bf-11e3-b9c1-9b4158540a9d -- pols110.pols.ku.edu_mediashare (pdf and mp3)
+        d82d2e6f-9200-49cf-86a3-1d674a768971 -- here (pauljohn@dellap14:~/mediashare)
+ok
+pauljohn@dellap14:~/mediashare/manuscripts$ git annex drop 67e69242-d57c-4b50-aaf9-74876b899962
+git-annex: 67e69242-d57c-4b50-aaf9-74876b899962 not found
+pauljohn@dellap14:~/mediashare/manuscripts$ git annex drop WaldTest/67e69242-d57c-4b50-aaf9-74876b899962
+git-annex: WaldTest/67e69242-d57c-4b50-aaf9-74876b899962 not found
+"""]]
diff --git a/doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__/comment_3_1e02eff33c9fa7bea03aa6d58b910175._comment b/doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__/comment_3_1e02eff33c9fa7bea03aa6d58b910175._comment
new file mode 100644
index 0000000000..b0061a9d0d
--- /dev/null
+++ b/doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__/comment_3_1e02eff33c9fa7bea03aa6d58b910175._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 3"
+ date="2014-07-03T19:20:49Z"
+ content="""
+\"67e69242-d57c-4b50-aaf9-74876b899962\" is the UUID of a git annnex repository that git-annex has on record as containing the file. Since it does not have a description set (which normally gets done automatically when setting up the repository), and is not one of the remotes of the repository where you ran `git annex whereis`, it's a bit hard to tell what repository that is.
+
+What I would do in this situation is:
+
+1. Look around my computers for a repository with that UUID. You can run this command in a repository to see its uuid: `git config annex.uuid`  
+2. If I found it, I'd run `git annex describe here \"something sensible\"` and maybe set it up as a remote of other repositories and then `git annex drop` the data from it if desired.
+3. If I was unable to find the repository, I might assume it was one I created before, and have removed. Then I'd tell git-annex that: `git annex dead 67e69242-d57c-4b50-aaf9-74876b899962` (if it turns out I was wrong and the repository turns up later, this can always be reversed by running `git annex semitrust 67e69242-d57c-4b50-aaf9-74876b899962`)
+"""]]
diff --git a/doc/forum/empty_directory_handling.mdwn b/doc/forum/empty_directory_handling.mdwn
new file mode 100644
index 0000000000..b806b2e2fe
--- /dev/null
+++ b/doc/forum/empty_directory_handling.mdwn
@@ -0,0 +1,3 @@
+I've just tried using git annex assistant for the first time, to synchronize a shared directory between machines. This shared directory contains a collection of bare git repositories for various projects. Unfortunately this doesn't seem to work, as to be recognised as valid bare repos, they need to have the ref/heads and ref/tags subdirectories. git annex assistant fails to synchronise these, as they are empty.
+
+What should I do? How can I make git annex reproduce the source directory structure when synchronising?
diff --git a/doc/forum/empty_directory_handling/comment_1_34ac97b9337b6230ed8a4748203fe543._comment b/doc/forum/empty_directory_handling/comment_1_34ac97b9337b6230ed8a4748203fe543._comment
new file mode 100644
index 0000000000..edf4984ea4
--- /dev/null
+++ b/doc/forum/empty_directory_handling/comment_1_34ac97b9337b6230ed8a4748203fe543._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-07-02T17:02:31Z"
+ content="""
+This is not a good idea. See 
+"""]]
diff --git a/doc/forum/empty_directory_handling/comment_2_73a39e28d5a09ac342cb4195d263d91e._comment b/doc/forum/empty_directory_handling/comment_2_73a39e28d5a09ac342cb4195d263d91e._comment
new file mode 100644
index 0000000000..250c08adfd
--- /dev/null
+++ b/doc/forum/empty_directory_handling/comment_2_73a39e28d5a09ac342cb4195d263d91e._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmlO6w9_FAVe3v6MdnkePxaTJqp0RPbGhM"
+ nickname="Tim"
+ subject="comment 2"
+ date="2014-07-04T04:00:25Z"
+ content="""
+Thanks - that thread was helpful. I now realise that what I was trying to do was not sensible, and I'll have to work out another approach.
+"""]]
diff --git a/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory.mdwn b/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory.mdwn
new file mode 100644
index 0000000000..ee0b49eb64
--- /dev/null
+++ b/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory.mdwn
@@ -0,0 +1,112 @@
+I'm getting this error, not exactly sure why... Here's the output of running git annex sync in my pictures folder:
+
+	[2014-06-29 12:43:59 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","show-ref","git-annex"]
+	[2014-06-29 12:43:59 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","show-ref","--hash","refs/heads/git-annex"]
+	[2014-06-29 12:43:59 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/heads/git-annex..7bf55ad4463cad9389cbb11e48334d151aacf45f","--oneline","-n1"]
+	[2014-06-29 12:43:59 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/heads/git-annex..f3331818fc79b6e9523e483b9d97aaec5c8da845","--oneline","-n1"]
+	[2014-06-29 12:43:59 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/heads/git-annex..6c3bee76aa98f5c789ddf89450b3bd52658171a6","--oneline","-n1"]
+	[2014-06-29 12:43:59 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/heads/git-annex..9329bf7ae5609b19e81d9605fdc990c87c5816dc","--oneline","-n1"]
+	[2014-06-29 12:43:59 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/heads/git-annex..ad7115c6108170dc54095f74632db339dbca4cdd","--oneline","-n1"]
+	[2014-06-29 12:43:59 Mitteleuropäische Sommerzeit] chat: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","cat-file","--batch"]
+	[2014-06-29 12:43:59 Mitteleuropäische Sommerzeit] read: git ["config","--null","--list"]
+	commit 
+	[2014-06-29 12:43:59 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","ls-files","--stage","-z","--others","--exclude-standard","--","C:\\Users\\Name\\Pictures"]
+	[2014-06-29 12:43:59 Mitteleuropäische Sommerzeit] chat: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","cat-file","--batch"]
+	(Recording state in git...)
+	[2014-06-29 12:49:57 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","Hochzeit von NameB und NameC/2013-08-18_MVI_0583.MOV"]
+	fatal: Out of memory? mmap failed: No such file or directory
+	[2014-06-29 12:49:57 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","Hochzeit von NameB und NameC/2013-08-18_MVI_0582.MOV"]
+	fatal: Out of memory? mmap failed: No such file or directory
+	[2014-06-29 12:49:57 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","Hochzeit von NameB und NameC/2013-08-18_MVI_0417.MOV"]
+	fatal: Out of memory? mmap failed: No such file or directory
+	[2014-06-29 12:49:57 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","Hochzeit von NameB und NameC/2013-08-17_MVI_9701.MOV"]
+	fatal: Out of memory? mmap failed: No such file or directory
+	[2014-06-29 12:49:57 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2014/Hochzeit von Jana und Stefan/MVI_7168.MOV"]
+	[2014-06-29 12:49:57 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2456.JPG"]
+	[2014-06-29 12:49:57 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2452.JPG"]
+	[2014-06-29 12:49:57 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2450.JPG"]
+	[2014-06-29 12:49:57 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2449.JPG"]
+	[2014-06-29 12:49:57 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2448.JPG"]
+	[2014-06-29 12:49:57 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2447.JPG"]
+	[2014-06-29 12:49:57 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2443.JPG"]
+	[2014-06-29 12:49:58 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2439.JPG"]
+	[2014-06-29 12:49:58 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2436.JPG"]
+	[2014-06-29 12:49:58 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2431.JPG"]
+	[2014-06-29 12:49:58 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2430.JPG"]
+	[2014-06-29 12:49:58 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2425.JPG"]
+	[2014-06-29 12:49:58 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2424.JPG"]
+	[2014-06-29 12:49:58 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2423.JPG"]
+	[2014-06-29 12:49:58 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2421.JPG"]
+	[2014-06-29 12:49:58 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2418.JPG"]
+	[2014-06-29 12:49:58 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2417.JPG"]
+	[2014-06-29 12:49:58 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2416.JPG"]
+	[2014-06-29 12:49:58 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2415.JPG"]
+	[2014-06-29 12:49:58 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2411.JPG"]
+	[2014-06-29 12:49:58 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2409.JPG"]
+	[2014-06-29 12:49:59 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2406.JPG"]
+	[2014-06-29 12:49:59 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2405.JPG"]
+	[2014-06-29 12:49:59 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2404.JPG"]
+	[2014-06-29 12:49:59 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2403.JPG"]
+	[2014-06-29 12:49:59 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2402.JPG"]
+	[2014-06-29 12:49:59 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2400.JPG"]
+	[2014-06-29 12:49:59 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2394.JPG"]
+	[2014-06-29 12:49:59 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2392.JPG"]
+	[2014-06-29 12:49:59 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2390.JPG"]
+	[2014-06-29 12:49:59 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0446.JPG"]
+	[2014-06-29 12:49:59 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0445.JPG"]
+	[2014-06-29 12:49:59 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0444.JPG"]
+	[2014-06-29 12:49:59 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0443.JPG"]
+	[2014-06-29 12:50:00 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0442.JPG"]
+	[2014-06-29 12:50:00 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0441.JPG"]
+	[2014-06-29 12:50:00 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0440.JPG"]
+	[2014-06-29 12:50:00 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0438.JPG"]
+	[2014-06-29 12:50:00 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0437.JPG"]
+	[2014-06-29 12:50:00 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0436.JPG"]
+	[2014-06-29 12:50:00 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0435.JPG"]
+	[2014-06-29 12:50:00 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0434.JPG"]
+	[2014-06-29 12:50:00 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0433.JPG"]
+	[2014-06-29 12:50:00 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0432.JPG"]
+	[2014-06-29 12:50:00 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0431.JPG"]
+	[2014-06-29 12:50:00 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0368.JPG"]
+	[2014-06-29 12:50:00 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0367.JPG"]
+	[2014-06-29 12:50:00 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0366.JPG"]
+	[2014-06-29 12:50:01 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0365.JPG"]
+	[2014-06-29 12:50:01 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0364.JPG"]
+	[2014-06-29 12:50:01 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","show-ref","--head"]
+	[2014-06-29 12:50:01 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","diff-index","-z","--raw","--no-renames","-l0","--cached","HEAD"]
+	[2014-06-29 12:50:01 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","symbolic-ref","HEAD"]
+	[2014-06-29 12:50:01 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","show-ref","--hash","refs/heads/annex/direct/master"]
+	[2014-06-29 12:50:01 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","write-tree"]
+	[2014-06-29 12:50:01 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","rev-parse","ec008c688692d3156b1aececf33a388f43e8c868:"]
+	ok
+	[2014-06-29 12:50:01 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","symbolic-ref","HEAD"]
+	[2014-06-29 12:50:01 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","show-ref","refs/heads/annex/direct/master"]
+	[2014-06-29 12:50:01 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","show-ref","--verify","-q","refs/heads/synced/master"]
+	[2014-06-29 12:50:01 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/heads/annex/direct/master..refs/heads/synced/master","--oneline","-n1"]
+	pull HomeServerLocal
+	[2014-06-29 12:50:01 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","fetch","HomeServerLocal"]
+	[2014-06-29 12:50:02 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","show-ref","--verify","-q","refs/remotes/HomeServerLocal/annex/direct/master"]
+	[2014-06-29 12:50:02 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/heads/annex/direct/master..refs/remotes/HomeServerLocal/annex/direct/master","--oneline","-n1"]
+	[2014-06-29 12:50:02 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","show-ref","--verify","-q","refs/remotes/HomeServerLocal/synced/master"]
+	[2014-06-29 12:50:02 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/heads/synced/master..refs/remotes/HomeServerLocal/synced/master","--oneline","-n1"]
+	ok
+	[2014-06-29 12:50:02 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","show-ref","git-annex"]
+	[2014-06-29 12:50:02 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","show-ref","--hash","refs/heads/git-annex"]
+	[2014-06-29 12:50:02 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/heads/git-annex..7bf55ad4463cad9389cbb11e48334d151aacf45f","--oneline","-n1"]
+	[2014-06-29 12:50:02 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/heads/git-annex..f3331818fc79b6e9523e483b9d97aaec5c8da845","--oneline","-n1"]
+	[2014-06-29 12:50:02 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/heads/git-annex..6c3bee76aa98f5c789ddf89450b3bd52658171a6","--oneline","-n1"]
+	[2014-06-29 12:50:03 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/heads/git-annex..9329bf7ae5609b19e81d9605fdc990c87c5816dc","--oneline","-n1"]
+	[2014-06-29 12:50:03 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/heads/git-annex..ad7115c6108170dc54095f74632db339dbca4cdd","--oneline","-n1"]
+	[2014-06-29 12:50:03 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","branch","-f","synced/master"]
+	[2014-06-29 12:50:03 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","branch","-f","master"]
+	[2014-06-29 12:50:03 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","show-ref","--verify","-q","refs/remotes/HomeServerLocal/synced/master"]
+	[2014-06-29 12:50:03 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/remotes/HomeServerLocal/synced/master..refs/heads/synced/master","--oneline","-n1"]
+	[2014-06-29 12:50:03 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","show-ref","--verify","-q","refs/remotes/HomeServerLocal/git-annex"]
+	[2014-06-29 12:50:03 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/remotes/HomeServerLocal/git-annex..git-annex","--oneline","-n1"]
+	push HomeServerLocal
+	[2014-06-29 12:50:03 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","push","HomeServerLocal","+git-annex:synced/git-annex","annex/direct/master:synced/master"]
+	Everything up-to-date
+	[2014-06-29 12:50:04 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","push","HomeServerLocal","master"]
+	ok
+
+Any idea? Thanks in advance...
diff --git a/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_1_d98a155fa01d10ecff9058d79290156d._comment b/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_1_d98a155fa01d10ecff9058d79290156d._comment
new file mode 100644
index 0000000000..989ab1a6a4
--- /dev/null
+++ b/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_1_d98a155fa01d10ecff9058d79290156d._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="Idhup"
+ ip="91.58.248.157"
+ subject="System"
+ date="2014-06-29T19:26:42Z"
+ content="""
+Forgot to tell: This is a Win7 x64 system, running git 1.9.2.msysgit.0 and
+
+git-annex version: 5.20140517-gee56d21
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+"""]]
diff --git a/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_2_3b9ea7a1254ac5b50a5ab59cd331ec3f._comment b/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_2_3b9ea7a1254ac5b50a5ab59cd331ec3f._comment
new file mode 100644
index 0000000000..2a575e0599
--- /dev/null
+++ b/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_2_3b9ea7a1254ac5b50a5ab59cd331ec3f._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 2"
+ date="2014-07-04T17:55:45Z"
+ content="""
+
+"""]]
diff --git a/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_3_5ee300034819c5825c676cd7e3af659f._comment b/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_3_5ee300034819c5825c676cd7e3af659f._comment
new file mode 100644
index 0000000000..55345537e8
--- /dev/null
+++ b/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_3_5ee300034819c5825c676cd7e3af659f._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="Idhup"
+ ip="91.58.248.157"
+ subject="Didn't work"
+ date="2014-07-06T17:46:01Z"
+ content="""
+Repacking in cygwin towards a smaller packsize did not help. I shrinked it down to 2 MB per packfile, I still got the errors.
+
+When checking the debug output, you can see that git crashes when adding some large-ish .mov files. I'm not even sure if git's supposed to add them or if something went wrong with Windows/DirectMode. I executed git reset to remove pending additions that weren't supposed to be there, but to no avail.
+
+Any ideas on how to fix that?
+"""]]
diff --git a/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_4_cf7f5c91d3c15f72d2a714b7362c1197._comment b/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_4_cf7f5c91d3c15f72d2a714b7362c1197._comment
new file mode 100644
index 0000000000..4b250a3e2f
--- /dev/null
+++ b/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_4_cf7f5c91d3c15f72d2a714b7362c1197._comment
@@ -0,0 +1,30 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 4"
+ date="2014-07-10T20:16:28Z"
+ content="""
+[2014-06-29 12:49:57 Mitteleuropäische Sommerzeit] call: git [\"--git-dir=C:\\Users\\Name\\Pictures\\.git\",\"--work-tree=C:\\Users\\Name\\Pictures\",\"add\",\"-f\",\"Hochzeit von NameB und NameC/2013-08-17_MVI_9701.MOV\"]
+
+When does git-annex in direct mode run \"git add -f\"? In stageDirect, when a file has been modified that is not an annexed file, but already has been committed  directly to git.
+
+This certainly points in the direction of what the problem is with the repository. I think you need to take a look at `git log --stat \"Hochzeit von NameB und NameC/2013-08-18_MVI_0583.MOV\"` and see if it has been committed to git as a symlink or if it is indeed being stored as a Bin file in git. 
+
+Here's how the log would look for a regular git-annexed symlink:
+
+
+ $somefile | 1 +
+ 1 file changed, 1 insertion(+)
+
+ +And here for a binary file stored in git: + +
+ $somefile | Bin 0 -> 1016920 bytes
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+
+ +If you find the latter in the log, then the author and commit message of the commit adding it would be interesting. + +Hypothesis: Perhaps this repository started off on a Linux or OSX system, and you were using a git-annex older than 5.20131118, when the direct mode guard was added. You might have added this file back then and accidentially committed it directly to git. +"""]] diff --git a/doc/forum/ghost_semitrusted_repositories.mdwn b/doc/forum/ghost_semitrusted_repositories.mdwn new file mode 100644 index 0000000000..9e00178b75 --- /dev/null +++ b/doc/forum/ghost_semitrusted_repositories.mdwn @@ -0,0 +1,28 @@ +I had one repo on HDD and another in an USB drive. After mount point changed, I went to the HDD repo folder and tried to use git remote-set url to point it to the new location, however I think I ended in a weird state. git-annex info shows this: + + git-annex info + repository mode: indirect + trusted repositories: 0 + semitrusted repositories: 5 + 00000000-0000-0000-0000-000000000001 -- web + 26c0c4ba-6489-4416-a054-670d373f09bd -- juan@invasor.local:/Volumes/sapo_hfs/live/papers + 61158820-db14-45b9-b9f9-8619d956388e -- [usb_papers] + d4456c86-fa2b-43a7-a132-027915390cf6 -- usb_papers + fed56814-08c6-11e3-bf3c-af5da9f7f388 -- sapo [here] + untrusted repositories: 0 + transfers in progress: none + available local disk space: 255.46 gigabytes (+1 megabyte reserved) + local annex keys: 1252 + local annex size: 2.55 gigabytes + annexed files in working tree: 1297 + size of annexed files in working tree: 2.7 gigabytes + bloom filter size: 16 mebibytes (0.3% full) + backend usage: + SHA256E: 2549 + +usb_papers was the original usb repo, and now a new one [usb_papers] shows. webapp shows only sapo[here] and [usb_papers], the other 2 repos are unknown. I was digging around but couldn't find a way to remove them. +Seems that the webapp managed to use the new URL, but said something about "fixing repo". +Any suggestions? +Thanks in advance. +Best regards, + Juan diff --git a/doc/forum/ghost_semitrusted_repositories/comment_1_99bea1a964da9c5603b8cfbdc19bcde8._comment b/doc/forum/ghost_semitrusted_repositories/comment_1_99bea1a964da9c5603b8cfbdc19bcde8._comment new file mode 100644 index 0000000000..ced8645e28 --- /dev/null +++ b/doc/forum/ghost_semitrusted_repositories/comment_1_99bea1a964da9c5603b8cfbdc19bcde8._comment @@ -0,0 +1,19 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 1" + date="2014-07-11T19:40:32Z" + content=""" + 61158820-db14-45b9-b9f9-8619d956388e -- [usb_papers] + +This is the git remote you currently have set up. + + d4456c86-fa2b-43a7-a132-027915390cf6 -- usb_papers + +This is the old remote from before. + +Take a look at the repository in the USB drive, and see what its annex.uuid is set to. git-annex doesn't change the UUID after a repository is set up, so the fact that you have two different UUIDs is puzzling. + +If you really wanted to, you could remove the old repository from the list by running: `git annex dead d4456c86-fa2b-43a7-a132-027915390cf6` +But I would want to get to the bottom of what happened before doing that. +"""]] diff --git a/doc/forum/ghost_semitrusted_repositories/comment_2_fe5fe5539d06c6b1ef69f3ed805f1ab4._comment b/doc/forum/ghost_semitrusted_repositories/comment_2_fe5fe5539d06c6b1ef69f3ed805f1ab4._comment new file mode 100644 index 0000000000..931783a0e1 --- /dev/null +++ b/doc/forum/ghost_semitrusted_repositories/comment_2_fe5fe5539d06c6b1ef69f3ed805f1ab4._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawmTNrhkVQ26GBLaLD5-zNuEiR8syTj4mI8" + nickname="Juan" + subject="web remote" + date="2014-07-15T13:19:42Z" + content=""" +Ok. Got it. And what's up with the web remote? Why is it there, I didn't add that one. +"""]] diff --git a/doc/forum/ghost_semitrusted_repositories/comment_3_588325ef52c80cfc67d1dd80a9d5bd13._comment b/doc/forum/ghost_semitrusted_repositories/comment_3_588325ef52c80cfc67d1dd80a9d5bd13._comment new file mode 100644 index 0000000000..1cdceff0d5 --- /dev/null +++ b/doc/forum/ghost_semitrusted_repositories/comment_3_588325ef52c80cfc67d1dd80a9d5bd13._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 3" + date="2014-07-15T18:56:31Z" + content=""" +It's there to represent the world wide web when using eg, `git annex addurl` +"""]] diff --git a/doc/forum/git-annes_assistant_+_MAC_OSX_questions/comment_4_573537a49e082515bfb1be84c91b5d1b._comment b/doc/forum/git-annes_assistant_+_MAC_OSX_questions/comment_4_573537a49e082515bfb1be84c91b5d1b._comment new file mode 100644 index 0000000000..01aac51119 --- /dev/null +++ b/doc/forum/git-annes_assistant_+_MAC_OSX_questions/comment_4_573537a49e082515bfb1be84c91b5d1b._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4" + nickname="Ovidiu" + subject="comment 4" + date="2014-06-21T13:03:11Z" + content=""" +Any feedback on my last questions? +Is there a road map somewhere? Need to figure out if this is going somewhere soon or if I should look for another solution? +Any other kickstarter campaigns you're planning? Wouldn't mind chipping in if it means this goes somewhere fast(er) ;-) +"""]] diff --git a/doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__.mdwn b/doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__.mdwn new file mode 100644 index 0000000000..e7de592100 --- /dev/null +++ b/doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__.mdwn @@ -0,0 +1,5 @@ +I fear that while using git annex I will at some point accidentally `git add` some small files and not notice it until the only way to fix the problem is to rewrite history. What would be the best way to prevent myself from ever `git add`-ing a file into my annex repository instead of `git annex add`-ing it? + +And secondly, how can I best search in my git annex repository whether I already did this mistake in the past or not? Currently I'm using this which returns everything that's not a symlink or a git submodule: + + git ls-files -s | awk ' $1 != 120000 && $1 != 160000 { print $4 }' diff --git a/doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__/comment_1_440dcd19ea2512f968858b780c2a2913._comment b/doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__/comment_1_440dcd19ea2512f968858b780c2a2913._comment new file mode 100644 index 0000000000..166d549fd8 --- /dev/null +++ b/doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__/comment_1_440dcd19ea2512f968858b780c2a2913._comment @@ -0,0 +1,22 @@ +[[!comment format=mdwn + username="Xyem" + ip="178.79.137.64" + subject="comment 1" + date="2014-06-25T10:35:07Z" + content=""" +I'm not sure if you can prevent 'git add' but you can at least prevent it getting commited with the pre-commit hook. Mine is this: + + #!/bin/sh + + FILES=$(find -name \".git\" -prune -o -type f -not -name \".gitignore\" -print); + FILE_COUNT=$(echo -n \"$FILES\" | wc -l) + + if [ $FILE_COUNT -gt 0 ]; then + echo \"$FILE_COUNT non-symlink files found.\" + echo \"$FILES\" + exit 1 + fi + + # automatically configured by git-annex + git annex pre-commit . +"""]] diff --git a/doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__/comment_2_e9b70386774996a3d0446faaa3219120._comment b/doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__/comment_2_e9b70386774996a3d0446faaa3219120._comment new file mode 100644 index 0000000000..bc8acf020d --- /dev/null +++ b/doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__/comment_2_e9b70386774996a3d0446faaa3219120._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="josch" + ip="2001:638:709:5:2ad2:44ff:fe4b:56aa" + subject="comment 2" + date="2014-06-27T04:50:03Z" + content=""" +Xyem, your method does not work well because it finds all regular files in the whole annex directory and does not only check for those that are to be committed. +"""]] diff --git a/doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__/comment_3_3dbd76accad2df2fff14b55452c828ef._comment b/doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__/comment_3_3dbd76accad2df2fff14b55452c828ef._comment new file mode 100644 index 0000000000..d8f681a1bf --- /dev/null +++ b/doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__/comment_3_3dbd76accad2df2fff14b55452c828ef._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="Xyem" + ip="178.79.137.64" + subject="comment 3" + date="2014-06-27T12:02:08Z" + content=""" +That is intentional. In my use case, there should never be any regular files in this particular annex at all. If there are, it means I have missed something! :) +"""]] diff --git a/doc/forum/overmounting_repository_at_home.mdwn b/doc/forum/overmounting_repository_at_home.mdwn new file mode 100644 index 0000000000..2bac1994f0 --- /dev/null +++ b/doc/forum/overmounting_repository_at_home.mdwn @@ -0,0 +1,12 @@ +Consider the following scenario: + +- A Server which holds the full repository +- A Laptop with a small disk, cloned the repository + +Now when i am online i'd just like to mount the repository from the server on over to the client, shadowing the local repository. But when offline and the server is not +mounted the local repository takes place. + +The Question is now what would be a viable concept to get this right. Especially will the assistant become confused when it runs on the server side and locally on the laptop +while the mount is in effect. Would it be sensible not to mount the whole repository tree but only parts like `.git/annex` or `.git/annex/objects`? + +Not tried this yet, but I am wondering whats the most viable approach would be. diff --git a/doc/forum/overmounting_repository_at_home/comment_1_399ac5014c489698e1e45deec4db7311._comment b/doc/forum/overmounting_repository_at_home/comment_1_399ac5014c489698e1e45deec4db7311._comment new file mode 100644 index 0000000000..90ce2ae403 --- /dev/null +++ b/doc/forum/overmounting_repository_at_home/comment_1_399ac5014c489698e1e45deec4db7311._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="https://openid.stackexchange.com/user/e65e6d0e-58ba-41de-84cc-1f2ba54cf574" + nickname="Mica Semrick" + subject="sounds like a bad idea... but..." + date="2014-06-24T04:18:51Z" + content=""" +From the few details you give, this sounds like a bad idea. git-annex tells different repos apart by using a UUID. You can see this UUID in `.git/config`. + +But if you are really insistent on doing this, you could always system link the folder to the spot you want it, then write a script that mounts the server in an arbitrary location and redoes the system link. I'd try this on a copy of the data or with some data that doesn't matter before going for it. +"""]] diff --git a/doc/forum/overmounting_repository_at_home/comment_2_d006d89ba204568cdee0731b6251ec1a._comment b/doc/forum/overmounting_repository_at_home/comment_2_d006d89ba204568cdee0731b6251ec1a._comment new file mode 100644 index 0000000000..2413948b7a --- /dev/null +++ b/doc/forum/overmounting_repository_at_home/comment_2_d006d89ba204568cdee0731b6251ec1a._comment @@ -0,0 +1,11 @@ +[[!comment format=mdwn + username="cehteh" + ip="217.8.62.137" + subject="comment 2" + date="2014-06-24T14:03:01Z" + content=""" +I know that this is a bad idea right now when done in a naive approach, I am wondering if git-annex could be made aware of this case and how it could be implemented. +A immature idea for example would be only to overmount the .git/annex/objects folder and let the git-annex check if the objects lay on a different device, if so, refuse to do operation on the object store. + +I started this thread to figure out if there is some interest in such functionality and if so, polishing it out to see how it could be done. +"""]] diff --git a/doc/forum/overmounting_repository_at_home/comment_3_3734b50c37cbec675813cbeca7bf4ce9._comment b/doc/forum/overmounting_repository_at_home/comment_3_3734b50c37cbec675813cbeca7bf4ce9._comment new file mode 100644 index 0000000000..029e9eba09 --- /dev/null +++ b/doc/forum/overmounting_repository_at_home/comment_3_3734b50c37cbec675813cbeca7bf4ce9._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://ypid.wordpress.com/" + ip="213.153.84.215" + subject="Already on todo list" + date="2014-06-24T16:58:05Z" + content=""" +As is appears to me, the feature you are suggesting is already on \"the todo list\" as [[union_mounting|todo/union_mounting]]. I would also really appreciate this feature … +"""]] diff --git a/doc/forum/performance_and_multiple_replication_problems/comment_5_8df6cc8b72e0e78c7380f7d471124498._comment b/doc/forum/performance_and_multiple_replication_problems/comment_5_8df6cc8b72e0e78c7380f7d471124498._comment new file mode 100644 index 0000000000..f881942f90 --- /dev/null +++ b/doc/forum/performance_and_multiple_replication_problems/comment_5_8df6cc8b72e0e78c7380f7d471124498._comment @@ -0,0 +1,12 @@ +[[!comment format=mdwn + username="zardoz" + ip="134.147.14.84" + subject="comment 5" + date="2014-07-08T12:26:58Z" + content=""" +Something to keep in mind for some point in the future: btrfs supports an efficient method by which one can inquire exactly which files have changed since a specified point in time, where the point in time is measured by a unit called «generation». + +A program can request the current «generation» index, and later ask btrfs which files have changed after that index, without needing to walk the file-system. This is currently implemented in the user-space program «btrfs filesystem find-new». While it’s called «find-new», this not only find newly created files, but also changed files. + +Currently, it seems one needs to be super-user to use «find-new», because it lists changed files for complete subvolumes, but since generations are stored per-file, in the future there will likely be a user-space method for regular users. +"""]] diff --git a/doc/forum/pgp_issue_in_log_file_after_upgrade_to_5.20140517/comment_1_807d7da99f732f2fa5f9d3cb1ba9f1a1._comment b/doc/forum/pgp_issue_in_log_file_after_upgrade_to_5.20140517/comment_1_807d7da99f732f2fa5f9d3cb1ba9f1a1._comment new file mode 100644 index 0000000000..0cd6a21d98 --- /dev/null +++ b/doc/forum/pgp_issue_in_log_file_after_upgrade_to_5.20140517/comment_1_807d7da99f732f2fa5f9d3cb1ba9f1a1._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4" + nickname="Ovidiu" + subject="comment 1" + date="2014-06-21T13:07:51Z" + content=""" +What exactly are safe permissions? +"""]] diff --git a/doc/forum/pgp_issue_in_log_file_after_upgrade_to_5.20140517/comment_2_92a7509fc42ab2347d57f080081d14b5._comment b/doc/forum/pgp_issue_in_log_file_after_upgrade_to_5.20140517/comment_2_92a7509fc42ab2347d57f080081d14b5._comment new file mode 100644 index 0000000000..4767ae75bb --- /dev/null +++ b/doc/forum/pgp_issue_in_log_file_after_upgrade_to_5.20140517/comment_2_92a7509fc42ab2347d57f080081d14b5._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 2" + date="2014-07-03T19:49:03Z" + content=""" +That error message seems to occur when git-annex is trying to upgrade itself to a newer version, but for some reason the temporary directory it uses for gpg allows some other user to write to it. Perhaps because of a wacky umask, I don't know. AFAICS it's only a warning and the upgrade still works, but I have made git-annex force a sane umask when creating this temp directory. +"""]] diff --git a/doc/forum/public__44___read_only_annex_without_location_tracking.mdwn b/doc/forum/public__44___read_only_annex_without_location_tracking.mdwn new file mode 100644 index 0000000000..88f8b21c2c --- /dev/null +++ b/doc/forum/public__44___read_only_annex_without_location_tracking.mdwn @@ -0,0 +1,7 @@ +I would like to use a public, read only annex to publish photos. I have a server, running gitolite, with git-annex setup, which I use successfully to sync content between my own devices. + +But, with a public annex, I would like the view of the repository available from the server to be that only the server has the content, and not to have, or give out any of the location tracking information about any other annexes? + +A more concrete example would be, how do I get a photo in to git annex locally, and then push this to the server for public access, without publishing information about my local repository? + +From the public annexes I have looked at, this does not appear to be done. So I am unsure if this is even possible, however it seems a desirable thing to do? diff --git a/doc/forum/public__44___read_only_annex_without_location_tracking/comment_1_47262f048a87fd6b781090f880a9bf99._comment b/doc/forum/public__44___read_only_annex_without_location_tracking/comment_1_47262f048a87fd6b781090f880a9bf99._comment new file mode 100644 index 0000000000..99ed6f25a7 --- /dev/null +++ b/doc/forum/public__44___read_only_annex_without_location_tracking/comment_1_47262f048a87fd6b781090f880a9bf99._comment @@ -0,0 +1,12 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 1" + date="2014-07-03T19:35:21Z" + content=""" +There's not a way to do it yet. + +The fundamental problem is that there is a variety of information stored on the git-annex branch, including location tracking information that you don't want (locations on non-public repositories), location tracking information you do want (locations on public repositories), urls, metadata, repository configurations and descriptions (some for public and some for non-public repositories). It seems fairly hard to draw a line. And once a line is drawn, there would be two diverged git-annex branches on the public and private repos, and the private repo would need to synthesize an updated version of the public branch every time it synced. + +Instead, the last time this came up, I added the remote..annex-readonly setting. This allows for at least having a private repository (or a whole network of repositories that all communicate together but remain private) that pulls changes from a public repo, but avoids making changes to it. Certainly not a complete solution, since changes have to be contributed to the public repo in some out-of-band way, like perhaps using git-format-patch and git-am. +"""]] diff --git a/doc/forum/public__44___read_only_annex_without_location_tracking/comment_2_ec3ff6487c9e5c89c7e508d72518bd50._comment b/doc/forum/public__44___read_only_annex_without_location_tracking/comment_2_ec3ff6487c9e5c89c7e508d72518bd50._comment new file mode 100644 index 0000000000..ad74e68660 --- /dev/null +++ b/doc/forum/public__44___read_only_annex_without_location_tracking/comment_2_ec3ff6487c9e5c89c7e508d72518bd50._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="cbaines" + ip="82.19.50.118" + subject="comment 2" + date="2014-07-03T20:13:20Z" + content=""" +Thanks for your response. + +The method you describe sounds like it might just do. I'll have a try, and see if it works out :) +"""]] diff --git a/doc/forum/recovery_from_failed_merge.mdwn b/doc/forum/recovery_from_failed_merge.mdwn new file mode 100644 index 0000000000..802c66e511 --- /dev/null +++ b/doc/forum/recovery_from_failed_merge.mdwn @@ -0,0 +1,7 @@ +Starting the assistant version 5.20140613 on my repository (~60GB), it performed a merge +with an offline-repository, deleting a large part of the files. +Since the repo is in direct mode, I cannot do a git revert. The other repo is not available anymore + +Any way of getting them back? +Also, du shows me that the .git/annex/objects folder has approximately the size of my repo before the incident. + diff --git a/doc/forum/recovery_from_failed_merge/comment_1_84e5b55d473d16bc9bdba5d88dc29bc3._comment b/doc/forum/recovery_from_failed_merge/comment_1_84e5b55d473d16bc9bdba5d88dc29bc3._comment new file mode 100644 index 0000000000..3f61d8cb9e --- /dev/null +++ b/doc/forum/recovery_from_failed_merge/comment_1_84e5b55d473d16bc9bdba5d88dc29bc3._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="108.236.230.124" + subject="comment 1" + date="2014-06-16T17:58:22Z" + content=""" +All your files are still there.. + +You can either use `git annex indirect` to switch to indirect mode and then `git revert`, or you could git clone the repo to someplace else, do the revert there, and then run `git annex sync` in first the clone and then in the direct mode repo to sync the reversion back. +"""]] diff --git a/doc/forum/repo_corruption_in_usb_external_drive.mdwn b/doc/forum/repo_corruption_in_usb_external_drive.mdwn new file mode 100644 index 0000000000..989126837e --- /dev/null +++ b/doc/forum/repo_corruption_in_usb_external_drive.mdwn @@ -0,0 +1,41 @@ +I'm sorry to ask this again, but I'm not being able to find my previous message regarding this issue. I'm finding very hard to find older posts in forums. Is there a way to search for all my posted messages? +Anyway, after some automount problems (changed mount point name), my usb repo (direct) ended in a weird state. +See for instance the screenshot: + +In addition making a git-annex info gives the following: + + * repository mode: direct + * trusted repositories: error: refs/heads/master does not point to a valid object! + * error: refs/heads/synced/git-annex does not point to a valid object! + * error: refs/heads/synced/master does not point to a valid object! + * error: refs/remotes/sapo/annex/direct/master does not point to a valid object! + * error: refs/remotes/sapo/git-annex does not point to a valid object! + * error: refs/remotes/sapo/master does not point to a valid object! + * error: refs/synced/1912d5a7-3929-47f0-8e25-a071d7079cc4/git-annex does not point to a valid object! + * error: refs/synced/1912d5a7-3929-47f0-8e25-a071d7079cc4/master does not point to a valid object! + * error: refs/heads/master does not point to a valid object! + * error: refs/heads/synced/git-annex does not point to a valid object! + * error: refs/heads/synced/master does not point to a valid object! + * error: refs/remotes/sapo/annex/direct/master does not point to a valid object! + * error: refs/remotes/sapo/git-annex does not point to a valid object! + * error: refs/remotes/sapo/master does not point to a valid object! + * error: refs/synced/1912d5a7-3929-47f0-8e25-a071d7079cc4/git-annex does not point to a valid object! + * error: refs/synced/1912d5a7-3929-47f0-8e25-a071d7079cc4/master does not point to a valid object! + * fatal: index file smaller than expected + * git-annex: failed to read sha from git write-tree + + +What should I do? delete the usb repo and start again. Thank god this is just a trial. + +What happens if a file gets corrupted. Lets say it is corrupted in repo A, and fine in repo B. Will the good copy be overridden? + +git-repair takes a long time and seems to be stuck there, or maybe it just takes a long time (10Gb repo). Is this normal? + > git-annex repair + Running git fsck ... + Initialized empty Git repository in /tmp/tmprepo.1/.git/ + Trying to recover missing objects from remote sapo. + Unpacking all pack files. + Unpacking objects: 100% (348848/348848), done. + + +Thanks in advance. diff --git a/doc/forum/repo_corruption_in_usb_external_drive/comment_1_d9122bb0cc3551d92877c299a25b9c9e._comment b/doc/forum/repo_corruption_in_usb_external_drive/comment_1_d9122bb0cc3551d92877c299a25b9c9e._comment new file mode 100644 index 0000000000..ff325983d3 --- /dev/null +++ b/doc/forum/repo_corruption_in_usb_external_drive/comment_1_d9122bb0cc3551d92877c299a25b9c9e._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 1" + date="2014-07-15T18:50:29Z" + content=""" +It's normal for git-repair to take a long time. + +git-annex uses checksums to detect if a file gets corrupted. +"""]] diff --git a/doc/forum/rsync_asking_for_an_unknown_password.mdwn b/doc/forum/rsync_asking_for_an_unknown_password.mdwn new file mode 100644 index 0000000000..1126c31eab --- /dev/null +++ b/doc/forum/rsync_asking_for_an_unknown_password.mdwn @@ -0,0 +1,60 @@ +Hello, + +I am on OS X, using version 5.20140613. I installed using brew. + +I have a really simple example where I'm trying to use local rsync to test transfer between two repos. It keeps asking me for a password over and over. I do not know what password it is. + +I'm literally doing just this: + + $ cd annex-tests + $ mkdir target + $ mkdir source + $ cat > source/text + hi this is a test + $ cd source + $ git init + Initialized empty Git repository in /Users/me/Documents/annex-tests/source/.git/ + $ git annex init + init ok + (Recording state in git...) + $ git annex initremote rsync-login type=rsync rsyncurl=me@localhost:/Users/me/Documents/annex-tests/target encryption=none + initremote rsync-login ok + (Recording state in git...) + $ git annex describe rsync-login "test rsync url with a login" + describe rsync-login ok + (Recording state in git...) + $ git annex add text + add text ok + (Recording state in git...) + $ git annex sync rsync-login --content + commit ok + copy text copy text (checking rsync-login...) Password: + Password: + Password: + Password: + Password: + +I try a blank password, I try my login password, I tried 'none' (the encryption type), I try everything.. no dice + +So right off the bat let me explain a few things. + +1 - Why not use rsa keys? Because I was having the exact same problem and I wanted to make it even easier and use login/password + +2 - Why not use the webapp since a few forum posts say you can set passwords in there? because my annex doesn't seem to recognize the command. + + $ git annex webapp + git-annex: unknown command webapp + +3 - I verified my rsync command/url appears ok by doing the following. The password for that command is as expected, it is my username password: + + $ cat > test2 + hi test + $ rsync test2 me@localhost:/Users/me/Documents/annex-tests/target + Password: + $ cat /Users/me/Documents/annex-tests/target/test2 + hi test + + +Any help will be appreciated! + + diff --git a/doc/forum/rsync_asking_for_an_unknown_password/comment_1_f23d1c04a27625089eaef5b4bb7f8456._comment b/doc/forum/rsync_asking_for_an_unknown_password/comment_1_f23d1c04a27625089eaef5b4bb7f8456._comment new file mode 100644 index 0000000000..b761838721 --- /dev/null +++ b/doc/forum/rsync_asking_for_an_unknown_password/comment_1_f23d1c04a27625089eaef5b4bb7f8456._comment @@ -0,0 +1,12 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 1" + date="2014-07-11T18:41:32Z" + content=""" +Re brew not being built with support for the webapp, I suggest you file a bug on brew about this. IIRC they were, or were planning to include the webapp in the build. They may have lost track of that. + +Now, what does rsyncurl=me@localhost:/Users/me/Documents/annex-tests/target say? It says to use rsync with the \"url\" me@localhost:/Users/me/Documents/annex-tests/target. What does rsync do with that url? It tries to ssh into localhost, as user \"me\". There's no magic here. I don't know why your login password isn't working, but you can verify by passing --debug to git-annex that it just runs rsync with the url you've given it. + +BTW, are you sure you want to use a rsync special remote at all, rather than a regular git remote using ssh? +"""]] diff --git a/doc/forum/rsync_asking_for_an_unknown_password/comment_2_ce4b399fdb2f04e30bd8a951994f1c80._comment b/doc/forum/rsync_asking_for_an_unknown_password/comment_2_ce4b399fdb2f04e30bd8a951994f1c80._comment new file mode 100644 index 0000000000..494aaa2359 --- /dev/null +++ b/doc/forum/rsync_asking_for_an_unknown_password/comment_2_ce4b399fdb2f04e30bd8a951994f1c80._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawk3JJvaarUKd7xShCMze_kpHVcuCzFrWTI" + nickname="Lucas" + subject="comment 2" + date="2014-07-15T16:18:01Z" + content=""" +Well I got the password issue straightened out (was me, don't ask). + +Both the rsync and git via ssh are working well, thanks! +"""]] diff --git a/doc/forum/update_via_cabal_fails.mdwn b/doc/forum/update_via_cabal_fails.mdwn new file mode 100644 index 0000000000..aae8461c6a --- /dev/null +++ b/doc/forum/update_via_cabal_fails.mdwn @@ -0,0 +1,35 @@ +I tried to update git-annex via cabal. It fails due to lens not installing: + + juh@sokrates:~$ cabal update + Downloading the latest package list from hackage.haskell.org + juh@sokrates:~$ cabal install git-annex + Resolving dependencies... + In order, the following will be installed: + lens-4.2 (new version) + DAV-0.6.2 (reinstall) changes: http-client-0.3.1.1 -> 0.3.3.1, + http-client-tls-0.2.1.1 added, http-types-0.8.4 -> 0.8.5, lens-4.1.2 -> 4.2, + network-2.4.1.2 added, optparse-applicative-0.7.0.2 added, xml- conduit-1.2.0.1 + -> 1.2.0.2, xml-hamlet-0.4.0.8 added + git-annex-5.20140707 (new package) + Warning: Note that reinstalls are always dangerous. Continuing anyway... + [1 of 1] Compiling Main ( /tmp/lens-4.2-3107/lens-4.2/Setup. lhs, /tmp/lens-4.2-3107/lens-4.2/dist/setup/Main.o ) + Linking /tmp/lens-4.2-3107/lens-4.2/dist/setup/setup ... + Configuring lens-4.2... + Building lens-4.2... + Preprocessing library lens-4.2... + + src/Control/Lens/Internal/Zoom.hs:47:8: + Could not find module `Control.Monad.Trans.Except' + Perhaps you meant + Control.Monad.Trans.Cont (from transformers-0.3.0.0) + Control.Monad.Trans.Error (from transformers-0.3.0.0) + Control.Monad.Trans.List (from transformers-0.3.0.0) + Use -v to see a list of the files searched for. + Failed to install lens-4.2 + cabal: Error: some packages failed to install: + DAV-0.6.2 depends on lens-4.2 which failed to install. + git-annex-5.20140707 depends on lens-4.2 which failed to install. + lens-4.2 failed during the building phase. The exception was: + ExitFailure 1 + +I am not an experienced user of cabal. So any hints to solve the conflicts are appreciated. diff --git a/doc/forum/update_via_cabal_fails/comment_1_e1235dc2acd3bac3dd51b7614dabbb88._comment b/doc/forum/update_via_cabal_fails/comment_1_e1235dc2acd3bac3dd51b7614dabbb88._comment new file mode 100644 index 0000000000..71fd0e60f9 --- /dev/null +++ b/doc/forum/update_via_cabal_fails/comment_1_e1235dc2acd3bac3dd51b7614dabbb88._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 1" + date="2014-07-09T17:58:48Z" + content=""" +It seems like you must have transformers-compat 0.1.1, and lens's dependency is slightly wrong, accepting that extremly old version. You'll need to upgrade it. +"""]] diff --git a/doc/forum/use_case:_unique_indentifier_of_objets___40__doi_like__41__.mdwn b/doc/forum/use_case:_unique_indentifier_of_objets___40__doi_like__41__.mdwn new file mode 100644 index 0000000000..76f03452dc --- /dev/null +++ b/doc/forum/use_case:_unique_indentifier_of_objets___40__doi_like__41__.mdwn @@ -0,0 +1,20 @@ +Dear all, + From some time now I am wondering about a way to index a set of files, lets say PDF documents. The idea is to have a unique identifier for each file and to cross-reference using this identifier. For instance, I use a project management (PM) software (web based) on a public server of my university. Then I have a set of tasks saying, review document X, or Y. And those documents are stored on an internal server of my lab. +I see several options: + +1. Upload the required documents to the PM site and directly link +2. Share online my internal server and use the URL of the docs in the PM +3. Just use the unique identifier in the PM, and then look in git annex for that ID +4. Use some sort of document management system (DMS) + +Options 1 and 2 are impractical for several reasons. Option 4 usually requires that your files are inside the DMS. +So my questions are: + +* Do you think this is doable with git-annex? +* Is there an easy way to ask it: give me the document with this index? +* I think the best answer for this question is: git annex find --include '*' --format='${key} ${file}' | grep +* And conversely, how do I find the key of a certain document? + +Thanks in advance. +Best, + Juan diff --git a/doc/forum/use_case:_unique_indentifier_of_objets___40__doi_like__41__/comment_1_955f3aac12c1ddb41267c5a23ccb79e3._comment b/doc/forum/use_case:_unique_indentifier_of_objets___40__doi_like__41__/comment_1_955f3aac12c1ddb41267c5a23ccb79e3._comment new file mode 100644 index 0000000000..069d41c106 --- /dev/null +++ b/doc/forum/use_case:_unique_indentifier_of_objets___40__doi_like__41__/comment_1_955f3aac12c1ddb41267c5a23ccb79e3._comment @@ -0,0 +1,12 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="comment 1" + date="2014-07-03T19:10:53Z" + content=""" +To make git-annex output the key of a file, run: `git annex lookupkey $file` + +I don't know if the git-annex key is appropriate for your use-case. If the files never get changed, then it's a nice stable identifier. If ongoing changes are made to a file, and you want to link to the most recent version, the key would not be useful. + +You might also look at git-annex's [[metadata]]; you could make up some metadata field and value and attach it to a file, and it would persist as the file was modified. +"""]] diff --git a/doc/forum/use_case:_unique_indentifier_of_objets___40__doi_like__41__/comment_2_0aff36755f49afddd5482a602a1ccd2b._comment b/doc/forum/use_case:_unique_indentifier_of_objets___40__doi_like__41__/comment_2_0aff36755f49afddd5482a602a1ccd2b._comment new file mode 100644 index 0000000000..2ef754f163 --- /dev/null +++ b/doc/forum/use_case:_unique_indentifier_of_objets___40__doi_like__41__/comment_2_0aff36755f49afddd5482a602a1ccd2b._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawmTNrhkVQ26GBLaLD5-zNuEiR8syTj4mI8" + nickname="Juan" + subject="comment 2" + date="2014-07-09T15:32:49Z" + content=""" +If I get this right, the key will change every time the file is changed. +If that's the case, seems that it won't be useful for my case. +Thanks for the time. +"""]] diff --git a/doc/forum/webapp_does_not_start.mdwn b/doc/forum/webapp_does_not_start.mdwn new file mode 100644 index 0000000000..3003af7d01 --- /dev/null +++ b/doc/forum/webapp_does_not_start.mdwn @@ -0,0 +1,72 @@ +Sorry, I have again an issue :( + +What could be the problem that the webapp is not starting (in Windows)? git annex just exists without messages, connection to localhost failes of course + + me@laptop /cygdrive/c/Data + $ git annex --verbose --debug webapp + + me@laptop /cygdrive/c/Data + $ + +If I run it within an annexed directory I get at least one message - but it still immideately exits: + + me@laptop /cygdrive/c/Data/annex + $ git annex --verbose --debug webapp + [2014-07-11 19:06:58 Pacific Daylight Time] chat: git-annex ["--verbose","--debug","webapp"] + + me@laptop /cygdrive/c/Data/annex + $ + + git-annex version: 5.20140707-g8116d10 + build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV DNS Feeds Quvi TDFA CryptoHash + key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL + remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external + local repository version: 5 + supported repository version: 5 + upgrade supported from repository versions: 2 3 4 + + +EDIT: +1.) Interestingly, also "git annex test" fails: + + [...] + ok + push origin To C:/Data/.t\repo + bcc4611..91f5218 git-annex -> synced/git-annex + 6f47922..92c578a annex/direct/master -> synced/master + + ok + add ../dir2/foo ok + (Recording state in git...) + FAIL + Exception: .t/tmprepo9/.git/annex/journal: getDirectoryContents: permission denied (Access is denied.) + + 2 out of 83 tests failed + (This could be due to a bug in git-annex, or an incompatability + with utilities, such as git, installed on this system.) + + + +2.) There's really something very weird going on. At the beginning it worked. Then it stopped (as per above). Sometimes, when I start it using "Git Bash" it works. But then not any more. +3.) Rebooting the machine does not help + +EDIT once again: +4.) I am afraid there is something big broken. Suddenly I could start the daemon again. The thing I did was to delete my complete annex. +But if I shutdown the daemon now I get: + + $ git annex webapp + Launching web browser on file://C:\cygwin\tmp\webapp85796.html + + Detected a filesystem without fifo support. + + Disabling ssh connection caching. + + Detected a crippled filesystem. + + Enabling direct mode. + + (Recording state in git...) + WebApp crashed: ExitFailu + +... and the whole loop starts again. webapp daemon does not start as long as I delete the annex. Interestingly this is independent from %USERPROFILE%\.config. Deleting this directory does not change anything. So somehow git-annex "knows" that there is somewhere an annex and fails if it is. + diff --git a/doc/forum/webapp_does_not_start/comment_1_dd27d30ce305562a1552f46c87b1cd27._comment b/doc/forum/webapp_does_not_start/comment_1_dd27d30ce305562a1552f46c87b1cd27._comment new file mode 100644 index 0000000000..cd3a7d3bc7 --- /dev/null +++ b/doc/forum/webapp_does_not_start/comment_1_dd27d30ce305562a1552f46c87b1cd27._comment @@ -0,0 +1,12 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 1" + date="2014-07-14T19:05:32Z" + content=""" +git-annex stores the locations of repositories in `.config/git-annex/autostart` in what passes for a home directory on Windows. + +Are you sure it doesn't manage to at least open a web browser tab, possibly one with an error in it? This would be easy to miss if you have a lot of tabs open. I seem to have partially reproduced this, at least that's the behavior I see. + +The root of the problem seems to be that it thinks the daemon is running, but it's not. So it just opens the web browser and then stops. After I deleted .git/annex/daemon*, and .git/annex/url and .git/annex/daemon.log, `git annex webapp` worked again. +"""]] diff --git a/doc/forum/webapp_does_not_start/comment_2_ef37f40288a1181ca619ae13b0f7a994._comment b/doc/forum/webapp_does_not_start/comment_2_ef37f40288a1181ca619ae13b0f7a994._comment new file mode 100644 index 0000000000..551f518459 --- /dev/null +++ b/doc/forum/webapp_does_not_start/comment_2_ef37f40288a1181ca619ae13b0f7a994._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 2" + date="2014-07-14T20:06:03Z" + content=""" +I think that I have fixed this problem. The Windows autobuilder should produce a fixed build within an hour. +"""]] diff --git a/doc/forum/webapp_does_not_start/comment_3_6e625dba9f7fa36bf9c7e9d77fbadeff._comment b/doc/forum/webapp_does_not_start/comment_3_6e625dba9f7fa36bf9c7e9d77fbadeff._comment new file mode 100644 index 0000000000..296e066a7a --- /dev/null +++ b/doc/forum/webapp_does_not_start/comment_3_6e625dba9f7fa36bf9c7e9d77fbadeff._comment @@ -0,0 +1,9 @@ +[[!comment format=mdwn + username="divB" + ip="128.12.90.218" + subject="comment 3" + date="2014-07-15T05:43:35Z" + content=""" +Thank you, really really great. This part seems to work again. +For some reason, the assistant takes the wrong (?) git.exe (as I described here: http://git-annex.branchable.com/forum/Restricting_SSH_+_supply_key/) +"""]] diff --git a/doc/forum/whereis_command_with_file_names_instead_of_hashes.mdwn b/doc/forum/whereis_command_with_file_names_instead_of_hashes.mdwn new file mode 100644 index 0000000000..6b4b3bf016 --- /dev/null +++ b/doc/forum/whereis_command_with_file_names_instead_of_hashes.mdwn @@ -0,0 +1,7 @@ +Hi + +I have a laptop, server and a regular PC. Laptop and PC are using same "backup" repo on server. Thay all get notified via ssh. My goal is to have synchronization and backup in one remote repo. When I wan to list all files on all repos i do: + + git-annex whereis -A (some files do fail. Don't know why) + +But that displays hashes. Not file names. How can to list file names on all repos instead of hashes ? diff --git a/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_1_4eaca07152916adc18032fb404e4dd92._comment b/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_1_4eaca07152916adc18032fb404e4dd92._comment new file mode 100644 index 0000000000..3ad0becfe7 --- /dev/null +++ b/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_1_4eaca07152916adc18032fb404e4dd92._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://ypid.wordpress.com/" + ip="213.153.84.215" + subject="-A --all operate on all versions of all files" + date="2014-07-07T07:42:03Z" + content=""" +Hi + +`-A` operates on all the files even on files which are not accessible from your current working directory. If you omit the `-A` then filenames will be printed. +"""]] diff --git a/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_2_94b43ac23ff8332b35723422eede8997._comment b/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_2_94b43ac23ff8332b35723422eede8997._comment new file mode 100644 index 0000000000..2ab6b8e0bf --- /dev/null +++ b/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_2_94b43ac23ff8332b35723422eede8997._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawkNE-H4vEcbcGndxq5daT8qUb7yIf7r1OE" + nickname="Łukasz" + subject="comment 2" + date="2014-07-07T08:40:57Z" + content=""" +Yes they will be omitted. I just want to list files that are on my laptop (for example) and on remote repo. +"""]] diff --git a/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_3_45ffa6dd17667ecd6685f85f34046eff._comment b/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_3_45ffa6dd17667ecd6685f85f34046eff._comment new file mode 100644 index 0000000000..b0d48ef990 --- /dev/null +++ b/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_3_45ffa6dd17667ecd6685f85f34046eff._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://ypid.wordpress.com/" + ip="213.153.84.215" + subject="git annex whereis --in origin" + date="2014-07-07T09:45:48Z" + content=""" +So you only want to see whereis for files which are present on certain annexes? You can use `git annex whereis --in e64553d0-779a-4c79-939a-d5b7f3e56a57` or `git annex whereis --in origin` (modify the repo names). + +Have a look on [QUERY COMMANDS](/git-annex/). +"""]] diff --git a/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_4_d459fbcf0db59b821ae67f4949e48103._comment b/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_4_d459fbcf0db59b821ae67f4949e48103._comment new file mode 100644 index 0000000000..24643f063d --- /dev/null +++ b/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_4_d459fbcf0db59b821ae67f4949e48103._comment @@ -0,0 +1,14 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawkNE-H4vEcbcGndxq5daT8qUb7yIf7r1OE" + nickname="Łukasz" + subject="comment 4" + date="2014-07-07T10:05:06Z" + content=""" +git-annex whereis --not --in here + +Does not display anything. + +git-annex whereis --not --in here -A + +Displays files on remote only. Every file has an additional message (0 copies) failed. This displays hash names. How to display file names ? I am 100% sure that my remote repo has some files that are not present on laptop or PC. +"""]] diff --git a/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_5_e52a8c9cb418fbc2e2cba71f37bd44ad._comment b/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_5_e52a8c9cb418fbc2e2cba71f37bd44ad._comment new file mode 100644 index 0000000000..eff34edb6a --- /dev/null +++ b/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_5_e52a8c9cb418fbc2e2cba71f37bd44ad._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawkNE-H4vEcbcGndxq5daT8qUb7yIf7r1OE" + nickname="Łukasz" + subject="comment 5" + date="2014-07-07T10:06:03Z" + content=""" +One more thing. I am using indirect mode with assistant. If that matters in some way. +"""]] diff --git a/doc/git-annex.mdwn b/doc/git-annex.mdwn index 8a2a3f7c6d..8ba3558d32 100644 --- a/doc/git-annex.mdwn +++ b/doc/git-annex.mdwn @@ -139,9 +139,10 @@ subdirectories). * `sync [remote ...]` Use this command when you want to synchronize the local repository with - one or more of its remotes. You can specify the remotes to sync with; - the default is to sync with all remotes. Or specify `--fast` to sync with - the remotes with the lowest annex-cost value. + one or more of its remotes. You can specify the remotes to sync with by + name; the default is to sync with all remotes. + Or specify `--fast` to sync with the remotes with the + lowest annex-cost value. The sync process involves first committing all local changes, then fetching and merging the `synced/master` and the `git-annex` branch @@ -169,8 +170,8 @@ subdirectories). * `merge` - This performs the same merging that is done by the sync command, but - without pushing or pulling any data. + This performs the same merging (and merge conflict resolution) + that is done by the sync command, but without pushing or pulling any data. One way to use this is to put `git annex merge` into a repository's post-receive hook. Then any syncs to the repository will update its working @@ -268,7 +269,7 @@ subdirectories). Use `--template` to control where the files are stored. The default template is '${feedtitle}/${itemtitle}${extension}' - (Other available variables: feedauthor, itemauthor, itemsummary, itemdescription, itemrights, itemid, itempubdate) + (Other available variables: feedauthor, itemauthor, itemsummary, itemdescription, itemrights, itemid, itempubdate, title, author) The `--relaxed` and `--fast` options behave the same as they do in addurl. @@ -644,7 +645,8 @@ subdirectories). `--format`. The default output format is the same as `--format='${file}\\n'` These variables are available for use in formats: file, key, backend, - bytesize, humansize, keyname, hashdirlower, hashdirmixed, mtime. + bytesize, humansize, keyname, hashdirlower, hashdirmixed, mtime (for + the mtime field of a WORM key). * `whereis [path ...]` @@ -937,6 +939,16 @@ subdirectories). Most MATCHING OPTIONS can be used with findref, to limit the files it finds. However, the --include and --exclude options will not work. +* `resolvemerge` + + Resolves a conflicted merge, by adding both conflicting versions of the + file to the tree, using variants of their filename. This is done + automatically when using `git annex sync` or `git annex merge`. + + Note that only merge conflicts that involve an annexed file are resolved. + Merge conflicts between two files that are not annexed will not be + automatically resolved. + * `test` This runs git-annex's built-in test suite. @@ -1345,8 +1357,12 @@ Here are all the supported configuration settings. * `annex.genmetadata` Set this to `true` to make git-annex automatically generate some metadata - when adding files to the repository. In particular, it stores - year and month metadata, from the file's modification date. + when adding files to the repository. + + In particular, it stores year and month metadata, from the file's + modification date. + + When importfeed is used, it stores additional metadata from the feed. * `annex.queuesize` @@ -1382,9 +1398,11 @@ Here are all the supported configuration settings. * `annex.alwayscommit` By default, git-annex automatically commits data to the git-annex branch - after each command is run. To disable these commits, - set to `false`. Then data will only be committed when - running `git annex merge` (or by automatic merges) or `git annex sync`. + after each command is run. If you have a series + of commands that you want to make a single commit, you can + run the commands with `-c annex.alwayscommit=false`. You can later + commit the data by running `git annex merge` (or by automatic merges) + or `git annex sync`. * `annex.delayadd` diff --git a/doc/install/Android.mdwn b/doc/install/Android.mdwn index 1731f108aa..080fad80bf 100644 --- a/doc/install/Android.mdwn +++ b/doc/install/Android.mdwn @@ -27,7 +27,7 @@ of Bath CS department. git-annex can be built from source for Android. 1. Run `standalone/android/buildchroot` as root (requires debootstrap). - This builds a chroot with an `builder` user. + This builds a chroot with a `builder` user. The rest of the build will run in this chroot as that user. 2. In the chroot, run `standalone/android/install-haskell-packages` Note that this will break from time to time as new versions of packages diff --git a/doc/install/Fedora.mdwn b/doc/install/Fedora.mdwn index c1769a10d6..9c31165f83 100644 --- a/doc/install/Fedora.mdwn +++ b/doc/install/Fedora.mdwn @@ -3,6 +3,8 @@ git-annex is available in recent versions of Fedora. Should be as simple as: `yum install git-annex` +Note: Fedora's build does not currently include the git-annex webapp. + ---- To install the latest version of git-annex on Fedora 18 and later, you can use `cabal`: diff --git a/doc/install/OSX.mdwn b/doc/install/OSX.mdwn index 331f83e917..5a1505c600 100644 --- a/doc/install/OSX.mdwn +++ b/doc/install/OSX.mdwn @@ -20,7 +20,8 @@ several more. Handy if you don't otherwise have git installed. ## autobuilds -[[Joey]] autobuilds the app for Mavericks. +[[Joey]] autobuilds the app for Mavericks, thanks to Kevin McKenzie +for hosting the autobuilder. * [autobuild of git-annex.dmg](https://downloads.kitenet.net/git-annex/autobuild/x86_64-apple-mavericks/git-annex.dmg) ([build logs](https://downloads.kitenet.net/git-annex/autobuild/x86_64-apple-mavericks/)) diff --git a/doc/install/Windows.mdwn b/doc/install/Windows.mdwn index b617a1cf65..79aaace92e 100644 --- a/doc/install/Windows.mdwn +++ b/doc/install/Windows.mdwn @@ -4,8 +4,9 @@ git-annex now does Windows! * Then, [install git-annex](https://downloads.kitenet.net/git-annex/windows/current/) This port is now in reasonably good shape for command-line use of -git-annex. The assistant and webapp are still in an early state. -See [[todo/windows_support]] for current status. +git-annex. The assistant and webapp are also usable. There are some known +problems and parts that don't work. See [[todo/windows_support]] for +current status. The autobuilder is not currently able to run the test suite, so testing git-annex on Windows is up to you! To check that the build of @@ -19,7 +20,7 @@ should end with "All tests passed". A daily build is also available, thanks to Yury V. Zaytsev and [NEST](http://nest-initiative.org/). -* [download](https://qa.nest-initiative.org/view/msysGit/job/msysgit-git-annex-assistant-test/lastSuccessfulBuild/artifact/git-annex/git-annex-installer.exe) ([build logs](https://qa.nest-initiative.org/view/msysGit/job/msysgit-git-annex-assistant-test/)) +* [download](https://downloads.kitenet.net/git-annex/autobuild/windows/) ([build logs](https://qa.nest-initiative.org/view/msysGit/job/msysgit-git-annex-assistant-test/)) ## building it yourself diff --git a/doc/install/cabal/comment_36_2a095a5af53a356bd29abd22a9cb1bea._comment b/doc/install/cabal/comment_36_2a095a5af53a356bd29abd22a9cb1bea._comment new file mode 100644 index 0000000000..f6e0d85034 --- /dev/null +++ b/doc/install/cabal/comment_36_2a095a5af53a356bd29abd22a9cb1bea._comment @@ -0,0 +1,16 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawkNcHu5T1Pxzl-r2co9vf6SxXYWubv2P04" + nickname="Matthew" + subject="I did indeed get problems on Ubuntu 13.04" + date="2014-06-25T01:01:43Z" + content=""" +The issues I had were version mismatches when resolving dependencies of git-annex. + +It seems that when you install haskell-platform package with apt-get, it installs a bunch of haskell dependencies as apt packages, yet those aren't needed for any other system packages. So some people here who complain about version mismatches might not have intended to install any Haskell libraries with apt, they just come along for the ride by default. + +I can't remember the exact ones, but I ended up uninstalling some of the stuff that gets auto-installed along with haskell-platform, and using cabal to build those. Then all the git-annex dependencies worked. + +Why 13.04 in this day and age? Using Zentyal as a home server/gateway, and it currently runs on 13.04. + +This method might not work if you installed other apt packages that _do_ need those apt-based Haskell libraries. But if git-annex is all you need that uses the Haskell platform, might work. +"""]] diff --git a/doc/install/cabal/comment_37_f33e1a4575dccc20b0d3d7c00e6db709._comment b/doc/install/cabal/comment_37_f33e1a4575dccc20b0d3d7c00e6db709._comment new file mode 100644 index 0000000000..daf7d0b5a8 --- /dev/null +++ b/doc/install/cabal/comment_37_f33e1a4575dccc20b0d3d7c00e6db709._comment @@ -0,0 +1,69 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawmveNWaFIL1zEehHr_0416bKBzsul5tGlE" + nickname="Daniel" + subject="Install fails horribly" + date="2014-07-10T23:11:51Z" + content=""" +``` +lyriondesktop:/home/zilti/tmp # cabal install c2hs +Resolving dependencies... +Configuring c2hs-0.17.2... +Building c2hs-0.17.2... +Preprocessing executable 'c2hs' for c2hs-0.17.2... +[ 1 of 26] Compiling Data.DLists ( src/Data/DLists.hs, dist/build/c2hs/c2hs-tmp/Data/DLists.o ) +[ 2 of 26] Compiling Control.StateTrans ( src/Control/StateTrans.hs, dist/build/c2hs/c2hs-tmp/Control/StateTrans.o ) + +src/Control/StateTrans.hs:77:1: Warning: + Module `Prelude' does not export `catch' +[ 3 of 26] Compiling Data.Errors ( src/Data/Errors.hs, dist/build/c2hs/c2hs-tmp/Data/Errors.o ) +[ 4 of 26] Compiling Data.Attributes ( src/Data/Attributes.hs, dist/build/c2hs/c2hs-tmp/Data/Attributes.o ) +[ 5 of 26] Compiling Text.Lexers ( src/Text/Lexers.hs, dist/build/c2hs/c2hs-tmp/Text/Lexers.o ) +[ 6 of 26] Compiling Control.StateBase ( src/Control/StateBase.hs, dist/build/c2hs/c2hs-tmp/Control/StateBase.o ) +[ 7 of 26] Compiling Data.NameSpaces ( src/Data/NameSpaces.hs, dist/build/c2hs/c2hs-tmp/Data/NameSpaces.o ) +[ 8 of 26] Compiling C2HS.C.Attrs ( src/C2HS/C/Attrs.hs, dist/build/c2hs/c2hs-tmp/C2HS/C/Attrs.o ) +[ 9 of 26] Compiling C2HS.C.Builtin ( src/C2HS/C/Builtin.hs, dist/build/c2hs/c2hs-tmp/C2HS/C/Builtin.o ) +[10 of 26] Compiling Paths_c2hs ( dist/build/autogen/Paths_c2hs.hs, dist/build/c2hs/c2hs-tmp/Paths_c2hs.o ) +[11 of 26] Compiling C2HS.Config ( src/C2HS/Config.hs, dist/build/c2hs/c2hs-tmp/C2HS/Config.o ) +[12 of 26] Compiling C2HS.Switches ( src/C2HS/Switches.hs, dist/build/c2hs/c2hs-tmp/C2HS/Switches.o ) +[13 of 26] Compiling C2HS.Version ( src/C2HS/Version.hs, dist/build/c2hs/c2hs-tmp/C2HS/Version.o ) +[14 of 26] Compiling System.CIO ( src/System/CIO.hs, dist/build/c2hs/c2hs-tmp/System/CIO.o ) +[15 of 26] Compiling Control.State ( src/Control/State.hs, dist/build/c2hs/c2hs-tmp/Control/State.o ) +[16 of 26] Compiling C2HS.State ( src/C2HS/State.hs, dist/build/c2hs/c2hs-tmp/C2HS/State.o ) +[17 of 26] Compiling C2HS.CHS.Lexer ( src/C2HS/CHS/Lexer.hs, dist/build/c2hs/c2hs-tmp/C2HS/CHS/Lexer.o ) + +src/C2HS/CHS/Lexer.hs:612:16: Warning: + Defined but not used: `lexeme' +[18 of 26] Compiling C2HS.CHS ( src/C2HS/CHS.hs, dist/build/c2hs/c2hs-tmp/C2HS/CHS.o ) +[19 of 26] Compiling C2HS.Gen.Header ( src/C2HS/Gen/Header.hs, dist/build/c2hs/c2hs-tmp/C2HS/Gen/Header.o ) +[20 of 26] Compiling C2HS.C.Trav ( src/C2HS/C/Trav.hs, dist/build/c2hs/c2hs-tmp/C2HS/C/Trav.o ) +[21 of 26] Compiling C2HS.C.Names ( src/C2HS/C/Names.hs, dist/build/c2hs/c2hs-tmp/C2HS/C/Names.o ) +[22 of 26] Compiling C2HS.C ( src/C2HS/C.hs, dist/build/c2hs/c2hs-tmp/C2HS/C.o ) +[23 of 26] Compiling C2HS.Gen.Monad ( src/C2HS/Gen/Monad.hs, dist/build/c2hs/c2hs-tmp/C2HS/Gen/Monad.o ) + +src/C2HS/Gen/Monad.hs:227:10: Warning: + Orphan instance: instance Read Ident +[24 of 26] Compiling C2HS.C.Info ( src/C2HS/C/Info.hs, dist/build/c2hs/c2hs-tmp/C2HS/C/Info.o ) +[25 of 26] Compiling C2HS.Gen.Bind ( src/C2HS/Gen/Bind.hs, dist/build/c2hs/c2hs-tmp/C2HS/Gen/Bind.o ) + +src/C2HS/Gen/Bind.hs:971:43: Warning: + In the use of `posColumn' (imported from Language.C.Data.Position): + Deprecated: \"column number information is inaccurate in presence of macros - do not rely on it.\" + +src/C2HS/Gen/Bind.hs:789:10: Warning: + Orphan instance: instance Num CInteger +[26 of 26] Compiling Main ( src/Main.hs, dist/build/c2hs/c2hs-tmp/Main.o ) +Linking dist/build/c2hs/c2hs ... +Installing executable(s) in /root/.cabal/bin +Installed c2hs-0.17.2 +lyriondesktop:/home/zilti/tmp # cabal install git-annex +Resolving dependencies... +Configuring gnuidn-0.2.1... +cabal: The program c2hs is required but it could not be found. +Failed to install gnuidn-0.2.1 +cabal: Error: some packages failed to install: +git-annex-5.20140709 depends on gnuidn-0.2.1 which failed to install. +gnuidn-0.2.1 failed during the configure step. The exception was: +ExitFailure 1 +network-protocol-xmpp-0.4.6 depends on gnuidn-0.2.1 which failed to install. +``` +"""]] diff --git a/doc/install/cabal/comment_38_5c1e96221154a4ae4ebd636232044ced._comment b/doc/install/cabal/comment_38_5c1e96221154a4ae4ebd636232044ced._comment new file mode 100644 index 0000000000..7c44518d92 --- /dev/null +++ b/doc/install/cabal/comment_38_5c1e96221154a4ae4ebd636232044ced._comment @@ -0,0 +1,16 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 38" + date="2014-07-11T18:30:55Z" + content=""" +@Daniel, I suggest you either follow the instuctions above, or if you don't want to follow the instructions, follow the error messages. :P In this case, the instructions say to do: + +> PATH=$HOME/bin:$PATH +> cabal install c2hs --bindir=$HOME/bin + +Which is exactly to work around the problem that we can see in your transcript: `Installing executable(s) in /root/.cabal/bin` + +Also, to reiterate the top of the page: If you are not comfortable tracking down and dealing with library build problems, installing git-annex with cabal is probably not the right choice for you! + +"""]] diff --git a/doc/install/comment_1_0aa16754fb08d8f2a54c8c3f78b6c187._comment b/doc/install/comment_1_0aa16754fb08d8f2a54c8c3f78b6c187._comment new file mode 100644 index 0000000000..1bf53f02a9 --- /dev/null +++ b/doc/install/comment_1_0aa16754fb08d8f2a54c8c3f78b6c187._comment @@ -0,0 +1,14 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawm7eqCMh_B7mxE0tnchbr0JoYu11FUAFRY" + nickname="Stéphane" + subject="Old versions from distributions (e.g. Debian stable) fail with online instructions." + date="2014-06-28T15:36:12Z" + content=""" +Hello everyone. + +Be aware that your distribution's package may be very old. +For example, at the time I write this, latest Debian stable is Debian 7.5 which is 2 months old. +But git-annex package there is two *years* old (tomorrow, it will be exactly two yezrs old). + +So, beware. If following [online walkthrough](https://git-annex.branchable.com/walkthrough/), either install a more recent git-annex (e.g. from [Debain backports](http://backports.debian.org/Instructions/)) or follow instructions from your local `/usr/share/doc/git-annex/html/walkthrough.html` instead. +"""]] diff --git a/doc/install/fromscratch/comment_1_9d085e460553fa045999ab7cb945cdec._comment b/doc/install/fromscratch/comment_1_9d085e460553fa045999ab7cb945cdec._comment new file mode 100644 index 0000000000..1b68d0f8cb --- /dev/null +++ b/doc/install/fromscratch/comment_1_9d085e460553fa045999ab7cb945cdec._comment @@ -0,0 +1,13 @@ +[[!comment format=mdwn + username="azul" + ip="91.36.153.149" + subject="cabal fails to resolve dependencies" + date="2014-06-19T08:49:05Z" + content=""" +I tried this on ubuntu 14.04 without any previous haskell installs and cabal failed to resolve the dependencies: + +rejecting: optparse-applicative-0.9.0 (conflict: hjsmin => +optparse-applicative>=0.7 && <0.9) + +[full log](paste.debian.net/105771/) +"""]] diff --git a/doc/install/fromscratch/comment_2_b7954521d9ab40622b665f278dd72e17._comment b/doc/install/fromscratch/comment_2_b7954521d9ab40622b665f278dd72e17._comment new file mode 100644 index 0000000000..949ee0abf5 --- /dev/null +++ b/doc/install/fromscratch/comment_2_b7954521d9ab40622b665f278dd72e17._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="azul" + ip="91.36.173.120" + subject="conflict solved" + date="2014-06-20T06:13:09Z" + content=""" +`apt-get install happy alex libghc-hjsmin-dev` +solved the problem for me. The hjsmin lib was probably crucial. It seems a bunch of dependencies can also be installed as debs rather than through cabal. +`standalone/android/buildchroot-inchroot` gave me a clue. +"""]] diff --git a/doc/install/fromscratch/comment_3_a3bf3ce57ea73515a059267f25b816eb._comment b/doc/install/fromscratch/comment_3_a3bf3ce57ea73515a059267f25b816eb._comment new file mode 100644 index 0000000000..1fade16c32 --- /dev/null +++ b/doc/install/fromscratch/comment_3_a3bf3ce57ea73515a059267f25b816eb._comment @@ -0,0 +1,23 @@ +[[!comment format=mdwn + username="azul" + ip="91.36.173.120" + subject="c2hs required for cabal to install dependencies" + date="2014-06-20T06:35:35Z" + content=""" +Next thing i ran into was missing c2hs. +So +`apt-get install c2hs` before running the cabal install otherwise... + +
+$ cabal install git-annex --only-dependencies
+Resolving dependencies...
+Configuring gnuidn-0.2.1...
+cabal: The program c2hs is required but it could not be found.
+Failed to install gnuidn-0.2.1
+cabal: Error: some packages failed to install:
+gnuidn-0.2.1 failed during the configure step. The exception was:
+ExitFailure 1
+network-protocol-xmpp-0.4.6 depends on gnuidn-0.2.1 which failed to install.
+
+ +"""]] diff --git a/doc/news/version_5.20140412.mdwn b/doc/news/version_5.20140412.mdwn deleted file mode 100644 index 7e9267a613..0000000000 --- a/doc/news/version_5.20140412.mdwn +++ /dev/null @@ -1,3 +0,0 @@ -git-annex 5.20140412 released with [[!toggle text="these changes"]] -[[!toggleable text=""" - * Last release didn't quite fix the high cpu issue in all cases, this should."""]] \ No newline at end of file diff --git a/doc/news/version_5.20140421.mdwn b/doc/news/version_5.20140421.mdwn deleted file mode 100644 index 3741544d4a..0000000000 --- a/doc/news/version_5.20140421.mdwn +++ /dev/null @@ -1,39 +0,0 @@ -git-annex 5.20140421 released with [[!toggle text="these changes"]] -[[!toggleable text=""" - * assistant: Now detects immediately when other repositories push - changes to a ssh remote, and pulls. - ** XMPP is no longer needed in this configuration! ** - This requires the remote server have git-annex-shell with - notifychanges support (>= 5.20140405) - * webapp: Show a network signal icon next to ssh and xmpp remotes that - it's currently connected with. - * webapp: Rework xmpp nudge to prompt for either xmpp or a ssh remote - to be set up. - * sync, assistant, remotedaemon: Use ssh connection caching for git pushes - and pulls. - * remotedaemon: When network connection is lost, close all cached ssh - connections. - * Improve handling of monthly/yearly scheduling. - * Avoid depending on shakespeare except for when building the webapp. - * uninit: Avoid making unncessary copies of files. - * info: Allow use in a repository where annex.uuid is not set. - * reinit: New command that can initialize a new repository using - the configuration of a previously known repository. - Useful if a repository got deleted and you want - to clone it back the way it was. - * drop --from: When local repository is untrusted, its copy of a file does - not count. - * Bring back rsync -p, but only when git-annex is running on a non-crippled - file system. This is a better approach to fix #700282 while not - unncessarily losing file permissions on non-crippled systems. - * webapp: Start even if the current directory is listed in - ~/.config/git-annex/autostart but no longer has a git repository in it. - * findref: New command, like find but shows files in a specified git ref. - * webapp: Fix UI for removing XMPP connection. - * When init detects that git is not configured to commit, and sets - user.email to work around the problem, also make it set user.name. - * webapp: Support using git-annex on a remote server, which was installed - from the standalone tarball or OSX app, and so does not have - git-annex in PATH (and may also not have git or rsync in PATH). - * standalone tarball, OSX app: Install a ~/.ssh/git-annex-wrapper, which - can be used to run git-annex, git, rsync, etc."""]] \ No newline at end of file diff --git a/doc/news/version_5.20140517.mdwn b/doc/news/version_5.20140517.mdwn deleted file mode 100644 index fc0d2bbd42..0000000000 --- a/doc/news/version_5.20140517.mdwn +++ /dev/null @@ -1,21 +0,0 @@ -git-annex 5.20140517 released with [[!toggle text="these changes"]] -[[!toggleable text=""" - * webapp: Switched to bootstrap 3. - Thanks, Sören Brunk. - * Standalone builds now check gpg signatures before upgrading. - * Simplified repository description line format. The remote name, - if any, is always in square brackets after the description. - * assistant: Clean up stale tmp files on startup. - * webapp: Better ssh password prompting. - * Depend on git-remote-gcrypt 0.20130908-6. Older versions - fail when the assistant is run with no controlling tty. - * Added ddar special remote. - Thanks, Robie Basak. - * webapp: Fixed drag and drop to reorder the list of remotes. - * group: When no groups are specified to set, lists the current groups - of a repository. - * Add remote.$name.annex-shell configuration. - Thanks, Fraser Tweedale - * Support symlinking git-annex and git-annex-shell - from the Linux standalone bundle into PATH. - Thanks, jlebar."""]] \ No newline at end of file diff --git a/doc/news/version_5.20140613.mdwn b/doc/news/version_5.20140613.mdwn new file mode 100644 index 0000000000..d4413725d7 --- /dev/null +++ b/doc/news/version_5.20140613.mdwn @@ -0,0 +1,16 @@ +git-annex 5.20140613 released with [[!toggle text="these changes"]] +[[!toggleable text=""" + * Ignore setsid failures. + * Avoid leaving behind .tmp files when failing in some cases, including + importing files to a disk that is full. + * Avoid bad commits after interrupted direct mode sync (or merge). + * Fix build with wai 0.3.0. + * Deal with FAT's low resolution timestamps, which in combination with + Linux's caching of higher res timestamps while a FAT is mounted, caused + direct mode repositories on FAT to seem to have modified files after + they were unmounted and remounted. + * Windows: Fix opening webapp when repository is in a directory with + spaces in the path. + * Detect when Windows has lost its mind in a timezone change, and + automatically apply a delta to the timestamps it returns, to get back to + sane values."""]] \ No newline at end of file diff --git a/doc/news/version_5.20140707.mdwn b/doc/news/version_5.20140707.mdwn new file mode 100644 index 0000000000..a00737b3bf --- /dev/null +++ b/doc/news/version_5.20140707.mdwn @@ -0,0 +1,23 @@ +git-annex 5.20140707 released with [[!toggle text="these changes"]] +[[!toggleable text=""" + * assistant: Fix bug, introduced in last release, that caused the assistant + to make many unncessary empty merge commits. + * assistant: Fix one-way assistant->assistant sync in direct mode. + * Fix bug in annex.queuesize calculation that caused much more + queue flushing than necessary. + * importfeed: When annex.genmetadata is set, metadata from the feed + is added to files that are imported from it. + * Support users who have set commit.gpgsign, by disabling gpg signatures + for git-annex branch commits and commits made by the assistant. + * Fix memory leak when committing millions of changes to the git-annex + branch, eg after git-annex add has run on 2 million files in one go. + * Support building with bloomfilter 2.0.0. + * Run standalone install process when the assistant is started + (was only being run when the webapp was opened). + * Android: patch git to avoid fchmod, which fails on /sdcard. + * Windows: Got rid of that pesky DOS box when starting the webapp. + * Windows: Added Startup menu item so assistant starts automatically + on login. + * Windows: Fix opening file browser from webapp when repo is in a + directory with spaces. + * Windows: Assistant now logs to daemon.log."""]] \ No newline at end of file diff --git a/doc/news/version_5.20140709.mdwn b/doc/news/version_5.20140709.mdwn new file mode 100644 index 0000000000..e7609949f4 --- /dev/null +++ b/doc/news/version_5.20140709.mdwn @@ -0,0 +1,11 @@ +git-annex 5.20140709 released with [[!toggle text="these changes"]] +[[!toggleable text=""" + * Fix race in direct mode merge code that could cause all files in the + repository to be removed. It should be able to recover repositories + experiencing this bug without data loss. See: + http://git-annex.branchable.com/bugs/bad\_merge\_commit\_deleting\_all\_files/ + * Fix git version that supported --no-gpg-sign. + * Fix bug in automatic merge conflict resolution, when one side is an + annexed symlink, and the other side is a non-annexed symlink. + * Really fix bug that caused the assistant to make many unncessary + empty merge commits."""]] diff --git a/doc/preferred_content/standard_groups.mdwn b/doc/preferred_content/standard_groups.mdwn index 97bc9b6677..5622dcb574 100644 --- a/doc/preferred_content/standard_groups.mdwn +++ b/doc/preferred_content/standard_groups.mdwn @@ -1,14 +1,22 @@ git-annex comes with some built-in [[preferred_content]] settings, that can be used with repositories that are in special groups. To make a repository use one of these, just set its preferred content expression -to "standard", and put it in one of these groups. Or in the webapp, just -edit the repository and select the group. +to "standard", and put it in one of these groups. For example, to put the current +repository in the manual group and use this group to control the preferred +content, run + + git annex wanted . standard + git annex group . manual + +In the webapp, just edit the repository and select the group. (Note that most of these standard expressions also make the repository want to get any content that is only currently available on untrusted and dead repositories. So if an untrusted repository gets connected, any repository that can will back it up.) +The following standard groups are available: + ### client All content is wanted, unless it's for a file in a "archive" directory, diff --git a/doc/scalability.mdwn b/doc/scalability.mdwn index 9a4ff95efa..cdc148e2f8 100644 --- a/doc/scalability.mdwn +++ b/doc/scalability.mdwn @@ -13,11 +13,6 @@ git-annex is designed for scalability. The key points are: but git-annex is designed so that it does not need to hold all the details about your repository in memory. - The one exception is that [[todo/git-annex_unused_eats_memory]], - because it *does* need to hold the whole repo state in memory. But - that is still considered a bug, and hoped to be solved one day. - Luckily, that command is not often used. - * Many files can be managed. The limiting factor is git's own limitations in scaling to repositories with a lot of files, and as git improves this will improve. Scaling to hundreds of thousands of files diff --git a/doc/special_remotes.mdwn b/doc/special_remotes.mdwn index cc52dfc553..2ef98c40d6 100644 --- a/doc/special_remotes.mdwn +++ b/doc/special_remotes.mdwn @@ -40,6 +40,7 @@ for using git-annex with various services: * [[Usenet|forum/nntp__47__usenet special remote]] * [chef-vault](https://github.com/3ofcoins/knife-annex/) * [hubiC](https://github.com/Schnouki/git-annex-remote-hubic) +* [pCloud](https://github.com/tochev/git-annex-remote-pcloud) Want to add support for something else? [[Write your own!|external]] diff --git a/doc/special_remotes/gcrypt.mdwn b/doc/special_remotes/gcrypt.mdwn index ac98c43bb7..2e07741d3f 100644 --- a/doc/special_remotes/gcrypt.mdwn +++ b/doc/special_remotes/gcrypt.mdwn @@ -43,3 +43,8 @@ way git-remote-gcrypt encrypts the git repository, you will need to somehow force it to re-push everything again, so that the encrypted repository can be decrypted by the added keys. Probably this can be done by setting `GCRYPT_FULL_REPACK` and doing a forced push of branches. + +Recent versions of git-annex configure gcrypt-publish-participants when +setting up a gcrypt repository. This is done to avoid unncessary gpg +passphrase prompts, but it does publish the gpg keyids that can decrypt the +repository. Unset it if you need to obscure that. diff --git a/doc/special_remotes/glacier.mdwn b/doc/special_remotes/glacier.mdwn index b55b9adbb5..fe784c4531 100644 --- a/doc/special_remotes/glacier.mdwn +++ b/doc/special_remotes/glacier.mdwn @@ -6,7 +6,7 @@ installed. The unusual thing about Amazon Glacier is the multiple-hour delay it takes to retrieve information out of Glacier. To deal with this, commands like "git-annex get" request Glacier start the retrieval process, and will fail -due to the data not yet being available. You can then wait appriximately +due to the data not yet being available. You can then wait approximately four hours, re-run the same command, and this time, it will actually download the data. diff --git a/doc/special_remotes/glacier/comment_8_a04bb5f27c1a7cfffe881903f973dbec._comment b/doc/special_remotes/glacier/comment_8_a04bb5f27c1a7cfffe881903f973dbec._comment new file mode 100644 index 0000000000..4fc8319599 --- /dev/null +++ b/doc/special_remotes/glacier/comment_8_a04bb5f27c1a7cfffe881903f973dbec._comment @@ -0,0 +1,24 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawlhaXbLZQ5uQ6fM2kV0n8bj6IwZjx2CLeM" + nickname="Shane" + subject="Annex can't find Glacier remote" + date="2014-06-26T05:50:38Z" + content=""" +I'm setting up git-annex with glacier-cli for the first time. I have installed git-annex via Yum and glacier-cli according to the instructions on Github. The `glacier` command is in my path. I did not set up hooks with Git annex as it appears that using hooks for glacier is no longer required. + +Here is my version information for git-annex: + + $ git-annex version + git-annex version: 3.20120523 + local repository version: 3 + default repository version: 3 + supported repository versions: 3 + upgrade supported from repository versions: 0 1 2 + +When I attempt to add my Glacier remote, here is what I see: + + $ git annex initremote glacier type=glacier keyid=ABCDEFG + git-annex: Unknown remote type glacier + +Is there something else I need to do in order to correctly install Glacier integration with git-annex? I'm having trouble finding up-to-date information that describes the installation process. +"""]] diff --git a/doc/special_remotes/glacier/comment_9_89c4506e079c299fd098d0fe746d032a._comment b/doc/special_remotes/glacier/comment_9_89c4506e079c299fd098d0fe746d032a._comment new file mode 100644 index 0000000000..ae8c27ee2c --- /dev/null +++ b/doc/special_remotes/glacier/comment_9_89c4506e079c299fd098d0fe746d032a._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="108.236.230.124" + subject="that is an ancient version of git-annex, Shane" + date="2014-07-02T17:11:24Z" + content=""" +The first git-annex release to support glacier without using hooks was 3.20121126. +"""]] diff --git a/doc/tips/downloading_podcasts.mdwn b/doc/tips/downloading_podcasts.mdwn index 876d8d4e1d..7805f84cb4 100644 --- a/doc/tips/downloading_podcasts.mdwn +++ b/doc/tips/downloading_podcasts.mdwn @@ -24,7 +24,7 @@ there's a --template option. The default is Other available template variables: feedauthor, itemauthor, itemsummary, itemdescription, itemrights, itemid, -itempubdate +itempubdate, author, title. ## catching up @@ -68,3 +68,12 @@ and transferring to your laptop on demand. If your git-annex is also built with quvi support, you can also use `git annex importfeed` on youtube playlists. It will automatically download the videos linked to by the playlist. + +## metadata + +As well as storing the urls for items imported from a feed, git-annex can +store additional [[metadata]], like the author, and itemdescription. +This can then be looked up later, used in [[metadata_driven_views]], etc. + +To make all available metadata from the feed be stored: +`git config annex.genmetadata true` diff --git a/doc/tips/downloading_podcasts/comment_21_98a1dacc8d264ff31801e6c5c5f2612d._comment b/doc/tips/downloading_podcasts/comment_21_98a1dacc8d264ff31801e6c5c5f2612d._comment new file mode 100644 index 0000000000..eebc00ad96 --- /dev/null +++ b/doc/tips/downloading_podcasts/comment_21_98a1dacc8d264ff31801e6c5c5f2612d._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="Sazius" + ip="62.78.213.233" + subject="comment 21" + date="2014-07-01T20:52:06Z" + content=""" +For some podcast feeds I typically wish to view the description of the show before I decide to download it or not. Is there some way to perform that use case using git annex? I know `itemdescription` is something I can include in the template for the filename, but the descriptions can be really long... doesn't seem very elegant to have that in the file name. Could the description for example be included as metadata of the item? +"""]] diff --git a/doc/tips/downloading_podcasts/comment_22_00cc7a2fb936d7ea3d5d3764a1637663._comment b/doc/tips/downloading_podcasts/comment_22_00cc7a2fb936d7ea3d5d3764a1637663._comment new file mode 100644 index 0000000000..2fba1b57dd --- /dev/null +++ b/doc/tips/downloading_podcasts/comment_22_00cc7a2fb936d7ea3d5d3764a1637663._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.55" + subject="metadata" + date="2014-07-03T18:25:32Z" + content=""" +Good idea, Sazius! + +I've made importfeed store the metadata, as long as annex.genmetadata is set in .git/config. +"""]] diff --git a/doc/tips/using_Google_Cloud_Storage/comment_3_9738f145014d8eae1f1aae7c39e71d31._comment b/doc/tips/using_Google_Cloud_Storage/comment_3_9738f145014d8eae1f1aae7c39e71d31._comment new file mode 100644 index 0000000000..cd8caecc77 --- /dev/null +++ b/doc/tips/using_Google_Cloud_Storage/comment_3_9738f145014d8eae1f1aae7c39e71d31._comment @@ -0,0 +1,12 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawlPfB0_GcGJ827kZqRE1PF4D23rxpfOeg4" + nickname="Björn" + subject="comment 3" + date="2014-06-17T19:18:09Z" + content=""" +I just found the \"Interoperable access\" thing. The instructions from Google (linked in previous comments) are not perfect. + +After step 4 click \"Google Cloud Storage\", then at the bottom you have a heading called \"Interoperable Access\" where you have to activate it for this project. + +Then it appears at the bottom of the left hand menu. +"""]] diff --git a/doc/todo/Chunks_support_in_all_special_remotes/comment_1_d12604dbeb42bbb6850425d237cb01e7._comment b/doc/todo/Chunks_support_in_all_special_remotes/comment_1_d12604dbeb42bbb6850425d237cb01e7._comment new file mode 100644 index 0000000000..93ff8e53f1 --- /dev/null +++ b/doc/todo/Chunks_support_in_all_special_remotes/comment_1_d12604dbeb42bbb6850425d237cb01e7._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 1" + date="2014-07-11T20:17:05Z" + content=""" +See [[design/assistant/chunks]] +"""]] diff --git a/doc/todo/Expose_auto-merge_for_manual__44___local_merges.mdwn b/doc/todo/Expose_auto-merge_for_manual__44___local_merges.mdwn index 0224733c3a..c2cf26f835 100644 --- a/doc/todo/Expose_auto-merge_for_manual__44___local_merges.mdwn +++ b/doc/todo/Expose_auto-merge_for_manual__44___local_merges.mdwn @@ -5,3 +5,5 @@ between local branches. E.g., one might invoke «git annex merge» or «git annex autoresolve» after «git merge» when conflicts are found. + +> [[done]] as resolvemerge. --[[Joey]] diff --git a/doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running.mdwn b/doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running.mdwn new file mode 100644 index 0000000000..7f7a482b9c --- /dev/null +++ b/doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running.mdwn @@ -0,0 +1,5 @@ +I’m just experimenting with git-annex on a repo of ~150k files in about the same number of directories (WORM-backend). Calling, e.g., «git annex status» will take several minutes while stat()-ing all the files (for changes, I presume). + +This might already be on you todo list, but I was wondering whether it is possible to increase the performance of «annex status» (or related commands) when «annex watch» is running in the background. In that case, «status» could rely on cached data built-up at some point during initialization, plus based on the data that was accumulated via inotify. (Hopefully, all this won’t even be needed anymore on btrfs at some point in the future.) + +(I’m not very knowledgable in these things, so just out of curiosity: I noticed that, even though the «status» invocation takes ages, no HDD activity occurs and all the metadata is probably already in the Linux caches from a run I conducted immediately beforehand. Why do you figure that is? Is context switching so hugely expensive?) diff --git a/doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running/comment_1_e5f2630591ffa7758ca4250a061a8589._comment b/doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running/comment_1_e5f2630591ffa7758ca4250a061a8589._comment new file mode 100644 index 0000000000..446562f858 --- /dev/null +++ b/doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running/comment_1_e5f2630591ffa7758ca4250a061a8589._comment @@ -0,0 +1,12 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 1" + date="2014-07-10T19:37:38Z" + content=""" +Neither `git annex watch` nor the `assistant` persistently store any data about the files in the repository in memory. They cannot speed up `git annex status`. + +I'm not sure what's the point of running `git annex status` while the daemon is running, since the daemon will normally immediately notice changes and commit them. The status output should thus generally be empty. + +FWIW, `git annex status` takes 0.3s in my largest repo (55k files), on an SSD. That's in indirect mode, and the time is almost completely spent in running `git ls-files --modified`, which is probably about as fast as it can be. In a direct mode repository, it will be rather slower, since it has to query git for the key that was last committed for each file, in order to look up that key's info and see if the file has been modified. +"""]] diff --git a/doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running/comment_2_f8a5cc905d5b06bdbb1a778ab866a28c._comment b/doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running/comment_2_f8a5cc905d5b06bdbb1a778ab866a28c._comment new file mode 100644 index 0000000000..315569ca15 --- /dev/null +++ b/doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running/comment_2_f8a5cc905d5b06bdbb1a778ab866a28c._comment @@ -0,0 +1,44 @@ +[[!comment format=mdwn + username="zardoz" + ip="134.147.14.84" + subject="comment 2" + date="2014-07-11T11:46:08Z" + content=""" +Yes, you’re probably right that the benefit of this is slim when the +watching daemon auto-adds new files. So the «status» output would +never change and show the status that upheld before starting the +daemon. + +The reason I brought this up that I recall reading a comment of yours +somewhere on the site, to the effect that the assistant can sometimes +speed up certain operations, because it can make certain valid +assumptions on the state of the repo due to the fact that the +assistant has been monitoring it. I don’t recall what those operations +were, though. That’s why it occurred to me whether there might be a +daemon that just monitors via inotify, and neither adds nor syncs, and +only provides information to certain commands to speed things up under +some circumstances. + +In general, is it accurate to say that git-annex mostly takes the +«space» option when making a space/time-trade-offs? I noticed that the +memory consumption is really slim most of the time, and wondered +whether there might be options of speeding operations up by relying on +more memory instead (perhaps also doing persistent caching). On the +other hand, in some regards you are probably committed to the +time/memory trade-offs taken by vanilla git, so maybe there’s not much +room for improvement, git-annex wise… + +Maybe direct-mode repos on the order of 100k’s of files are just not +practical. I’m using indirect mode for my really big repos now, and +it’s now responsive enough to use (except for «annex unused», which is +inherently expensive, as you once explained). At least commiting won’t +take tens of minutes that way. I’ll just have to make the software +play nicely with the symlinks. + +BTW, the file-system seems to have a huge impact on this. My large +direct mode annex is practically unusable on ext (tens of minutes per +commit), but still usable on btrfs (a few minutes). I’m migrating one +disk to btrfs at home and will do some controlled benchmarks then. The +added bonus is that directories don’t always take up a full block. + +"""]] diff --git a/doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running/comment_3_626c629654508d0d948ece849d43ed86._comment b/doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running/comment_3_626c629654508d0d948ece849d43ed86._comment new file mode 100644 index 0000000000..58cf33c105 --- /dev/null +++ b/doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running/comment_3_626c629654508d0d948ece849d43ed86._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="zardoz" + ip="134.147.14.84" + subject="comment 3" + date="2014-07-11T11:54:26Z" + content=""" +Ah, interesting, some caching ideas are already discussed at [https://git-annex.branchable.com/design/caching_database/]. +"""]] diff --git a/doc/todo/Recovering_from_a_bad_sync.mdwn b/doc/todo/Recovering_from_a_bad_sync.mdwn new file mode 100644 index 0000000000..d60406568c --- /dev/null +++ b/doc/todo/Recovering_from_a_bad_sync.mdwn @@ -0,0 +1,31 @@ +Instead of using `sync origin` for the first sync and a simple `sync` for the other syncs, + + # on pc1 + git annex init "pc1" + git annex direct + git annex add . + git annex sync origin # remote specified on the first sync + + # add some files + git annex add . + git annex sync + +I used `sync` first and only later I used `sync origin` + + # on pc1 + git annex init "pc1" + git annex direct + git annex add . + git annex sync + + # add some files + git annex add . + git annex sync origin # remote specified on a later sync + +These sequences of commands create two completely different git histories. + +More important, if one clones on pc2 the first repository, they will see both the pc1 remote and the pc2 remote. Instead, if one clones on pc2 the repository created by the second combination of commands, they will see only the pc2 remote. + +What commands should I use on pc1 to fix the history so that when pc2 clones from the origin repository it will see both the pc1 remote and its own local remote? + +> [[done]]; fixed per my comments. --[[Joey]] diff --git a/doc/todo/Recovering_from_a_bad_sync/comment_1_6f5f518a3190534b737203787149ef3c._comment b/doc/todo/Recovering_from_a_bad_sync/comment_1_6f5f518a3190534b737203787149ef3c._comment new file mode 100644 index 0000000000..fc354be3d0 --- /dev/null +++ b/doc/todo/Recovering_from_a_bad_sync/comment_1_6f5f518a3190534b737203787149ef3c._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 1" + date="2014-07-14T18:27:43Z" + content=""" +If this is a todo item at all, it may make sense to make `git annex sync` sync even with git remotes that have no annex-uuid. + +As far as solving the problem, I think you just need to sync more in order to get the full list of remotes propigated around to all the remotes. Sync automatically merges disconnected git histories no matter how they got that way or how long they have been disconnected or diverged. +"""]] diff --git a/doc/todo/Recovering_from_a_bad_sync/comment_2_e494df56dcede4d14bcaa4cdbf3da4f5._comment b/doc/todo/Recovering_from_a_bad_sync/comment_2_e494df56dcede4d14bcaa4cdbf3da4f5._comment new file mode 100644 index 0000000000..0111293363 --- /dev/null +++ b/doc/todo/Recovering_from_a_bad_sync/comment_2_e494df56dcede4d14bcaa4cdbf3da4f5._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 2" + date="2014-07-14T18:38:58Z" + content=""" +It seems that the person who filed this todo item also filed [[bugs/sync does not commit with alwasycommit = false]] and got pretty confused by that. + +So, repurposing this todo item to be about perhaps syncing with remotes that have no annex-uuid by default. +"""]] diff --git a/doc/todo/Recovering_from_a_bad_sync/comment_3_4d4904bcbf97401c7c11338f32577f96._comment b/doc/todo/Recovering_from_a_bad_sync/comment_3_4d4904bcbf97401c7c11338f32577f96._comment new file mode 100644 index 0000000000..1d173f0ef1 --- /dev/null +++ b/doc/todo/Recovering_from_a_bad_sync/comment_3_4d4904bcbf97401c7c11338f32577f96._comment @@ -0,0 +1,14 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 3" + date="2014-07-15T18:23:50Z" + content=""" +Making `git annex sync` automatically sync with remotes with no annex-uuid is more complicated than I first thought. + +In the case of a remote accessed over ssh, `git annex sync` already does sync with such a remote. Of course, it will set annex-ignore on it, since it has no annex-uuid. (Needed eg, for github, or just for preventing a repo from being used by git-annex if you don't want it to be.) Still, the git branches get synced, which is the behavior that we want. + +So, only local remotes are affected. Note that `git annex assistant` automatically git-annex inits the local remote when it lacks a uuid, and syncs with it. That seems ok. + +However `git annex sync` currently ignores the local remote when it has no uuid. Seems that this happens due to a bug, not intentionally. tryGitConfigRead tries to bootstrap up an annex state to read the repos's config, but this cannot be done in a repo that is not yet initialized. Result is the repo state is not read, and so it's treated as a local remote that is not currently available (ie, a disconnected disk). +"""]] diff --git a/doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode.mdwn b/doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode.mdwn new file mode 100644 index 0000000000..196b8f420d --- /dev/null +++ b/doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode.mdwn @@ -0,0 +1,8 @@ +Please let me know if there already is a way of achieving this; I’ve googled around a lot, but could not find any information pertaining to my particular problem. + +I am using direct mode in a bunch of repositories where I need quick write access to content and where I am not interested in preserving history. Some of these repositories do contain regular symlinks, however. Now, I suppose that in indirect repos, the way of adding symlinks would be to just «git add» them. However, since these are direct mode repos, I cannot do this. + +Is there already a good way of adding symlinks in direct mode? If not, I would find it useful if there were one. + +Best regards, +T. diff --git a/doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode/comment_1_6c6e192bc0f70a386cd4275f98e1bd6f._comment b/doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode/comment_1_6c6e192bc0f70a386cd4275f98e1bd6f._comment new file mode 100644 index 0000000000..83ccf32de8 --- /dev/null +++ b/doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode/comment_1_6c6e192bc0f70a386cd4275f98e1bd6f._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="zardoz" + ip="134.147.14.84" + subject="comment 1" + date="2014-07-07T12:48:07Z" + content=""" +Can it be considered safe adding symlinks via «git -c core.bare=false add symlink; git -c core.bare=false commit -m Update»? If not, is there a better way? +"""]] diff --git a/doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode/comment_2_8e22cfdbeb2c841870a623cf4c7baf60._comment b/doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode/comment_2_8e22cfdbeb2c841870a623cf4c7baf60._comment new file mode 100644 index 0000000000..b88ec65ae1 --- /dev/null +++ b/doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode/comment_2_8e22cfdbeb2c841870a623cf4c7baf60._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 2" + date="2014-07-10T19:54:30Z" + content=""" +That is safe, but you have to be very careful anytime you override with -c core.bare=false. For example, if you did a `git commit -a`, it would commit your large files directly into git, which you don't want. + + +"""]] diff --git a/doc/todo/fast_migrate.mdwn b/doc/todo/fast_migrate.mdwn new file mode 100644 index 0000000000..1571d880a1 --- /dev/null +++ b/doc/todo/fast_migrate.mdwn @@ -0,0 +1,16 @@ +Moved this comment to todo list --[[Joey]] + +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawnfM7ZF0Q5U9k1LljyDXH37cuXU5Gx6gtM" + nickname="A" + subject="fast migrate" + date="2014-07-05T08:21:20Z" + content=""" +dear Joey and everybody else, + some time ago I used \"git annex migrate\" to bring all my repositories up-to-date; after that I found (to my dismay) that some keys are SHA256, some others are SHA256E, so my data is not really deduplicated ; now, it would possible to migrate from SHAnnnE to SHAnnn (and vice versa) very fast... but currently AFAICS git-annex recomputes the whole checksum, and this (on my USB2.0 old disks) takes forever; may somebody please implement a fast migration? +"""]] + +> Certianly doable, for $hashE to $hash. Probably about an hour's work. +> --[[Joey]] + +>> [[done]] --[[Joey]] diff --git a/doc/bugs/unwanted_repository_version_upgrades.mdwn b/doc/todo/unwanted_repository_version_upgrades.mdwn similarity index 100% rename from doc/bugs/unwanted_repository_version_upgrades.mdwn rename to doc/todo/unwanted_repository_version_upgrades.mdwn diff --git a/doc/bugs/unwanted_repository_version_upgrades/comment_1_48f71865b65db4574a10e5c32ee22197._comment b/doc/todo/unwanted_repository_version_upgrades/comment_1_48f71865b65db4574a10e5c32ee22197._comment similarity index 100% rename from doc/bugs/unwanted_repository_version_upgrades/comment_1_48f71865b65db4574a10e5c32ee22197._comment rename to doc/todo/unwanted_repository_version_upgrades/comment_1_48f71865b65db4574a10e5c32ee22197._comment diff --git a/doc/todo/windows_git-annex_service.mdwn b/doc/todo/windows_git-annex_service.mdwn new file mode 100644 index 0000000000..5a7e917528 --- /dev/null +++ b/doc/todo/windows_git-annex_service.mdwn @@ -0,0 +1,30 @@ +## git-annex as service on windows + +Use nssm to run git-annex as a service. Will need to include it in the +git-annex bundle. + +Problem: nssm runs git-annex as a service as a LocalService user. (Or some +similar user.) This leads to permission problems, when the normal user +tries to write to its directory. + +Solution: Make `git-annex mkservice $repo` command (only avilable on +Windows) that does: + +1. git -c core.sharedRepository=true init $repo +2. cd $repo; git annex init +4. chmod 777 -R $repo +5. Add $repo to C:\.config\git-annex\autostart +6. If git-annex service does not yet exist in nssm, set it up and start it. + +**Problem**: With 2 users writing to one repository, files and subdirs +will end up owned by git-annex or by the desktop user, and the other user +won't be able to eg, edit a file or remove a file from a directory. + +Make git-annex read `C:\.config\git-annex\autostart` +on Windows, in addition to the one in $HOME. This way, `git annex assistant +--autostart` and `git annex webapp` will use it, no matter which user. + +WIP git branch: `winservice` + +> I am calling this [[done]], it's not done using a service, but it works. +> --[[Joey]] diff --git a/doc/todo/windows_support/comment_11_c3af14453e99dae5425deaa26ca7310e._comment b/doc/todo/windows_git-annex_service/comment_11_c3af14453e99dae5425deaa26ca7310e._comment similarity index 100% rename from doc/todo/windows_support/comment_11_c3af14453e99dae5425deaa26ca7310e._comment rename to doc/todo/windows_git-annex_service/comment_11_c3af14453e99dae5425deaa26ca7310e._comment diff --git a/doc/todo/windows_git-annex_service/comment_11_e2dda1037cc85f03613f2774c139ad56._comment b/doc/todo/windows_git-annex_service/comment_11_e2dda1037cc85f03613f2774c139ad56._comment new file mode 100644 index 0000000000..df945b5176 --- /dev/null +++ b/doc/todo/windows_git-annex_service/comment_11_e2dda1037cc85f03613f2774c139ad56._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="108.236.230.124" + subject="comment 11" + date="2014-06-16T23:47:36Z" + content=""" +I am stuck with apparently intractable permissions problems, if the git-annex service doesn't run as the same user who wants to use the git-annex repository. + +nssm is supposed to let the user the service runs as be set on the Log on tab, but I cannot get it to accept any user/password there, on my XP test VM. If anyone gets that tab in nssm to work, let me know. +"""]] diff --git a/doc/todo/windows_git-annex_service/comment_12_249a48a241f14f32dab49f381d2de3b3._comment b/doc/todo/windows_git-annex_service/comment_12_249a48a241f14f32dab49f381d2de3b3._comment new file mode 100644 index 0000000000..9b7e876542 --- /dev/null +++ b/doc/todo/windows_git-annex_service/comment_12_249a48a241f14f32dab49f381d2de3b3._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawm9ocq1Kb0WL-cz-LPpvd2Xm-q8tIQvqXA" + nickname="Dominik" + subject="comment 12" + date="2014-06-17T00:01:35Z" + content=""" +To get rid of permission problems, you may find setacl useful. Chmod and chown from msys dont't seem to work correctly with windows 8 +"""]] diff --git a/doc/todo/windows_support/comment_12_d3d91ddc00bc275455022d86b779b148._comment b/doc/todo/windows_git-annex_service/comment_12_d3d91ddc00bc275455022d86b779b148._comment similarity index 100% rename from doc/todo/windows_support/comment_12_d3d91ddc00bc275455022d86b779b148._comment rename to doc/todo/windows_git-annex_service/comment_12_d3d91ddc00bc275455022d86b779b148._comment diff --git a/doc/todo/windows_support/comment_13_59fbe4d07cdbeb786bae792f9c709ddd._comment b/doc/todo/windows_git-annex_service/comment_13_59fbe4d07cdbeb786bae792f9c709ddd._comment similarity index 100% rename from doc/todo/windows_support/comment_13_59fbe4d07cdbeb786bae792f9c709ddd._comment rename to doc/todo/windows_git-annex_service/comment_13_59fbe4d07cdbeb786bae792f9c709ddd._comment diff --git a/doc/todo/windows_git-annex_service/comment_13_f1d254fe85b0e5cbc7edf9096af4f942._comment b/doc/todo/windows_git-annex_service/comment_13_f1d254fe85b0e5cbc7edf9096af4f942._comment new file mode 100644 index 0000000000..894eb4b6c4 --- /dev/null +++ b/doc/todo/windows_git-annex_service/comment_13_f1d254fe85b0e5cbc7edf9096af4f942._comment @@ -0,0 +1,27 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="108.236.230.124" + subject="comment 13" + date="2014-06-17T16:52:55Z" + content=""" +I have messed with the windows ACLs some yesterday, but I don't know how or if it's possible to set ACLs on a directory, such that everything created inside it will be writable by two different users. Certainly this is doable on POSIX; if it's doable on Windows, I'll revisit services. + +---- + + +For now, it seems that a better option may be to not run git-annex as a service, but use various dos-window hiding technologies. + + + +I have successfully gotten this to work using nircmd. make a git-annex-webapp.bat, containing: + +
+title GitAnnex
+nircmd.exe win hide ititle \"GitAnnex\"
+git annex webapp
+
+ +This works, although the DOS box flashes onscreen for maybe 1/10th of a second before nircmd hides it. A git-annex-assistant.bat could run git-annex assistant --autostart, and would be suitable to be setup to run on startup. + +(It seems that it's possible to write a VBScript or C# program that sets up a hidden WScript.Shell and runs a command in it. That might avoid the window flash. However, it seems hard to get VBScript to run, and I have not investigated C#.) +"""]] diff --git a/doc/todo/windows_support/comment_14_79fc0ff98c5bba2ed616e52e5a58e28f._comment b/doc/todo/windows_git-annex_service/comment_14_79fc0ff98c5bba2ed616e52e5a58e28f._comment similarity index 100% rename from doc/todo/windows_support/comment_14_79fc0ff98c5bba2ed616e52e5a58e28f._comment rename to doc/todo/windows_git-annex_service/comment_14_79fc0ff98c5bba2ed616e52e5a58e28f._comment diff --git a/doc/todo/windows_git-annex_service/comment_14_7d5fdac0084c4742967879f5f0f9fccf._comment b/doc/todo/windows_git-annex_service/comment_14_7d5fdac0084c4742967879f5f0f9fccf._comment new file mode 100644 index 0000000000..5aba4e8e48 --- /dev/null +++ b/doc/todo/windows_git-annex_service/comment_14_7d5fdac0084c4742967879f5f0f9fccf._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="108.236.230.124" + subject="comment 14" + date="2014-06-17T16:56:32Z" + content=""" +Note that nircmd is not free software; but can be distributed free of charge, provided all the files in the zip are included and unmodified. Sucks, but it's windows.. +"""]] diff --git a/doc/todo/windows_git-annex_service/comment_15_8f10491f8c0a151284e6d81a83eab212._comment b/doc/todo/windows_git-annex_service/comment_15_8f10491f8c0a151284e6d81a83eab212._comment new file mode 100644 index 0000000000..c7247ce453 --- /dev/null +++ b/doc/todo/windows_git-annex_service/comment_15_8f10491f8c0a151284e6d81a83eab212._comment @@ -0,0 +1,12 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="108.236.230.124" + subject="comment 15" + date="2014-06-17T17:10:28Z" + content=""" + is another option. + +How to run VB script: + + +"""]] diff --git a/doc/todo/windows_support/comment_15_fcd34607116183cc1a764fb307eabe0a._comment b/doc/todo/windows_git-annex_service/comment_15_fcd34607116183cc1a764fb307eabe0a._comment similarity index 100% rename from doc/todo/windows_support/comment_15_fcd34607116183cc1a764fb307eabe0a._comment rename to doc/todo/windows_git-annex_service/comment_15_fcd34607116183cc1a764fb307eabe0a._comment diff --git a/doc/todo/windows_git-annex_service/comment_16_51800fd83cd979b021eabdd4c44cfd61._comment b/doc/todo/windows_git-annex_service/comment_16_51800fd83cd979b021eabdd4c44cfd61._comment new file mode 100644 index 0000000000..7efe7b3380 --- /dev/null +++ b/doc/todo/windows_git-annex_service/comment_16_51800fd83cd979b021eabdd4c44cfd61._comment @@ -0,0 +1,13 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="108.236.230.124" + subject="comment 16" + date="2014-06-17T17:18:34Z" + content=""" +Using wscript to run a file containing this will start the webapp w/o any console flicker: + +
+Set objshell=CreateObject(\"Wscript.Shell\")
+objShell.Run(\"git-annex webapp\"), 0, False
+
+"""]] diff --git a/doc/todo/windows_support/comment_16_6a6424f23772e57f1adb1807ca8b93fa._comment b/doc/todo/windows_git-annex_service/comment_16_6a6424f23772e57f1adb1807ca8b93fa._comment similarity index 100% rename from doc/todo/windows_support/comment_16_6a6424f23772e57f1adb1807ca8b93fa._comment rename to doc/todo/windows_git-annex_service/comment_16_6a6424f23772e57f1adb1807ca8b93fa._comment diff --git a/doc/todo/windows_support/comment_17_62a1a33c2aaf4b0b8a0149ec526907d7._comment b/doc/todo/windows_git-annex_service/comment_17_62a1a33c2aaf4b0b8a0149ec526907d7._comment similarity index 100% rename from doc/todo/windows_support/comment_17_62a1a33c2aaf4b0b8a0149ec526907d7._comment rename to doc/todo/windows_git-annex_service/comment_17_62a1a33c2aaf4b0b8a0149ec526907d7._comment diff --git a/doc/todo/windows_support/comment_18_3a408492107ca6f120b631ce8c41faef._comment b/doc/todo/windows_git-annex_service/comment_18_3a408492107ca6f120b631ce8c41faef._comment similarity index 100% rename from doc/todo/windows_support/comment_18_3a408492107ca6f120b631ce8c41faef._comment rename to doc/todo/windows_git-annex_service/comment_18_3a408492107ca6f120b631ce8c41faef._comment diff --git a/doc/todo/windows_support/comment_19_c6cbc8fe9218f90c661cd1026658c939._comment b/doc/todo/windows_git-annex_service/comment_19_c6cbc8fe9218f90c661cd1026658c939._comment similarity index 100% rename from doc/todo/windows_support/comment_19_c6cbc8fe9218f90c661cd1026658c939._comment rename to doc/todo/windows_git-annex_service/comment_19_c6cbc8fe9218f90c661cd1026658c939._comment diff --git a/doc/todo/windows_support/comment_20_ca245781a37db5546da3f7204adbeebb._comment b/doc/todo/windows_git-annex_service/comment_20_ca245781a37db5546da3f7204adbeebb._comment similarity index 100% rename from doc/todo/windows_support/comment_20_ca245781a37db5546da3f7204adbeebb._comment rename to doc/todo/windows_git-annex_service/comment_20_ca245781a37db5546da3f7204adbeebb._comment diff --git a/doc/todo/windows_support.mdwn b/doc/todo/windows_support.mdwn index 0afcbb4fe1..a48fcbc4e4 100644 --- a/doc/todo/windows_support.mdwn +++ b/doc/todo/windows_support.mdwn @@ -1,20 +1,10 @@ -The git-annex Windows port is not ready for prime time. But it does exist -now! --[[Joey]] +The git-annex Windows port is beta, but rapidly becoming polished and +usable! ## status -* Doesn't daemonize. Maybe use - - or perhaps easier, - - * XMPP library not yet built. (See below.) -* View debug log is empty in windows -- all logs go to console. - This messes up a few parts of UI that direct user to the debug log. - Should try to get rid of the console, but only once ssh passwords - (and possibly gpg) are not prompted there anymore. - * Local pairing seems to fail, after acking on Linux box, it stalls. (Also, of course, the Windows box is unlikely to have a ssh server, so only pairing with a !Windows box will work.) diff --git a/doc/todo/windows_support/comment_11_c91eb7da8ee05064a5bc4a6e2203314b._comment b/doc/todo/windows_support/comment_11_c91eb7da8ee05064a5bc4a6e2203314b._comment new file mode 100644 index 0000000000..f4a2eaa7f3 --- /dev/null +++ b/doc/todo/windows_support/comment_11_c91eb7da8ee05064a5bc4a6e2203314b._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="108.236.230.124" + subject="comment 11" + date="2014-06-16T23:48:03Z" + content=""" +service stuff moved to [[todo/windows_git-annex_service]] +"""]] diff --git a/doc/todo/wishlist:_--maxdepth_option_for_git_annex_find.mdwn b/doc/todo/wishlist:_--maxdepth_option_for_git_annex_find.mdwn new file mode 100644 index 0000000000..c309f24911 --- /dev/null +++ b/doc/todo/wishlist:_--maxdepth_option_for_git_annex_find.mdwn @@ -0,0 +1,22 @@ +`git annex find` currently makes for a great way to find which files are already local, and don't need to get `git annex get` gotten; obviously `ls` just shows me all the files in a given directory, disregarding git-annex (and without recursing to subdirectories). I think that adding a '--maxdepth' option to `git annex find` would make it much easier to use at directories high up in the directory structure, since currently `git annex find` recurses all subdirectories necessarily, when I really just want to see whether or not there are git-annex files present from a given directory. + +Obviously, since directories themselves are not git-annex objects, there is no way to say whether or not they are "present", but perhaps the most intuitive would be to say whether or not any git-annex files under a given directory are present. + +For example, if I have: +./ ++-- subdir0/ +| +-- file0 (present in local git-annex repo) +| +-- file1 (present in local git-annex repo) ++-- subdir1/ +| +-- file0 (not present in local git-annex repo) +| +-- file1 (not present in local git-annex repo) ++-- file2 (present in local git-annex repo) + +and I type `git annex find --maxdepth 1 .`, the output might look something like: +subdir0/ +file2 + +rather than: +subdir0/file0 +subdir0/file1 +file2 diff --git a/doc/todo/wishlist:_add_--symlink_option_to_import.mdwn b/doc/todo/wishlist:_add_--symlink_option_to_import.mdwn new file mode 100644 index 0000000000..96cbf28501 --- /dev/null +++ b/doc/todo/wishlist:_add_--symlink_option_to_import.mdwn @@ -0,0 +1 @@ +Make 'git annex import' for each imported file leave a symlink behind. One may consider this a bit nasty as this introduces symlinks out of the annex. There are also some things careful to consider, link to the annexed symlinks or into the .git/annex/objects store? the first breaks views, the second relies on implementation details. Shall these be absolute (i'd say yes) or relative (won't harm) links etc. But after all it gives a easier migration and possibly even some new usage to manage files outside of the annex. A sister-command for 'export' comes in mind, drop a symlink anywhere. Anyways, when you feel this is a good idea, keep it, otherwise just delete this idea. Thanks ;) diff --git a/doc/todo/wishlist:_add_--symlink_option_to_import/comment_1_d5d853142d401b95577567e3eb43495e._comment b/doc/todo/wishlist:_add_--symlink_option_to_import/comment_1_d5d853142d401b95577567e3eb43495e._comment new file mode 100644 index 0000000000..62d4264cbf --- /dev/null +++ b/doc/todo/wishlist:_add_--symlink_option_to_import/comment_1_d5d853142d401b95577567e3eb43495e._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 1" + date="2014-07-15T18:53:47Z" + content=""" +Well, it's easy enough to make symlinks to content in a git-annex repository yourself if you want to. I don't see why this belongs in `git annex import`, which is too complicated already. +"""]] diff --git a/doc/todo/wishlist:_do_not_import_new_files.mdwn b/doc/todo/wishlist:_do_not_import_new_files.mdwn new file mode 100644 index 0000000000..62dc6334ae --- /dev/null +++ b/doc/todo/wishlist:_do_not_import_new_files.mdwn @@ -0,0 +1,7 @@ +[[!meta title="mass reinject of any known content from a directory"]] + +Right now `git annex import DIR/*` will import all the files in DIR, both those that are already known to git-annex and those that are new. Using the option `--skip-duplicates` one can import only new files that are in DIR but unknown to git-annex. + +It would be nice if there were an opposite `--only-duplicates` option that could be used to import only the files that are already known to git, ignoring the new files in DIR. + +PS: it would also be nice to have aliases like `--only-new-files` and `--skip-new-files` for `--skip-duplicates` and `--only-duplicates`. diff --git a/doc/todo/wishlist:_do_not_import_new_files/comment_1_b41c214599d6601257a9d824cebbffcc._comment b/doc/todo/wishlist:_do_not_import_new_files/comment_1_b41c214599d6601257a9d824cebbffcc._comment new file mode 100644 index 0000000000..fbb5571cb8 --- /dev/null +++ b/doc/todo/wishlist:_do_not_import_new_files/comment_1_b41c214599d6601257a9d824cebbffcc._comment @@ -0,0 +1,14 @@ +[[!comment format=mdwn + username="http://ypid.wordpress.com/" + ip="213.153.84.215" + subject="gitignore" + date="2014-07-12T17:59:42Z" + content=""" +Hi + +The gitignore file is probably what you are looking for which is also honored by git-annex. Some documentation: + +* [On git-scm](http://git-scm.com/docs/gitignore) +* [On gitready](http://de.gitready.com/beginner/2009/01/19/ignoring-files.html) +* [On github](https://help.github.com/articles/ignoring-files) +"""]] diff --git a/doc/todo/wishlist:_do_not_import_new_files/comment_2_7b26171458baaf5c0057276d2d97e14c._comment b/doc/todo/wishlist:_do_not_import_new_files/comment_2_7b26171458baaf5c0057276d2d97e14c._comment new file mode 100644 index 0000000000..bedf9a54cd --- /dev/null +++ b/doc/todo/wishlist:_do_not_import_new_files/comment_2_7b26171458baaf5c0057276d2d97e14c._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 2" + date="2014-07-14T18:30:38Z" + content=""" +You can use --clean-duplicates unless your goal is for some reason to add the duplicate files to your repository a second time. +"""]] diff --git a/doc/todo/wishlist:_do_not_import_new_files/comment_3_6f80ce6cee4519d4f69193d5086e194a._comment b/doc/todo/wishlist:_do_not_import_new_files/comment_3_6f80ce6cee4519d4f69193d5086e194a._comment new file mode 100644 index 0000000000..e66cc5ea9c --- /dev/null +++ b/doc/todo/wishlist:_do_not_import_new_files/comment_3_6f80ce6cee4519d4f69193d5086e194a._comment @@ -0,0 +1,20 @@ +[[!comment format=mdwn + username="http://svario.it/gioele" + nickname="gioele" + subject="comment 3" + date="2014-07-15T06:54:40Z" + content=""" +> You can use --clean-duplicates unless your goal is for some reason to add the duplicate files to your repository a second time. + +My use case is that I clone an existing remote on a PC where there are already some of the annexed files (+ others). + +My workflow would be: + +* clone git-annex server:~/Documents.git +* git annex init \"other pc\" +* git annex import --skip-new (or --only-duplicates) ~/Dump/* + +~/Dump contains many other files in addition to those found in the Documents repository. + +In this case --clean-duplicate would not be the correct solution. +"""]] diff --git a/doc/todo/wishlist:_do_not_import_new_files/comment_4_22a7a03c30174e42e6d8e639e31e1d34._comment b/doc/todo/wishlist:_do_not_import_new_files/comment_4_22a7a03c30174e42e6d8e639e31e1d34._comment new file mode 100644 index 0000000000..f53fb6395c --- /dev/null +++ b/doc/todo/wishlist:_do_not_import_new_files/comment_4_22a7a03c30174e42e6d8e639e31e1d34._comment @@ -0,0 +1,12 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 4" + date="2014-07-15T19:01:24Z" + content=""" +So the goal is to inject any known objects from the dump into the local annex to avoid needing to re-transfer them. + +It seems to me that in this case, you would not even want to create new symlinks in the git repository. + +`git annex reinject` might be a better place to put code to handle this than `git annex import`. +"""]] diff --git a/doc/todo/wishlist:_do_not_import_new_files/comment_5_4294e92e2f4efb9dd10b280f5c9843f7._comment b/doc/todo/wishlist:_do_not_import_new_files/comment_5_4294e92e2f4efb9dd10b280f5c9843f7._comment new file mode 100644 index 0000000000..e312c083d2 --- /dev/null +++ b/doc/todo/wishlist:_do_not_import_new_files/comment_5_4294e92e2f4efb9dd10b280f5c9843f7._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="209.250.56.2" + subject="comment 5" + date="2014-07-15T19:13:05Z" + content=""" +A fundamental problem with this idea is that git-annex's keys can use any of many checksumming backends. So, which checksum should it try? Running every possible checksum on a file is going to re-read it repeatedly and be expensive. + +`git annex import` avoids this problem by using whatever the default backend is configured to be for the filename it's importing. This is good enough to make repeated runs of `git annex import` work ok, but when we get into trying to reinject whole directory trees like this, I don't think that's good enough. +"""]] diff --git a/doc/todo/wishlist__91__webapp__93__:_add_an_option_to_install__SSH_key_on_remote/comment_2_06230669218541ac392d674bedd43176._comment b/doc/todo/wishlist__91__webapp__93__:_add_an_option_to_install__SSH_key_on_remote/comment_2_06230669218541ac392d674bedd43176._comment new file mode 100644 index 0000000000..79ebb5e7c8 --- /dev/null +++ b/doc/todo/wishlist__91__webapp__93__:_add_an_option_to_install__SSH_key_on_remote/comment_2_06230669218541ac392d674bedd43176._comment @@ -0,0 +1,43 @@ +[[!comment format=mdwn + username="http://olivier.mehani.name/" + nickname="olivier-mehani" + subject="Manual solution" + date="2014-06-14T13:59:38Z" + content=""" +My problem stems from the fact that I manually git clone the git-annex repo, which prevents the assistant from creating the setup to use passwordless keys. I just reverse-engineered a working setup to work up what I was missing. I jot it down here for reference, but I guess the bottomline is that if you want to use the assistant with a repo, do it from the start. + +I assume that the client has a clone of the git(-annex) repo of the server. + + client$ git clone server:annex + +Our goal is to let git-annex on the client know that there is a specific key to use when connecting to server that will let it access the git-annex-shell (without a password). We first create the key. + + client:~$ ssh-keygen -t rsa -f ~/.ssh/git-annex/key.git-annex-server-user_annex + [enter an empty passphrase] + +We can then create a virtual SSH host on the client that will use this key to connect to the server, in client:~/.ssh/config: + + # Added manually for git-annex + Host git-annex-server-user_annex + Hostname server + Port 22 + IdentityFile ~/.ssh/git-annex/key.git-annex-server-user_annex + IdentitiesOnly yes + StrictHostKeyChecking yes + +(git-annex seems to use .2F (%2F) to encode path separators in the filenames.) + +The server then needs to know to let the key in, but only for git-annex in the specific folder. This is done in server:.ssh/authorized_keys: + + command=\"GIT_ANNEX_SHELL_DIRECTORY='annex' ~/.ssh/git-annex-shell\",no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-pty ssh-rsa AAAA... user@client + +The bit starting with ssh-rsa is the public key created in client:.ssh/git-annex/key.git-annex-server-user_annex.pub at the same time as the private key. + +Finally, all that remains is to change the remote in the client clone to use the virtual SSH host. + + client:~/annex $ git remote set-url origin ssh://user@git-annex-server-user_annex/~/annex + client:~/annex $ git remote set-url origin --push ssh://user@git-annex-server-user_annex/~/annex + +If everything worked, a sync from the client should now work without asking for a password, and starting the assistant will not either. + +"""]] diff --git a/doc/todo/wishlist__91__webapp__93__:_add_an_option_to_install__SSH_key_on_remote/comment_3_002afd775b82a0ced609c8305803a6c2._comment b/doc/todo/wishlist__91__webapp__93__:_add_an_option_to_install__SSH_key_on_remote/comment_3_002afd775b82a0ced609c8305803a6c2._comment new file mode 100644 index 0000000000..2515349a63 --- /dev/null +++ b/doc/todo/wishlist__91__webapp__93__:_add_an_option_to_install__SSH_key_on_remote/comment_3_002afd775b82a0ced609c8305803a6c2._comment @@ -0,0 +1,22 @@ +[[!comment format=mdwn + username="http://olivier.mehani.name/" + nickname="olivier-mehani" + subject="comment 3" + date="2014-06-14T14:15:55Z" + content=""" +After having done that on my first test repo, git-annex could sync, but failed to get the files. + + client:~/annex$ git annex get file + get file (not available) + Try making some of these repositories available: + 12345678-90ab-cdef-1234567890abcdef1 -- user@server:~/annex [origin] + + (Note that these git remotes have annex-ignore set: origin) + failed + git-annex: get: 1 failed + +The note helps: the problem is with the origin remote having annex-ignore set. git-annex therefore ignores it. This is easily fixed by just setting the flag to false. + + client:~/annex$ git config remote.origin.annex-ignore false + +"""]] diff --git a/doc/todo/wishlist__91__webapp__93__:_add_an_option_to_install__SSH_key_on_remote/comment_4_9e8fdc41fdefcb8be0d6bae7cd4a04a9._comment b/doc/todo/wishlist__91__webapp__93__:_add_an_option_to_install__SSH_key_on_remote/comment_4_9e8fdc41fdefcb8be0d6bae7cd4a04a9._comment new file mode 100644 index 0000000000..06d16239ad --- /dev/null +++ b/doc/todo/wishlist__91__webapp__93__:_add_an_option_to_install__SSH_key_on_remote/comment_4_9e8fdc41fdefcb8be0d6bae7cd4a04a9._comment @@ -0,0 +1,59 @@ +[[!comment format=mdwn + username="http://olivier.mehani.name/" + nickname="olivier-mehani" + subject="comment 4" + date="2014-07-09T01:09:33Z" + content=""" +And the ultimate, copy/pastable one, using shell variables: + + export GASERVER=server + export GAUSER=user + export GAPATH=/path + +For the new client (using bash): + + export GASANEPATH=${GAPATH//\//.2F} + export GASSHHOSTNAME=${GASERVER}-${GAUSER}_${GASANEPATH} + ssh-keygen -t rsa -f ~/.ssh/git-annex/key.git-annex-$GASSHHOSTNAME + cat << EOF >> ~/.ssh/config + # Added manually for git-annex + Host git-annex-$GASSHHOSTNAME + Hostname $GASERVER + IdentityFile ~/.ssh/git-annex/key.git-annex-$GASSHHOSTNAME + IdentitiesOnly yes + StrictHostKeyChecking yes + EOF + ssh-copy-id -i ~/.ssh/git-annex/key.git-annex-$GASSHHOSTNAME $GAUSER@$GASERVER + git remote add ${GASERVER/.*/} ssh://${GAUSER}@git-annex-${GASSHHOSTNAME}${GAPATH} + git config remote.${GASERVER/.*/}.annex-ignore false + +After the `ssh-copy-id` stage, the key can be used to get a full session. This +needs to be limited on the server, by prepending the following to the newly +added key in `.ssh/authorized_keys`, replacing `GAPATH` by the value of `$GAPATH`: + + command=\"GIT_ANNEX_SHELL_DIRECTORY='GAPATH' ~/.ssh/git-annex-shell\",no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-pty + +From the client, one can make sure this has been limite properly by trying to log in with the key: + + ssh -i ~/.ssh/git-annex/key.git-annex-$GASSHHOSTNAME $GAUSER@$GASERVER -o IdentitiesOnly=yes + +It should reply with the `git-annex-shell` helper complaing: + + git-annex-shell: bad parameters + + Usage: git-annex-shell [-c] command [parameters ...] [option ...] + + Plumbing commands: + + commit DIRECTORY commits any staged changes to the git-annex branch + configlist DIRECTORY outputs relevant git configuration + dropkey DIRECTORY KEY ... drops annexed content for specified keys + gcryptsetup DIRECTORY VALUE sets up gcrypt repository + inannex DIRECTORY KEY ... checks if keys are present in the annex + notifychanges DIRECTORY sends notification when git refs are changed + recvkey DIRECTORY KEY runs rsync in server mode to receive content + sendkey DIRECTORY KEY runs rsync in server mode to send content + transferinfo DIRECTORY KEY updates sender on number of bytes of content received + +... and this should be all set. +"""]] diff --git a/git-annex.cabal b/git-annex.cabal index bb583ecc9a..ba23d281ec 100644 --- a/git-annex.cabal +++ b/git-annex.cabal @@ -1,5 +1,5 @@ Name: git-annex -Version: 5.20140613 +Version: 5.20140717 Cabal-Version: >= 1.8 License: GPL-3 Maintainer: Joey Hess @@ -191,7 +191,7 @@ Executable git-annex yesod, yesod-default, yesod-static, yesod-form, yesod-core, http-types, transformers, wai, wai-extra, warp, warp-tls, blaze-builder, crypto-api, hamlet, clientsession, - template-haskell, data-default, aeson, network-conduit, + template-haskell, data-default, aeson, path-pieces, shakespeare CPP-Options: -DWITH_WEBAPP if flag(Webapp) && flag (Webapp-secure) diff --git a/standalone/android/.gitignore b/standalone/android/.gitignore deleted file mode 100644 index e8792ba9fd..0000000000 --- a/standalone/android/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -build-utils -start diff --git a/standalone/android/Makefile b/standalone/android/Makefile index a11c0bcc13..4f64b4e9ab 100644 --- a/standalone/android/Makefile +++ b/standalone/android/Makefile @@ -114,7 +114,8 @@ $(GIT_ANNEX_ANDROID_SOURCETREE)/busybox/build-stamp: busybox_config cd $(GIT_ANNEX_ANDROID_SOURCETREE)/busybox && $(MAKE) touch $@ -$(GIT_ANNEX_ANDROID_SOURCETREE)/git/build-stamp: +$(GIT_ANNEX_ANDROID_SOURCETREE)/git/build-stamp: git.patch + cat git.patch | (cd $(GIT_ANNEX_ANDROID_SOURCETREE)/git && git am) cd $(GIT_ANNEX_ANDROID_SOURCETREE)/git && $(MAKE) install NO_OPENSSL=1 NO_GETTEXT=1 NO_GECOS_IN_PWENT=1 NO_GETPASS=1 NO_NSEC=1 NO_MKDTEMP=1 NO_PTHREADS=1 NO_PERL=1 NO_CURL=1 NO_EXPAT=1 NO_TCLTK=1 NO_ICONV=1 prefix= DESTDIR=installed-tree touch $@ diff --git a/standalone/android/git.patch b/standalone/android/git.patch new file mode 100644 index 0000000000..32dd1cecc3 --- /dev/null +++ b/standalone/android/git.patch @@ -0,0 +1,54 @@ +From ec690f617cab405ec2c6420bde53e9d9ed984e5c Mon Sep 17 00:00:00 2001 +From: Joey Hess +Date: Thu, 3 Jul 2014 15:55:17 -0400 +Subject: [PATCH] Revert "config: preserve config file permissions on edits" + +This reverts commit daa22c6f8da466bd7a438f1bc27375fd737ffcf3. + +This breaks on Android's /sdcard, which has a variety of FUSE +implentations, all total shite. + +diff --git a/config.c b/config.c +index a1aef1c..7f3303d 100644 +--- a/config.c ++++ b/config.c +@@ -1637,13 +1637,6 @@ int git_config_set_multivar_in_file(const char *config_filename, + MAP_PRIVATE, in_fd, 0); + close(in_fd); + +- if (fchmod(fd, st.st_mode & 07777) < 0) { +- error("fchmod on %s failed: %s", +- lock->filename, strerror(errno)); +- ret = CONFIG_NO_WRITE; +- goto out_free; +- } +- + if (store.seen == 0) + store.seen = 1; + +@@ -1792,7 +1785,6 @@ int git_config_rename_section_in_file(const char *config_filename, + int out_fd; + char buf[1024]; + FILE *config_file; +- struct stat st; + + if (new_name && !section_name_is_ok(new_name)) { + ret = error("invalid section name: %s", new_name); +@@ -1814,14 +1806,6 @@ int git_config_rename_section_in_file(const char *config_filename, + goto unlock_and_out; + } + +- fstat(fileno(config_file), &st); +- +- if (fchmod(out_fd, st.st_mode & 07777) < 0) { +- ret = error("fchmod on %s failed: %s", +- lock->filename, strerror(errno)); +- goto out; +- } +- + while (fgets(buf, sizeof(buf), config_file)) { + int i; + int length; +-- +2.0.1 + diff --git a/standalone/android/haskell-patches/bloomfilter_fix-build-with-newer-base.patch b/standalone/android/haskell-patches/bloomfilter_fix-build-with-newer-base.patch deleted file mode 100644 index 52598bcf28..0000000000 --- a/standalone/android/haskell-patches/bloomfilter_fix-build-with-newer-base.patch +++ /dev/null @@ -1,41 +0,0 @@ -From bfbbfe26817bb06ef518b72a9f942dd3843be618 Mon Sep 17 00:00:00 2001 -From: dummy -Date: Sun, 25 May 2014 08:53:50 +0200 -Subject: [PATCH] fix build with newer base - ---- - Data/BloomFilter.hs | 3 ++- - Data/BloomFilter/Array.hs | 3 ++- - 2 files changed, 4 insertions(+), 2 deletions(-) - -diff --git a/Data/BloomFilter.hs b/Data/BloomFilter.hs -index 69711ef..7a284b8 100644 ---- a/Data/BloomFilter.hs -+++ b/Data/BloomFilter.hs -@@ -93,7 +93,8 @@ import Control.Monad (liftM, forM_) - import Control.Monad.ST (ST, runST) - import Control.DeepSeq (NFData(..)) - import Data.Array.Base (unsafeAt, unsafeRead, unsafeWrite) --import Data.Array.ST (STUArray, thaw, unsafeFreeze) -+import Data.Array.ST (STUArray, thaw) -+import Data.Array.Unsafe (unsafeFreeze) - import Data.Array.Unboxed (UArray) - import Data.Bits ((.&.), (.|.)) - import Data.BloomFilter.Array (newArray) -diff --git a/Data/BloomFilter/Array.hs b/Data/BloomFilter/Array.hs -index e085bbe..d94757a 100644 ---- a/Data/BloomFilter/Array.hs -+++ b/Data/BloomFilter/Array.hs -@@ -3,7 +3,8 @@ - - module Data.BloomFilter.Array (newArray) where - --import Control.Monad.ST (ST, unsafeIOToST) -+import Control.Monad.ST (ST) -+import Control.Monad.ST.Unsafe (unsafeIOToST) - import Data.Array.Base (MArray, STUArray(..), unsafeNewArray_) - #if __GLASGOW_HASKELL__ >= 704 - import Foreign.C.Types (CInt(..), CSize(..)) --- -2.0.0.rc2 - diff --git a/standalone/android/haskell-patches/dns_use-android-net.dns1-command-instead-of-resolv.conf.patch b/standalone/android/haskell-patches/dns_use-android-net.dns1-command-instead-of-resolv.conf.patch index f510b0d8d7..a00338fab8 100644 --- a/standalone/android/haskell-patches/dns_use-android-net.dns1-command-instead-of-resolv.conf.patch +++ b/standalone/android/haskell-patches/dns_use-android-net.dns1-command-instead-of-resolv.conf.patch @@ -1,6 +1,6 @@ -From 3f72e299c50476c270c5187092d6e8b13ddfbf1e Mon Sep 17 00:00:00 2001 +From aaef1aadb21a198475a656132ef4488b85b8fd1b Mon Sep 17 00:00:00 2001 From: dummy -Date: Mon, 26 May 2014 01:53:13 +0000 +Date: Thu, 3 Jul 2014 23:22:47 +0000 Subject: [PATCH] use android net.dns1 command instead of resolv.conf file Android has no /etc/resolv.conf. Some might have /system/etc/resolv.conf, @@ -9,12 +9,12 @@ but even that does not seem likely. This is likely a little slow, but is at least fine for git-annex's uses, since it only uses this library for occasional SRV lookups. --- - Network/DNS/Resolver.hs | 13 ++++++++----- + Network/DNS/Resolver.hs | 11 +++++++++-- dns.cabal | 1 + - 2 files changed, 9 insertions(+), 5 deletions(-) + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Network/DNS/Resolver.hs b/Network/DNS/Resolver.hs -index 5721e03..c4400d1 100644 +index e4124b8..7aca431 100644 --- a/Network/DNS/Resolver.hs +++ b/Network/DNS/Resolver.hs @@ -19,7 +19,7 @@ module Network.DNS.Resolver ( @@ -26,7 +26,7 @@ index 5721e03..c4400d1 100644 import qualified Data.ByteString.Char8 as BS import Data.Char (isSpace) import Data.List (isPrefixOf) -@@ -32,6 +32,7 @@ import Network.Socket (AddrInfoFlag(..), AddrInfo(..), defaultHints, getAddrInfo +@@ -32,6 +32,7 @@ import Network.Socket (AddrInfoFlag(..), AddrInfo(..), SockAddr(..), PortNumber( import Prelude hiding (lookup) import System.Random (getStdRandom, randomR) import System.Timeout (timeout) @@ -34,28 +34,26 @@ index 5721e03..c4400d1 100644 #if mingw32_HOST_OS == 1 import Network.Socket (send) -@@ -130,10 +131,12 @@ makeResolvSeed conf = ResolvSeed <$> addr - where +@@ -132,7 +133,13 @@ makeResolvSeed conf = ResolvSeed <$> addr addr = case resolvInfo conf of - RCHostName numhost -> makeAddrInfo numhost -- RCFilePath file -> toAddr <$> readFile file >>= makeAddrInfo -- toAddr cs = let l:_ = filter ("nameserver" `isPrefixOf`) $ lines cs -- in extract l -- extract = reverse . dropWhile isSpace . reverse . dropWhile isSpace . drop 11 + RCHostName numhost -> makeAddrInfo numhost Nothing + RCHostPort numhost mport -> makeAddrInfo numhost $ Just mport +- RCFilePath file -> toAddr <$> readFile file >>= \i -> makeAddrInfo i Nothing + RCFilePath file -> do + -- Android has no /etc/resolv.conf; use getprop command. + ls <- catch (lines <$> readProcess "getprop" ["net.dns1"] []) (const (return []) :: IOException -> IO [String]) -+ makeAddrInfo $ case ls of ++ let addr = case ls of + [] -> "8.8.8.8" -- google public dns as a fallback only + (l:_) -> l - - makeAddrInfo :: HostName -> IO AddrInfo - makeAddrInfo addr = do ++ makeAddrInfo addr Nothing + toAddr cs = let l:_ = filter ("nameserver" `isPrefixOf`) $ lines cs + in extract l + extract = reverse . dropWhile isSpace . reverse . dropWhile isSpace . drop 11 diff --git a/dns.cabal b/dns.cabal -index ceaf5f4..cd15e61 100644 +index 0a08a9e..724a3e0 100644 --- a/dns.cabal +++ b/dns.cabal -@@ -37,6 +37,7 @@ Library +@@ -38,6 +38,7 @@ Library , network >= 2.3 , random , resourcet diff --git a/standalone/android/haskell-patches/entropy_cross-build.patch b/standalone/android/haskell-patches/entropy_cross-build.patch index 5e09fdc8fc..37e85ed134 100644 --- a/standalone/android/haskell-patches/entropy_cross-build.patch +++ b/standalone/android/haskell-patches/entropy_cross-build.patch @@ -1,25 +1,25 @@ -From 10da50b5eea1e615af1d3b242f422ad278c9f268 Mon Sep 17 00:00:00 2001 +From a3cc880bd06a8d7efda79339afa81e02decbd04b Mon Sep 17 00:00:00 2001 From: dummy -Date: Fri, 18 Oct 2013 23:16:41 +0000 -Subject: [PATCH] cross build +Date: Mon, 14 Jul 2014 21:01:25 +0000 +Subject: [PATCH] fix cross build --- entropy.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/entropy.cabal b/entropy.cabal -index e69dec4..4fa3774 100644 +index 914d33a..9ab80f7 100644 --- a/entropy.cabal +++ b/entropy.cabal -@@ -14,7 +14,7 @@ category: Data, Cryptography - homepage: https://github.com/TomMD/entropy - bug-reports: https://github.com/TomMD/entropy/issues +@@ -16,7 +16,7 @@ bug-reports: https://github.com/TomMD/entropy/issues stability: stable + -- build-type: Simple + -- ^^ Used for HaLVM -build-type: Custom +build-type: Simple - cabal-version: >=1.10 - tested-with: GHC == 7.6.3 - -- data-files: + -- ^^ Test for RDRAND support using 'ghc' + cabal-version: >=1.10 + tested-with: GHC == 7.8.2 -- 1.7.10.4 diff --git a/standalone/android/haskell-patches/unix-time_hack-for-Bionic.patch b/standalone/android/haskell-patches/unix-time_hack-for-Bionic.patch index be7956beaf..4955d45cdf 100644 --- a/standalone/android/haskell-patches/unix-time_hack-for-Bionic.patch +++ b/standalone/android/haskell-patches/unix-time_hack-for-Bionic.patch @@ -1,18 +1,19 @@ -From e6d5c141186dbdbe97c698294485ffc4dcd3a843 Mon Sep 17 00:00:00 2001 +From add5feeb9ee9b4ffa1b43e4ba04b63e5ac2bfaf7 Mon Sep 17 00:00:00 2001 From: dummy -Date: Fri, 18 Oct 2013 16:45:50 +0000 -Subject: [PATCH] hack for bionic + cross build +Date: Mon, 14 Jul 2014 20:45:24 +0000 +Subject: [PATCH] hack for bionic --- Data/UnixTime/Types.hsc | 12 ------------ cbits/conv.c | 2 +- - 2 files changed, 1 insertion(+), 13 deletions(-) + unix-time.cabal | 1 - + 3 files changed, 1 insertion(+), 14 deletions(-) diff --git a/Data/UnixTime/Types.hsc b/Data/UnixTime/Types.hsc -index d30f39b..ec7ca4c 100644 +index 2ad0623..04fd766 100644 --- a/Data/UnixTime/Types.hsc +++ b/Data/UnixTime/Types.hsc -@@ -9,8 +9,6 @@ import Foreign.Storable +@@ -12,8 +12,6 @@ import Data.Binary #include @@ -21,7 +22,7 @@ index d30f39b..ec7ca4c 100644 -- | -- Data structure for Unix time. data UnixTime = UnixTime { -@@ -20,16 +18,6 @@ data UnixTime = UnixTime { +@@ -23,16 +21,6 @@ data UnixTime = UnixTime { , utMicroSeconds :: {-# UNPACK #-} !Int32 } deriving (Eq,Ord,Show) @@ -35,14 +36,14 @@ index d30f39b..ec7ca4c 100644 - (#poke struct timeval, tv_sec) ptr (utSeconds ut) - (#poke struct timeval, tv_usec) ptr (utMicroSeconds ut) - - -- | - -- Format of the strptime()/strftime() style. - type Format = ByteString + #if __GLASGOW_HASKELL__ >= 704 + instance Binary UnixTime where + put (UnixTime (CTime sec) msec) = do diff --git a/cbits/conv.c b/cbits/conv.c -index 7ff7b87..2e4c870 100644 +index ec31fef..b7bc0f9 100644 --- a/cbits/conv.c +++ b/cbits/conv.c -@@ -55,7 +55,7 @@ time_t c_parse_unix_time_gmt(char *fmt, char *src) { +@@ -96,7 +96,7 @@ time_t c_parse_unix_time_gmt(char *fmt, char *src) { #else strptime(src, fmt, &dst); #endif @@ -51,6 +52,18 @@ index 7ff7b87..2e4c870 100644 } size_t c_format_unix_time(char *fmt, time_t src, char* dst, int siz) { +diff --git a/unix-time.cabal b/unix-time.cabal +index 5de3f7c..7a0c244 100644 +--- a/unix-time.cabal ++++ b/unix-time.cabal +@@ -15,7 +15,6 @@ Extra-Tmp-Files: config.log config.status autom4te.cache cbits/config.h + Library + Default-Language: Haskell2010 + GHC-Options: -Wall +- CC-Options: -fPIC + Exposed-Modules: Data.UnixTime + Other-Modules: Data.UnixTime.Conv + Data.UnixTime.Diff -- 1.7.10.4 diff --git a/standalone/android/install-haskell-packages b/standalone/android/install-haskell-packages index 72cacb3b36..df870b96fb 100755 --- a/standalone/android/install-haskell-packages +++ b/standalone/android/install-haskell-packages @@ -89,7 +89,6 @@ install_pkgs () { patched lifted-base patched zlib patched MissingH - patched bloomfilter patched distributive patched comonad patched iproute diff --git a/standalone/android/term.patch b/standalone/android/term.patch index 5f7d403359..efea695640 100644 --- a/standalone/android/term.patch +++ b/standalone/android/term.patch @@ -585,7 +585,7 @@ index 57219c3..79b45ef 100755 # Make sure target-11 is installed -$ANDROID update sdk -u -t android-11 -+$ANDROID update sdk -u -t android-17 ++$ANDROID update sdk -u -t android-18 DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" ATE_ROOT="$( cd $DIR/.. && pwd )" @@ -594,5 +594,5 @@ index 57219c3..79b45ef 100755 PROJECT_DIR="$( dirname "$PROJECT_FILE" )" echo "Updating $PROJECT_FILE" - $ANDROID update project -p "$PROJECT_DIR" --target android-11 -+ $ANDROID update project -p "$PROJECT_DIR" --target android-17 ++ $ANDROID update project -p "$PROJECT_DIR" --target android-18 done diff --git a/standalone/linux/install-haskell-packages b/standalone/linux/install-haskell-packages index 8c6def5295..a8103b3860 100755 --- a/standalone/linux/install-haskell-packages +++ b/standalone/linux/install-haskell-packages @@ -13,7 +13,7 @@ set -e -if [ ! -d ../haskell-patches ]; then +if [ ! -d haskell-patches ]; then cd standalone/linux fi @@ -94,4 +94,9 @@ install_pkgs () { } cabal update + +# Some packages fail to install in a non unicode locale. +LANG=C.UTF-8 +export LANG + install_pkgs diff --git a/standalone/no-th/haskell-patches/shakespeare_remove-TH.patch b/standalone/no-th/haskell-patches/shakespeare_remove-TH.patch index 6a499bc262..86022ec3da 100644 --- a/standalone/no-th/haskell-patches/shakespeare_remove-TH.patch +++ b/standalone/no-th/haskell-patches/shakespeare_remove-TH.patch @@ -1,24 +1,24 @@ -From a4b8a90dbb97392378a3c5980cbb9c033702dfb2 Mon Sep 17 00:00:00 2001 -From: Your Name -Date: Tue, 20 May 2014 21:17:27 +0000 -Subject: [PATCH] remove TN +From 6de4e75bfbfccb8aedcbf3ee75e5d544f1eeeca5 Mon Sep 17 00:00:00 2001 +From: dummy +Date: Thu, 3 Jul 2014 21:48:14 +0000 +Subject: [PATCH] remove TH --- - Text/Cassius.hs | 23 ------ - Text/Coffee.hs | 56 ++------------- - Text/Css.hs | 151 ---------------------------------------- - Text/CssCommon.hs | 4 -- - Text/Hamlet.hs | 86 +++++++---------------- - Text/Hamlet/Parse.hs | 3 +- - Text/Julius.hs | 67 +++--------------- - Text/Lucius.hs | 46 +----------- - Text/Roy.hs | 51 ++------------ - Text/Shakespeare.hs | 70 +++---------------- - Text/Shakespeare/Base.hs | 28 -------- - Text/Shakespeare/I18N.hs | 178 ++--------------------------------------------- - Text/Shakespeare/Text.hs | 125 +++------------------------------ - shakespeare.cabal | 2 +- - 14 files changed, 78 insertions(+), 812 deletions(-) + Text/Cassius.hs | 23 ------ + Text/Coffee.hs | 56 ++------------- + Text/Css.hs | 151 --------------------------------------- + Text/CssCommon.hs | 4 -- + Text/Hamlet.hs | 86 +++++++--------------- + Text/Hamlet/Parse.hs | 3 +- + Text/Julius.hs | 67 +++-------------- + Text/Lucius.hs | 46 +----------- + Text/Roy.hs | 51 ++----------- + Text/Shakespeare.hs | 70 +++--------------- + Text/Shakespeare/Base.hs | 28 -------- + Text/Shakespeare/I18N.hs | 178 ++-------------------------------------------- + Text/Shakespeare/Text.hs | 125 +++----------------------------- + shakespeare.cabal | 3 +- + 14 files changed, 78 insertions(+), 813 deletions(-) diff --git a/Text/Cassius.hs b/Text/Cassius.hs index 91fc90f..c515807 100644 @@ -345,7 +345,7 @@ index 719e0a8..8c40e8c 100644 -mkSizeType "ExSize" "ex" -mkSizeType "PixelSize" "px" diff --git a/Text/Hamlet.hs b/Text/Hamlet.hs -index 9500ecb..ec8471a 100644 +index 39c1528..6321cd3 100644 --- a/Text/Hamlet.hs +++ b/Text/Hamlet.hs @@ -11,36 +11,36 @@ @@ -497,7 +497,7 @@ index 9500ecb..ec8471a 100644 -- | Checks for truth in the left value in each pair in the first argument. If -- a true exists, then the corresponding right action is performed. Only the -@@ -452,7 +420,7 @@ hamletUsedIdentifiers settings = +@@ -460,7 +428,7 @@ hamletUsedIdentifiers settings = data HamletRuntimeRules = HamletRuntimeRules { hrrI18n :: Bool } @@ -506,7 +506,7 @@ index 9500ecb..ec8471a 100644 hamletFileReloadWithSettings :: HamletRuntimeRules -> HamletSettings -> FilePath -> Q Exp hamletFileReloadWithSettings hrr settings fp = do -@@ -479,7 +447,7 @@ hamletFileReloadWithSettings hrr settings fp = do +@@ -487,7 +455,7 @@ hamletFileReloadWithSettings hrr settings fp = do c VTUrlParam = [|EUrlParam|] c VTMixin = [|\r -> EMixin $ \c -> r c|] c VTMsg = [|EMsg|] @@ -1294,19 +1294,21 @@ index 6865a5a..e25a8be 100644 - rendered <- shakespeareFile rs{ justVarInterpolation = True } fp - return (render `AppE` rendered) diff --git a/shakespeare.cabal b/shakespeare.cabal -index a555c24..d73da26 100644 +index 05b985e..dd8762a 100644 --- a/shakespeare.cabal +++ b/shakespeare.cabal -@@ -62,8 +62,8 @@ library +@@ -61,10 +61,9 @@ library + Text.Lucius Text.Cassius Text.Shakespeare.Base ++ Text.Css Text.Shakespeare -- other-modules: Text.Hamlet.Parse - Text.Css -+ other-modules: Text.Hamlet.Parse +- Text.TypeScript + other-modules: Text.Hamlet.Parse +- Text.Css Text.MkSizeType Text.IndentToBrace Text.CssCommon -- -2.0.0.rc2 +1.7.10.4 diff --git a/standalone/windows/build.sh b/standalone/windows/build.sh index 8751e4573a..a661e8fbc1 100755 --- a/standalone/windows/build.sh +++ b/standalone/windows/build.sh @@ -68,3 +68,7 @@ rm -f last-incremental-failed # (doesn't currently work well on autobuilder, reason unknown) rm -rf .t withcyg dist/build/git-annex/git-annex.exe test || true + +rm -f dist/build-version +ghc --make Build/BuildVersion.hs +Build/BuildVersion > dist/build-version diff --git a/templates/configurators/genkeymodal.hamlet b/templates/configurators/genkeymodal.hamlet index c7dc3aad94..23c3863054 100644 --- a/templates/configurators/genkeymodal.hamlet +++ b/templates/configurators/genkeymodal.hamlet @@ -2,10 +2,11 @@
-

- # - Generating a #{maxRecommendedKeySize} bit GnuPg key. -
+
+

+ # + Generating a #{maxRecommendedKeySize} bit GnuPg key. +

Generating a GnuPg key can take a long time. To speed up the process, # it actually helps to use your computer for other things, which helps #