git-annex 5.20151019 → 5.20151102
raw patch · 41 files changed
+757/−96 lines, 41 files
Files
- Annex/SpecialRemote.hs +7/−3
- CHANGELOG +18/−1
- Command/EnableRemote.hs +19/−7
- Command/Info.hs +2/−1
- Git/Construct.hs +11/−6
- Remote.hs +21/−12
- Remote/S3.hs +10/−0
- Utility/Process.hs +8/−8
- Utility/Process/Shim.hs +3/−0
- Utility/Touch.hsc +23/−3
- Utility/libdiskfree.c +2/−11
- debian/changelog +18/−1
- doc/bugs/.mdwn +250/−0
- doc/bugs/Files_in___34__here__34___not_known_to_git_annex.mdwn +50/−0
- doc/bugs/Support_non-default_storage_classes_with_Google_Cloud_Storage.mdwn +2/−0
- doc/bugs/git_annex_assistant_cannot_run_rsync___40__windows__41__.mdwn +22/−0
- doc/design/assistant/polls/Android_default_directory.mdwn +1/−1
- doc/devblog/day_328__git-annex_is_five.mdwn +15/−0
- doc/devblog/day__329-330__a_rising_tide.mdwn +15/−0
- doc/forum/Getting_metadata.mdwn +30/−0
- doc/git-annex-assistant.mdwn +2/−0
- doc/git-annex-enableremote.mdwn +3/−2
- doc/install/Windows.mdwn +1/−1
- doc/news/2015_git-annex_user_survey.mdwn +5/−0
- doc/news/version_5.20150916.mdwn +0/−32
- doc/news/version_5.20151019.mdwn +1/−1
- doc/news/version_5.20151102.mdwn +14/−0
- doc/polls.mdwn +1/−0
- doc/special_remotes/S3.mdwn +7/−2
- doc/special_remotes/comment_25_d9f298f284d66fb0aff029eb01f1ce23._comment +90/−0
- doc/special_remotes/comment_26_606c1bee71a265f9df3a8cf50fce9a21._comment +20/−0
- doc/thanks.mdwn +2/−0
- doc/todo/Amazon_Cloud_Drive.mdwn +1/−1
- doc/todo/Bittorrent-like_features.mdwn +3/−0
- doc/todo/show_me_where_unused_file_was__44___i_can_wait.mdwn +7/−0
- doc/todo/xmpp_removal/comment_2_1c92cde199612bbd765c818e7b64f944._comment +46/−0
- doc/todo/xmpp_removal/comment_3_661be364029ce45db7d6a111b9d65ee7._comment +13/−0
- doc/users/parhuzamos.mdwn +8/−0
- git-annex.cabal +1/−1
- man/git-annex-assistant.1 +2/−0
- man/git-annex-enableremote.1 +3/−2
Annex/SpecialRemote.hs view
@@ -42,10 +42,14 @@ | n' == n -> True | otherwise -> False -remoteNames :: Annex [RemoteName]-remoteNames = do+specialRemoteMap :: Annex (M.Map UUID RemoteName)+specialRemoteMap = do m <- Logs.Remote.readRemoteLog- return $ mapMaybe (M.lookup nameKey . snd) $ M.toList m+ return $ M.fromList $ mapMaybe go (M.toList m)+ where+ go (u, c) = case M.lookup nameKey c of+ Nothing -> Nothing+ Just n -> Just (u, n) {- find the specified remote type -} findType :: RemoteConfig -> Either String RemoteType
CHANGELOG view
@@ -1,3 +1,20 @@+git-annex (5.20151102) unstable; urgency=medium++ * Use statvfs on OSX.+ * Symlink timestamp preservation code uses functions+ from unix-2.7.0 when available, which should be more portable.+ * enableremote: List uuids and descriptions of remotes that can be+ enabled, and accept either the uuid or the description in leu if the+ name.+ * Catch up with current git behavior when both repo and repo.git exist;+ it seems it now prefers repo in this case, although historically it may+ have preferred repo.git.+ * Fix failure to build with aws-0.13.0.+ * When built with aws-0.13.0, the S3 special remote can be used to create+ google nearline buckets, by setting storageclass=NEARLINE.++ -- Joey Hess <id@joeyh.name> Mon, 02 Nov 2015 12:41:20 -0400+ git-annex (5.20151019) unstable; urgency=medium * Fix a longstanding, but unlikely to occur bug, where dropping@@ -49,7 +66,7 @@ and stop recommending bittornado | bittorrent. * Debian: Remove build dependency on transformers library, as it is now included in ghc.- * Debian: Remote menu file, since a desktop file is provided and+ * Debian: Remove menu file, since a desktop file is provided and lintian says there can be only one. -- Joey Hess <id@joeyh.name> Mon, 19 Oct 2015 13:59:01 -0400
Command/EnableRemote.hs view
@@ -12,6 +12,8 @@ import qualified Logs.Remote import qualified Types.Remote as R import qualified Annex.SpecialRemote+import qualified Remote+import Logs.UUID import qualified Data.Map as M @@ -25,12 +27,19 @@ seek = withWords start start :: [String] -> CommandStart-start [] = unknownNameError "Specify the name of the special remote to enable."+start [] = unknownNameError "Specify the special remote to enable." start (name:ws) = go =<< Annex.SpecialRemote.findExisting name where config = Logs.Remote.keyValToConfig ws - go Nothing = unknownNameError "Unknown special remote name."+ go Nothing = do+ m <- Annex.SpecialRemote.specialRemoteMap+ confm <- Logs.Remote.readRemoteLog+ v <- Remote.nameToUUID' name+ case v of+ Right u | u `M.member` m ->+ go (Just (u, fromMaybe M.empty (M.lookup u confm)))+ _ -> unknownNameError "Unknown special remote." go (Just (u, c)) = do let fullconfig = config `M.union` c t <- either error return (Annex.SpecialRemote.findType fullconfig)@@ -39,11 +48,14 @@ unknownNameError :: String -> Annex a unknownNameError prefix = do- names <- Annex.SpecialRemote.remoteNames- error $ prefix ++ "\n" ++- if null names- then "(No special remotes are currently known; perhaps use initremote instead?)"- else "Known special remotes: " ++ unwords names+ m <- Annex.SpecialRemote.specialRemoteMap+ descm <- M.unionWith Remote.addName <$> uuidMap <*> pure m+ msg <- if M.null m+ then pure "(No special remotes are currently known; perhaps use initremote instead?)"+ else Remote.prettyPrintUUIDsDescs+ "known special remotes"+ descm (M.keys m)+ error $ prefix ++ "\n" ++ msg perform :: RemoteType -> UUID -> R.RemoteConfig -> CommandPerform perform t u c = do
Command/Info.hs view
@@ -427,8 +427,9 @@ . M.toList <$> cachedRepoData let maxlen = maximum (map (length . snd) l)+ descm <- lift uuidDescriptions -- This also handles json display.- s <- lift $ prettyPrintUUIDsWith (Just "size") desc $+ s <- lift $ prettyPrintUUIDsWith (Just "size") desc descm $ map (\(u, sz) -> (u, Just $ mkdisp sz maxlen)) l return $ countRepoList (length l) s where
Git/Construct.hs view
@@ -58,24 +58,29 @@ - specified. -} fromAbsPath :: FilePath -> IO Repo fromAbsPath dir- | absoluteGitPath dir = ifM (doesDirectoryExist dir') ( ret dir' , hunt )+ | absoluteGitPath dir = hunt | otherwise = error $ "internal error, " ++ dir ++ " is not absolute" where ret = pure . newFrom . LocalUnknown- {- Git always looks for "dir.git" in preference to- - to "dir", even if dir ends in a "/". -} canondir = dropTrailingPathSeparator dir- dir' = canondir ++ ".git" {- When dir == "foo/.git", git looks for "foo/.git/.git", - and failing that, uses "foo" as the repository. -} hunt | (pathSeparator:".git") `isSuffixOf` canondir = ifM (doesDirectoryExist $ dir </> ".git") ( ret dir- , ret $ takeDirectory canondir+ , ret (takeDirectory canondir) )- | otherwise = ret dir+ | otherwise = ifM (doesDirectoryExist dir)+ ( ret dir+ -- git falls back to dir.git when dir doesn't+ -- exist, as long as dir didn't end with a+ -- path separator+ , if dir == canondir+ then ret (dir ++ ".git")+ else ret dir+ ) {- Remote Repo constructor. Throws exception on invalid url. -
Remote.hs view
@@ -25,6 +25,7 @@ remoteMap, remoteMap', uuidDescriptions,+ addName, byName, byName', byNameOrGroup,@@ -32,6 +33,7 @@ byNameWithUUID, byCost, prettyPrintUUIDs,+ prettyPrintUUIDsDescs, prettyPrintUUIDsWith, prettyListUUIDs, prettyUUID,@@ -168,34 +170,41 @@ _ -> Right u _us -> Left "Found multiple repositories with that description" -{- Pretty-prints a list of UUIDs of remotes, for human display.+{- Pretty-prints a list of UUIDs of remotes, with their descriptions,+ - for human display. - - When JSON is enabled, also outputs a machine-readable description - of the UUIDs. -} prettyPrintUUIDs :: String -> [UUID] -> Annex String-prettyPrintUUIDs desc uuids = prettyPrintUUIDsWith Nothing desc $- zip uuids (repeat (Nothing :: Maybe String))+prettyPrintUUIDs header uuids = do+ descm <- uuidDescriptions+ prettyPrintUUIDsDescs header descm uuids +prettyPrintUUIDsDescs :: String -> M.Map UUID RemoteName -> [UUID] -> Annex String+prettyPrintUUIDsDescs header descm uuids =+ prettyPrintUUIDsWith Nothing header descm+ (zip uuids (repeat (Nothing :: Maybe String)))+ {- An optional field can be included in the list of UUIDs. -} prettyPrintUUIDsWith :: (JSON v, Show v) => Maybe String -> String + -> M.Map UUID RemoteName -> [(UUID, Maybe v)] -> Annex String-prettyPrintUUIDsWith optfield desc uuids = do+prettyPrintUUIDsWith optfield header descm uuidvals = do hereu <- getUUID- m <- uuidDescriptions- maybeShowJSON [(desc, map (jsonify m hereu) uuids)]- return $ unwords $ map (\u -> "\t" ++ prettify m hereu u ++ "\n") uuids+ maybeShowJSON [(header, map (jsonify hereu) uuidvals)]+ return $ unwords $ map (\u -> "\t" ++ prettify hereu u ++ "\n") uuidvals where- finddescription m u = M.findWithDefault "" u m- prettify m hereu (u, optval)+ finddescription u = M.findWithDefault "" u descm+ prettify hereu (u, optval) | not (null d) = addoptval $ fromUUID u ++ " -- " ++ d | otherwise = addoptval $ fromUUID u where ishere = hereu == u- n = finddescription m u+ n = finddescription u d | null n && ishere = "here" | ishere = addName n "here"@@ -203,9 +212,9 @@ addoptval s = case optval of Nothing -> s Just val -> show val ++ ": " ++ s- jsonify m hereu (u, optval) = toJSObject $ catMaybes+ jsonify hereu (u, optval) = toJSObject $ catMaybes [ Just ("uuid", toJSON $ fromUUID u)- , Just ("description", toJSON $ finddescription m u)+ , Just ("description", toJSON $ finddescription u) , Just ("here", toJSON $ hereu == u) , case (optfield, optval) of (Just field, Just val) -> Just (field, showJSON val)
Remote/S3.hs view
@@ -330,10 +330,20 @@ (bucket info) (acl info) locconstraint+#if MIN_VERSION_aws(0,13,0)+ storageclass+#endif writeUUIDFile c u info h locconstraint = mkLocationConstraint $ T.pack datacenter datacenter = fromJust $ M.lookup "datacenter" c+#if MIN_VERSION_aws(0,13,0)+ -- "NEARLINE" as a storage class when creating a bucket is a+ -- nonstandard extension of Google Cloud Storage.+ storageclass = case getStorageClass c of+ sc@(S3.OtherStorageClass "NEARLINE") -> Just sc+ _ -> Nothing+#endif {- Writes the UUID to an annex-uuid file within the bucket. -
Utility/Process.hs view
@@ -41,9 +41,12 @@ devNull, ) where -import qualified System.Process-import qualified System.Process as X hiding (CreateProcess(..), createProcess, runInteractiveProcess, readProcess, readProcessWithExitCode, system, rawSystem, runInteractiveCommand, runProcess)-import System.Process hiding (createProcess, readProcess, waitForProcess)+import qualified Utility.Process.Shim+import qualified Utility.Process.Shim as X hiding (CreateProcess(..), createProcess, runInteractiveProcess, readProcess, readProcessWithExitCode, system, rawSystem, runInteractiveCommand, runProcess)+import Utility.Process.Shim hiding (createProcess, readProcess, waitForProcess)+import Utility.Misc+import Utility.Exception+ import System.Exit import System.IO import System.Log.Logger@@ -58,9 +61,6 @@ import Data.Maybe import Prelude -import Utility.Misc-import Utility.Exception- type CreateProcessRunner = forall a. CreateProcess -> ((Maybe Handle, Maybe Handle, Maybe Handle, ProcessHandle) -> IO a) -> IO a data StdHandle = StdinHandle | StdoutHandle | StderrHandle@@ -372,7 +372,7 @@ createProcess :: CreateProcess -> IO (Maybe Handle, Maybe Handle, Maybe Handle, ProcessHandle) createProcess p = do debugProcess p- System.Process.createProcess p+ Utility.Process.Shim.createProcess p -- | Debugging trace for a CreateProcess. debugProcess :: CreateProcess -> IO ()@@ -392,6 +392,6 @@ -- | Wrapper around 'System.Process.waitForProcess' that does debug logging. waitForProcess :: ProcessHandle -> IO ExitCode waitForProcess h = do- r <- System.Process.waitForProcess h+ r <- Utility.Process.Shim.waitForProcess h debugM "Utility.Process" ("process done " ++ show r) return r
+ Utility/Process/Shim.hs view
@@ -0,0 +1,3 @@+module Utility.Process.Shim (module X) where++import System.Process as X
Utility/Touch.hsc view
@@ -5,7 +5,7 @@ - License: BSD-2-clause -} -{-# LANGUAGE ForeignFunctionInterface #-}+{-# LANGUAGE ForeignFunctionInterface, CPP #-} module Utility.Touch ( TimeSpec(..),@@ -13,6 +13,26 @@ touch ) where +#if MIN_VERSION_unix(2,7,0)++import System.Posix.Files+import System.Posix.Types++newtype TimeSpec = TimeSpec EpochTime++{- Changes the access and modification times of an existing file.+ Can follow symlinks, or not. Throws IO error on failure. -}+touchBoth :: FilePath -> TimeSpec -> TimeSpec -> Bool -> IO ()+touchBoth file (TimeSpec atime) (TimeSpec mtime) follow+ | follow = setFileTimes file atime mtime+ | otherwise = setSymbolicLinkTimesHiRes file (realToFrac atime) (realToFrac mtime)++touch :: FilePath -> TimeSpec -> Bool -> IO ()+touch file mtime = touchBoth file mtime mtime++#else+{- Compatability interface for old version of unix, to be removed eventally. -}+ #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>@@ -35,8 +55,6 @@ newtype TimeSpec = TimeSpec CTime -{- Changes the access and modification times of an existing file.- Can follow symlinks, or not. Throws IO error on failure. -} touchBoth :: FilePath -> TimeSpec -> TimeSpec -> Bool -> IO () touch :: FilePath -> TimeSpec -> Bool -> IO ()@@ -122,4 +140,6 @@ #warning "utimensat and lutimes not available; building without symlink timestamp preservation support" touchBoth _ _ _ _ = return () #endif+#endif+ #endif
Utility/libdiskfree.c view
@@ -7,14 +7,6 @@ /* Include appropriate headers for the OS, and define what will be used to * check the free space. */-#if defined(__APPLE__)-# define _DARWIN_FEATURE_64_BIT_INODE 1-# include <sys/param.h>-# include <sys/mount.h>-# define STATCALL statfs-# define STATSTRUCT statfs64-# define BSIZE f_bsize-#else #if defined (__FreeBSD__) # include <sys/param.h> # include <sys/mount.h>@@ -26,8 +18,8 @@ # warning free space checking code not available for Android # define UNKNOWN #else-#if defined (__linux__) || defined (__FreeBSD_kernel__) || (defined (__SVR4) && defined (__sun))-/* Linux or Debian kFreeBSD or Solaris */+#if defined (__linux__) || defined (__APPLE__) || defined (__FreeBSD_kernel__) || (defined (__SVR4) && defined (__sun))+/* Linux or OSX or Debian kFreeBSD or Solaris */ /* This is a POSIX standard, so might also work elsewhere too. */ # include <sys/statvfs.h> # define STATCALL statvfs@@ -36,7 +28,6 @@ #else # warning free space checking code not available for this OS # define UNKNOWN-#endif #endif #endif #endif
debian/changelog view
@@ -1,3 +1,20 @@+git-annex (5.20151102) unstable; urgency=medium++ * Use statvfs on OSX.+ * Symlink timestamp preservation code uses functions+ from unix-2.7.0 when available, which should be more portable.+ * enableremote: List uuids and descriptions of remotes that can be+ enabled, and accept either the uuid or the description in leu if the+ name.+ * Catch up with current git behavior when both repo and repo.git exist;+ it seems it now prefers repo in this case, although historically it may+ have preferred repo.git.+ * Fix failure to build with aws-0.13.0.+ * When built with aws-0.13.0, the S3 special remote can be used to create+ google nearline buckets, by setting storageclass=NEARLINE.++ -- Joey Hess <id@joeyh.name> Mon, 02 Nov 2015 12:41:20 -0400+ git-annex (5.20151019) unstable; urgency=medium * Fix a longstanding, but unlikely to occur bug, where dropping@@ -49,7 +66,7 @@ and stop recommending bittornado | bittorrent. * Debian: Remove build dependency on transformers library, as it is now included in ghc.- * Debian: Remote menu file, since a desktop file is provided and+ * Debian: Remove menu file, since a desktop file is provided and lintian says there can be only one. -- Joey Hess <id@joeyh.name> Mon, 19 Oct 2015 13:59:01 -0400
+ doc/bugs/.mdwn view
@@ -0,0 +1,250 @@+### Please describe the problem.++For shared repositories git annex refuses to move file out of repository (git annex move --to) if user triggering the move is not the owner of the file.++### What steps will reproduce the problem?++ * Init two shared repositories and create a file+ * Modify that file in repo1 as user u1+ * Move the file to repo2 as "repository maintenance" user u2+ - this gives permission denied error++Alternatively -- mabye better understandable usecase(repository maintainer moves unused files to backup):++ * Init two shared repositories and create a file+ * Modify that file in repo1 as user u1+ * Modify that file in repo1 a second time (regardless which user) -- this makes the version edited by u1 unused+ * Display unused files as repository maintenance user u2 + - this gives permission denied error+ * Move unused files to repo2 as "repository maintenance" user u2 + - this gives permission denied error++### What version of git-annex are you using? On what operating system?++[[!format sh """+stefan@atom-linux:/tmp/git-annex-test/a$ git --version+git version 2.6.2+stefan@atom-linux:/tmp/git-annex-test/a$ git annex version+git-annex version: 5.20150610+gitg608172f-1~ndall+1+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E MD5E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 MD5 WORM URL+remote types: git gcrypt S3 bup directory rsync web bittorrent webdav tahoe glacier ddar hook external+local repository version: 5+supported repository version: 5+upgrade supported from repository versions: 0 1 2 4+stefan@atom-linux:/tmp/git-annex-test/a$ uname -a+Linux atom-linux 3.13.0-66-generic #108-Ubuntu SMP Wed Oct 7 15:21:40 UTC 2015 i686 i686 i686 GNU/Linux+"""]]++### Please provide any additional information below.++[[!format sh """++# init two shared repositories and create a file "file.txt"++stefan@atom-linux:/tmp/git-annex-test$ mkdir a+stefan@atom-linux:/tmp/git-annex-test$ mkdir b+stefan@atom-linux:/tmp/git-annex-test$ sudo chown :fileadmin-data *+stefan@atom-linux:/tmp/git-annex-test$ sudo chmod g+s *+stefan@atom-linux:/tmp/git-annex-test$ cd a+stefan@atom-linux:/tmp/git-annex-test/a$ git init --shared .+Initialized empty shared Git repository in /tmp/git-annex-test/a/.git/+stefan@atom-linux:/tmp/git-annex-test/a$ git config core.sharedrepository group+stefan@atom-linux:/tmp/git-annex-test/a$ echo "test" >> file.txt+stefan@atom-linux:/tmp/git-annex-test/a$ ls -al+total 16+drwxrwsr-x 3 stefan fileadmin-data 4096 Nov 1 16:41 .+drwxrwxr-x 4 stefan stefan 4096 Nov 1 16:39 ..+-rw-rw-r-- 1 stefan fileadmin-data 5 Nov 1 16:41 file.txt+drwxrwsr-x 7 stefan fileadmin-data 4096 Nov 1 16:40 .git+stefan@atom-linux:/tmp/git-annex-test/a$ git annex init+init ok+(recording state in git...)+stefan@atom-linux:/tmp/git-annex-test/a$ git annex add file.txt+add file.txt ok+(recording state in git...)+stefan@atom-linux:/tmp/git-annex-test/a$ git commit -m "new file"+[master (root-commit) 7aeaa5f] new file+ 1 file changed, 1 insertion(+)+ create mode 120000 file.txt+stefan@atom-linux:/tmp/git-annex-test/a$ cd ..+stefan@atom-linux:/tmp/git-annex-test$ cd b+stefan@atom-linux:/tmp/git-annex-test/b$ git clone -o a ssh://127.0.0.1/tmp/git-annex-test/a .+Cloning into '.'...+remote: Counting objects: 13, done.+remote: Compressing objects: 100% (9/9), done.+remote: Total 13 (delta 0), reused 0 (delta 0)+Receiving objects: 100% (13/13), done.+Checking connectivity... done.+stefan@atom-linux:/tmp/git-annex-test/b$ git config core.sharedrepository group+stefan@atom-linux:/tmp/git-annex-test/b$ git annex init "B"+init B (merging a/git-annex into git-annex...)+(recording state in git...)+ok+(recording state in git...)+stefan@atom-linux:/tmp/git-annex-test/b$ cd ..+stefan@atom-linux:/tmp/git-annex-test$ cd a+stefan@atom-linux:/tmp/git-annex-test/a$ git remote add b ssh://127.0.0.1/tmp/git-annex-test/b+stefan@atom-linux:/tmp/git-annex-test/a$ git annex sync+commit ok+pull b+remote: Counting objects: 6, done.+remote: Compressing objects: 100% (5/5), done.+remote: Total 6 (delta 0), reused 1 (delta 0)+Unpacking objects: 100% (6/6), done.+From ssh://127.0.0.1/tmp/git-annex-test/b+ * [new branch] git-annex -> b/git-annex+ * [new branch] master -> b/master+ok+(merging b/git-annex into git-annex...)+push b+Total 0 (delta 0), reused 0 (delta 0)+To ssh://127.0.0.1/tmp/git-annex-test/b+ * [new branch] git-annex -> synced/git-annex+ * [new branch] master -> synced/master+ok+stefan@atom-linux:/tmp/git-annex-test/a$ git annex move file.txt --to b+move file.txt (checking b...) (to b...)+SHA256E-s5--f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2.txt+ 5 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/1)+ok+(recording state in git...)++## ok, everything fine so far - we have a file "file.txt" which was created in a and moved to b successfully. +## Now we go to a different user account and modify "file.txt"+## -------------------------------------- userswitch++unison@atom-linux:/tmp/git-annex-test/a$ git annex get file.txt+get file.txt (from b...)+SHA256E-s5--f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2.txt+ 5 100% 4.88kB/s 0:00:00 (xfr#1, to-chk=0/1)+ok+(recording state in git...)+unison@atom-linux:/tmp/git-annex-test/a$ git annex unlock file.txt+unlock file.txt (copying...) ok+unison@atom-linux:/tmp/git-annex-test/a$ ls -al+total 16+drwxrwsr-x 3 stefan fileadmin-data 4096 Nov 1 16:48 .+drwxrwxr-x 4 stefan stefan 4096 Nov 1 16:39 ..+-rw-rw-r-- 1 unison fileadmin-data 5 Nov 1 16:47 file.txt+drwxrwsr-x 9 stefan fileadmin-data 4096 Nov 1 16:44 .git+unison@atom-linux:/tmp/git-annex-test/a$ echo "a change by unison user" >> file.txt+unison@atom-linux:/tmp/git-annex-test/a$ git annex add .+add file.txt ok+(recording state in git...)+unison@atom-linux:/tmp/git-annex-test/a$ git commit -m "unison change"+[master 37bd55d] unison change+ 1 file changed, 1 insertion(+), 1 deletion(-)++## now the original user / repository maintainer wants to move the file +## out to b which gives an permission denied error for setFileMode+## git annex does copy it to b, but not remove it from a+## -------------------------------------- userswitch++stefan@atom-linux:/tmp/git-annex-test/a$ ls -al+total 16+drwxrwsr-x 3 stefan fileadmin-data 4096 Nov 1 16:48 .+drwxrwxr-x 4 stefan stefan 4096 Nov 1 16:39 ..+lrwxrwxrwx 1 unison fileadmin-data 188 Nov 1 16:48 file.txt -> .git/annex/objects/8x/7w/SHA256E-s29--6aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.tx+t/SHA256E-s29--6aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt+drwxrwsr-x 9 stefan fileadmin-data 4096 Nov 1 16:48 .git+stefan@atom-linux:/tmp/git-annex-test/a$ git annex move file.txt --to b+move file.txt (checking b...) (to b...)+SHA256E-s29--6aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt+ 29 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/1)+git-annex: failed to lock content: .git/annex/objects/8x/7w/SHA256E-s29--6aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt/SHA256E-s29--6aec68aad4745c6+eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt: setFileMode: permission denied (Operation not permitted)++# which makes sense - the file is owned by other user:+stefan@atom-linux:/tmp/git-annex-test/a$ ls -al .git/annex/objects/8x/7w/SHA256E-s29--6aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt/SHA256E-s29--6+aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt+-r--r--r-- 1 unison fileadmin-data 29 Nov 1 16:48 .git/annex/objects/8x/7w/SHA256E-s29--6aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt/SHA256E-s29-+-6aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt++## the last editor of the file can move it, though:+## -------------------------------------- userswitch+unison@atom-linux:/tmp/git-annex-test/a$ git annex move file.txt --to b+move file.txt (checking b...) ok+(recording state in git...)++## continued - for second usecase...+## edit file two more times as unison user:++unison@atom-linux:/tmp/git-annex-test/a$ git annex unlock file.txt+unlock file.txt (copying...) ok+unison@atom-linux:/tmp/git-annex-test/a$ echo "another unison modification" >> file.txt+unison@atom-linux:/tmp/git-annex-test/a$ ls+file.txt+unison@atom-linux:/tmp/git-annex-test/a$ git annex add+add file.txt ok+(recording state in git...)+unison@atom-linux:/tmp/git-annex-test/a$ git commit -m "another unison change"+[master df85491] another unison change+ 1 file changed, 1 insertion(+), 1 deletion(-)+unison@atom-linux:/tmp/git-annex-test/a$ git annex unlock file.txt+unlock file.txt (copying...) ok+(recording state in git...)+unison@atom-linux:/tmp/git-annex-test/a$ echo "changes once more" >> file.txt+unison@atom-linux:/tmp/git-annex-test/a$ git annex add .+add file.txt ok+(recording state in git...)+unison@atom-linux:/tmp/git-annex-test/a$ git commit -m "1 more"+[master 099a2c7] 1 more+ 1 file changed, 1 insertion(+), 1 deletion(-)+ +unison@atom-linux:/tmp/git-annex-test/a$ git annex unused+unused . (checking for unused data...) (checking b/master...) (checking master...)+ Some annexed data is no longer used by any files:+ NUMBER KEY+ 1 SHA256E-s29--6aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt+ 2 SHA256E-s57--dc131ed3874c3b51a6801c43f5d5c0706a9aea58134459eeddf3436626adc89f.txt+ (To see where data was previously used, try: git log --stat -S'KEY')++ To remove unwanted data: git-annex dropunused NUMBER++ok++## switch to repository maintenance user and list unused:+## -------------------------------------- userswitch++stefan@atom-linux:/tmp/git-annex-test/a$ git annex unused --debug+unused . (checking for unused data...) [2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","ls-files","--cached","--others","-z","+--","."]+[2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","symbolic-ref","-q","HEAD"]+[2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","show-ref","--hash","refs/heads/master"]+[2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","show-ref"]+(checking b/master...) [2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","show-ref","--head"]+[2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","show-ref","--head"]+[2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","diff-index","-z","--raw","--no-renames","-l0","refs/remotes/b/master","--"]+[2015-11-01 17:35:09 CET] chat: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","cat-file","--batch"]+(checking master...) [2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","show-ref","--head"]+[2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","show-ref","--head"]+[2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","diff-index","-z","--raw","--no-renames","-l0","refs/heads/master","--"]++ Some annexed data is no longer used by any files:+ NUMBER KEY+ 1 SHA256E-s29--6aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt+ 2 SHA256E-s57--dc131ed3874c3b51a6801c43f5d5c0706a9aea58134459eeddf3436626adc89f.txt+ (To see where data was previously used, try: git log --stat -S'KEY')++ To remove unwanted data: git-annex dropunused NUMBER+++git-annex: .git/annex/unused: openFile: permission denied (Permission denied)+failed+git-annex: unused: 1 failed+++stefan@atom-linux:/tmp/git-annex-test/a$ git annex move --unused --to b+git-annex: .git/annex/unused: openFile: permission denied (Permission denied)+stefan@atom-linux:/tmp/git-annex-test/a$ git annex move --debug --unused --to b+[2015-11-01 17:38:48 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","show-ref","git-annex"]+[2015-11-01 17:38:48 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","show-ref","--hash","refs/heads/git-annex"]+[2015-11-01 17:38:48 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","log","refs/heads/git-annex..4cdcc1b4550b2737e018d382022f3ce3e1dcb029","-n1","+--pretty=%H"]+[2015-11-01 17:38:48 CET] chat: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","cat-file","--batch"]+git-annex: .git/annex/unused: openFile: permission denied (Permission denied)++# End of transcript or log.+"""]]+
+ doc/bugs/Files_in___34__here__34___not_known_to_git_annex.mdwn view
@@ -0,0 +1,50 @@+### Please describe the problem.++Not sure how I created this mess. But here, I have my git annex repository:++ $ cat .git/config + [annex]+ uuid = 206e9fb3-0c68-4c45-a3d7-dad1d9425d28+ version = 5++And judging from this, I would expect the file to be present:++ $ git annex log Movies/Bad\ Taste\ -\ Englisch.avi + - 2015-10-28 20:51:42 Movies/Bad Taste - Englisch.avi | f53b3f8a-0f04-11e1-93ae-136c6986c818 -- jeff-media [kent]+ + 2014-10-13 00:12:50 Movies/Bad Taste - Englisch.avi | 206e9fb3-0c68-4c45-a3d7-dad1d9425d28 -- 1T+ + 2011-12-24 13:38:23 Movies/Bad Taste - Englisch.avi | 9dd8c662-296d-11e1-b28a-f3c66fd5e263 -- 500G+ - 2011-12-18 14:59:38 Movies/Bad Taste - Englisch.avi | 9dd8c662-296d-11e1-b28a-f3c66fd5e263 -- 500G+ + 2011-12-18 12:48:17 Movies/Bad Taste - Englisch.avi | 9dd8c662-296d-11e1-b28a-f3c66fd5e263 -- 500G+ + 2011-11-14 22:15:57 Movies/Bad Taste - Englisch.avi | f53b3f8a-0f04-11e1-93ae-136c6986c818 -- jeff-media [kent]+ $ ls -l Movies/Bad\ Taste\ -\ Englisch.avi+ lrwxrwxrwx 1 jojo jojo 135 Okt 7 2014 Movies/Bad Taste - Englisch.avi -> ../.git/annex/objects/Wx/P0/WORM-s723351552-m1100368371--Bad Taste - Englisch.avi/WORM-s723351552-m1100368371--Bad Taste - Englisch.avi+ $ ls -shL Movies/Bad\ Taste\ -\ Englisch.avi+ 690M Movies/Bad Taste - Englisch.avi++But git annex seems to be very confused:++ $ git annex whereis Movies/Bad\ Taste\ -\ Englisch.avi + whereis Movies/Bad Taste - Englisch.avi (0 copies) failed+ git-annex: whereis: 1 failed+ $ git annex list Movies/Bad\ Taste\ -\ Englisch.avi + here+ |kent-direct+ ||kent+ |||web+ ||||bittorrent+ |||||+ _____ Movies/Bad Taste - Englisch.avi+ $ git annex fsck Movies/Bad\ Taste\ -\ Englisch.avi + fsck Movies/Bad Taste - Englisch.avi (fixing location log) + ** No known copies exist of Movies/Bad Taste - Englisch.avi+ failed+ (recording state in git...)+ git-annex: fsck: 1 failed++The `fsck` call does not change anything about the problem.++File system is ext4.++### What version of git-annex are you using? On what operating system?++git-annex version: 5.20151019-1, Debian unstable.
doc/bugs/Support_non-default_storage_classes_with_Google_Cloud_Storage.mdwn view
@@ -90,3 +90,5 @@ [2015-05-31 17:38:22 EDT] Response metadata: S3: request ID=<none>, x-amz-id-2=<none> git-annex: S3Error {s3StatusCode = Status {statusCode = 400, statusMessage = "Bad Request"}, s3ErrorCode = "InvalidArgument", s3ErrorMessage = "Invalid argument.", s3ErrorResource = Nothing, s3ErrorHostId = Nothing, s3ErrorAccessKeyId = Nothing, s3ErrorStringToSign = Nothing} """]]++> [[done]], see comments --[[Joey]]
+ doc/bugs/git_annex_assistant_cannot_run_rsync___40__windows__41__.mdwn view
@@ -0,0 +1,22 @@+### Please describe the problem.++When the assistant decides to sync the content of a file, it launches rsync. Windows shows an Application Error popup which says this:++ The application was unable to start correctly (0xc000007b).++Presumably it's crashing. ++### What version of git-annex are you using? On what operating system?++ git-annex version: 5.20151019-gcc50c00+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV DNS Feeds Quvi TDFA TorrentParser Database+ key/value backends: SHA256E SHA256 SHA512E SHA512 SHA224E SHA224 SHA384E SHA384 SHA3_256E SHA3_256 SHA3_512E SHA3_512 SHA3_224E SHA3_224 SHA3_384E SHA3_384 SKEIN256E SKEIN256 SKEIN512E SKEIN512 SHA1E SHA1 MD5E MD5 WORM URL+ remote types: git gcrypt S3 bup directory rsync web bittorrent webdav tahoe glacier ddar hook external++### Have you had any luck using git-annex before? (Sometimes we get tired of reading bug reports all day and a lil' positive end note does wonders)++Not on windows so far :)++> The page doesn't suggest getting the 32 bit version, it just says to get+> it. Implication should be that's the version that works. I've noted that+> this is an important requirement now. [[done]] --[[Joey]]
doc/design/assistant/polls/Android_default_directory.mdwn view
@@ -4,4 +4,4 @@ want the first time they run it, but to save typing on android, anything that gets enough votes will be included in a list of choices as well. -[[!poll open=yes expandable=yes 72 "/sdcard/annex" 6 "Whole /sdcard" 7 "DCIM directory (photos and videos only)" 2 "Same as for regular git-annex. ~/annex/"]]+[[!poll open=yes expandable=yes 73 "/sdcard/annex" 6 "Whole /sdcard" 7 "DCIM directory (photos and videos only)" 2 "Same as for regular git-annex. ~/annex/"]]
+ doc/devblog/day_328__git-annex_is_five.mdwn view
@@ -0,0 +1,15 @@+The first release of git-annex was 5 years ago.++There have been a total of 187 releases, growing to 50k lines of haskell+code developed by 28 contributors (and another 10 or so external special+remote contributors). Approximately 2000 people have posted questions,+answers, bugs, todos, etc to this website, with 18900 posts in total.++I've been funded for 3 of the 5 years to work on git-annex, with support+from [[1451 individuals and 6 organizations|thanks]].++Released a new version today with rather more significant changes than usual+(see recent devblog entries).++The [2015 git-annex user survey](http://git-annex-survey.branchable.com/polls/2015/)+is now live.
+ doc/devblog/day__329-330__a_rising_tide.mdwn view
@@ -0,0 +1,15 @@+Things have been relatively quiet on git-annex this week. I've been+distracted with other projects. But, a library that I developed for+[propellor](http://propellor.branchable.com/) to help with +[concurrent console output](http://joeyh.name/blog/entry/concurrent_output_library/)+has been rapidly developing into a kind of+[tiling region manager for the console](http://joeyh.name/blog/entry/a_tiling_region_manager_for_the_console),+which may be just the thing git-annex needs on the concurrent+download progress display front.++After seeing it could go that way, and working on it around the clock to+add features git-annex will need, here's a teaser of its abilities.++<img src="https://joeyh.name/code/concurrent-output/aptdemo.gif">++Probably coming soonish to a `git-annex -J` near you!
+ doc/forum/Getting_metadata.mdwn view
@@ -0,0 +1,30 @@+Hi!++what's wrong here with getting metadata back:++ # setup+ $ git init .+ $ git annex init+ init ok+ (Recording state in git...)+ $ touch testfile+ $ git add testfile + $ git commit -m "imp"+ [master (Basis-Commit) 55c385e] imp+ 1 file changed, 0 insertions(+), 0 deletions(-)+ create mode 100644 testfile++ # set metadata+ $ git annex metadata testfile --set key=val++ # retrieval doesn't work+ $ git annex metadata testfile --get key+ $ git annex metadata testfile+ $ ++What I would expect here is to get "val" back.++What am I doing wrong?+++Thanks!
doc/git-annex-assistant.mdwn view
@@ -25,6 +25,8 @@ Wait N seconds before running the startup scan. This process can be expensive and you may not want to run it immediately upon login. + When --autostart is used, defaults to --startdelay=5.+ * `--foreground` Avoid forking to the background.
doc/git-annex-enableremote.mdwn view
@@ -4,7 +4,7 @@ # SYNOPSIS -git annex enableremote `name [param=value ...]`+git annex enableremote `name|uuid|desc [param=value ...]` # DESCRIPTION @@ -15,7 +15,8 @@ The name of the remote is the same name used when originally creating that remote with `git annex initremote`. Run `git annex enableremote` without any name to get a list of-special remote names.+special remote names. Or you can specify the uuid or description of the+remote. Some special remotes may need parameters to be specified every time they are enabled. For example, the directory special remote requires a directory=
doc/install/Windows.mdwn view
@@ -1,7 +1,7 @@ git-annex now does Windows! * First, [install git for Windows](http://git-scm.com/downloads) - Get the 32 bit version not the 64 bit version. + Important: **Get the 32 bit version not the 64 bit version.** (Note that msysgit is no longer supported.) * Then, [install git-annex](https://downloads.kitenet.net/git-annex/windows/current/)
+ doc/news/2015_git-annex_user_survey.mdwn view
@@ -0,0 +1,5 @@+Similar to the yearly git user survey, there is a+[2015 git-annex user survey](http://git-annex-survey.branchable.com/polls/2015/).++If you use git-annex,+please take a few minutes to answer the questions!
− doc/news/version_5.20150916.mdwn
@@ -1,32 +0,0 @@-git-annex 5.20150916 released with [[!toggle text="these changes"]]-[[!toggleable text="""- * Fix Windows build to work with ghc 7.10.- * init: Fix reversion in detection of repo made with git clone --shared- * info: Support querying info of individual files in direct mode.- * unused: Fix reversion in 5.20150727 that broke parsing of the- --unused-refspec option. Thanks, Øyvind A. Holm.- * Make full option parsing be done when not in a git repo, so --help- can be displayed for commands that require a git repo, etc.- * fsck: Work around bug in persistent that broke display of- problematically encoded filenames on stderr when using --incremental.- * When gpg.program is configured, it's used to get the command to run- for gpg. Useful on systems that have only a gpg2 command or want to- use it instead of the gpg command.- * Windows: Switched to using git for Windows, rather than msysgit.- Using msysgit with git-annex is no longer supported.- * Windows: Even when the user neglects to tell the git installer to- add git to PATH, git-annex will still work from within the git bash- shell, and the webapp can be used too.- * sync: Add --no-commit, --no-pull, --no-push options to turn off parts of- the sync process, as well as supporting --commit, --pull, --push, and- --no-content options to specify the (current) default behavior.- * annex.hardlink extended to also try to use hard links when copying from- the repository to a remote.- * Improve bash completion, so it completes names of remotes and backends- in appropriate places.- * Special remotes configured with autoenable=true will be automatically- enabled when git-annex init is run.- * Fix bug in combination of preferred and required content settings.- When one was set to the empty string and the other set to some expression,- this bug caused all files to be wanted, instead of only files matching- the expression."""]]
doc/news/version_5.20151019.mdwn view
@@ -49,5 +49,5 @@ and stop recommending bittornado | bittorrent. * Debian: Remove build dependency on transformers library, as it is now included in ghc.- * Debian: Remote menu file, since a desktop file is provided and+ * Debian: Remove menu file, since a desktop file is provided and lintian says there can be only one."""]]
+ doc/news/version_5.20151102.mdwn view
@@ -0,0 +1,14 @@+git-annex 5.20151102 released with [[!toggle text="these changes"]]+[[!toggleable text="""+ * Use statvfs on OSX.+ * Symlink timestamp preservation code uses functions+ from unix-2.7.0 when available, which should be more portable.+ * enableremote: List uuids and descriptions of remotes that can be+ enabled, and accept either the uuid or the description in leu if the+ name.+ * Catch up with current git behavior when both repo and repo.git exist;+ it seems it now prefers repo in this case, although historically it may+ have preferred repo.git.+ * Fix failure to build with aws-0.13.0.+ * When built with aws-0.13.0, the S3 special remote can be used to create+ google nearline buckets, by setting storageclass=NEARLINE."""]]
doc/polls.mdwn view
@@ -1,2 +1,3 @@+* [[2015 git-annex user survey|2015]] * [[2013 git-annex user survey|2013]] * [[old polls|design/assistant/polls]]
doc/special_remotes/S3.mdwn view
@@ -43,9 +43,14 @@ When using Amazon S3, if you have configured git-annex to preserve multiple [[copies]], consider setting this to "REDUCED_REDUNDANCY"- to save money. Or, if the remote will be used for backup or archival,+ to save money. + + Or, if the remote will be used for backup or archival, and so its files are Infrequently Accessed, "STANDARD_IA" is also a- good choice to save money.+ good choice to save money. (Requires a git-annex built with aws-0.13.0)++ When using Google Cloud Storage, to make a nearline bucket, set this to+ "NEARLINE". (Requires a git-annex built with aws-0.13.0) Note that changing the storage class of an existing S3 remote will affect new objects sent to the remote, but not objects already
+ doc/special_remotes/comment_25_d9f298f284d66fb0aff029eb01f1ce23._comment view
@@ -0,0 +1,90 @@+[[!comment format=mdwn+ username="craig@6ddb6e2c94325e18a0d631a06e63fdc111ab1f12"+ nickname="craig"+ subject="Replicating my key for encrypted special remotes"+ date="2015-10-25T19:00:56Z"+ content="""+Cool, thanks. I see the gpg key in remote.log in the git-annex branch, so it's saved, which is the thing I care about most. I'm now sure I could recover my data in a DR scenario. However, I seem to be missing something with enableremote and how this is all supposed to work.++My main repo is ~/local/pics and here's the result of git annex info glacier:++ 11:45:24 [24623]; git annex info glacier+ remote: glacier+ description: glacier backup [glacier]+ uuid: e34c5f10-2a97-4477-a248-b96e050557dc+ trust: semitrusted+ cost: 1050.0+ type: glacier+ creds: stored locally+ glacier vault: ...snip...+ encryption: encrypted (encryption key stored in git repository)+ chunking: none+ remote annex keys: 27519+ remote annex size: 47.95 gigabytes++I used git annex assistant to create a manual mode remote on my usb key. This created a annex-pics directory on the usb key with a bare repo.++ 11:50:50 [24626]; pwd+ /media/craig/KINGSTON/annex-pics+ 11:50:51 [24627]; ls+ annex branches config description HEAD hooks info objects refs++I then did a git clone from the bare repo into a tmp dir:++ 11:52:48 [24670]; git clone /media/craig/KINGSTON/annex-pics annex-pics+ Cloning into 'annex-pics'...+ done.++But when I enable the glacier remote, which I'd have to do in a DR scenario, I get an error:++ 11:53:29 [24672]; git annex enableremote glacier+ (merging origin/git-annex into git-annex...)+ (recording state in git...)+ git-annex: Unknown special remote name.+ Known special remotes: gitannexpics++It knows about the remote, but hasn't assigned a name to it:++ 11:53:36 [24673]; git annex info glacier+ git-annex: glacier is not a directory or an annexed file or a remote or a uuid+ 11:53:49 [24674]; git annex info+ repository mode: indirect+ trusted repositories: 0+ semitrusted repositories: 7+ 00000000-0000-0000-0000-000000000001 -- web+ 00000000-0000-0000-0000-000000000002 -- bittorrent+ 082b6805-3264-4f1b-8e15-a5cd0cef3e7f -- craig@jester:~/local/pics+ 71132283-1a3b-47f8-a548-1d5fb2f645d4 -- craig@jester:~/tmp/annex-pics [here]+ a4598ad6-390c-40cf-a71d-edfe7511b20c -- craig@storage:~/local/pics+ d4ee044d-e0e0-4012-b6cd-353da37b9867 -- KINGSTON [origin]+ e34c5f10-2a97-4477-a248-b96e050557dc -- glacier backup+ untrusted repositories: 1+ 3796b34c-61af-4e45-a276-07097c1ac6f9 -- craig@desktop:~/local/pics+ transfers in progress: none+ available local disk space: 414.4 gigabytes (+1 megabyte reserved)+ local annex keys: 0+ local annex size: 0 bytes+ annexed files in working tree: 33204+ size of annexed files in working tree: 48.38 gigabytes (+ 148 unknown size)+ bloom filter size: 32 mebibytes (0% full)+ backend usage: + SHA1: 148+ SHA256E: 33056++Doing a git annex info on the uuid does something, but I'm not clear what it does:++ 11:53:56 [24675]; git annex info e34c5f10-2a97-4477-a248-b96e050557dc+ remote annex keys: 27519+ remote annex size: 47.95 gigabytes++An enable remote on the uuid doesn't work either:++ 11:57:33 [24678]; git annex enableremote e34c5f10-2a97-4477-a248-b96e050557dc+ git-annex: Unknown special remote name.+ Known special remotes: gitannexpics++I feel like I'm missing a step. What am I missing?++Thanks,+Craig+"""]]
+ doc/special_remotes/comment_26_606c1bee71a265f9df3a8cf50fce9a21._comment view
@@ -0,0 +1,20 @@+[[!comment format=mdwn+ username="joey"+ subject="""comment 26"""+ date="2015-10-26T17:36:26Z"+ content="""+@craig, this can be slightly confusing, since `git-annex enableremote`+uses the same name that you used when creating the remote in the first+place, with `git-annex initremote`... which might be different than+the name used for that remote in some repository or other, and from+the description shown in `git annex into`.++Since every remote listed by `git annex info` is apparently a regular git+repo, not a special remote, with the exception of the glacier one, process+of deduction suggests that the "gitannexpics" special remote is the same as+the glacier one.++I've made some changes now, so `git annex enableremote` will list the+uuid and description, along with the name used by enableremote, and+will accept any one of those things to specify which remote to enable.+"""]]
doc/thanks.mdwn view
@@ -380,3 +380,5 @@ * The Hodges, for providing such a congenial place for me to live and work on these first world problems, while you're off helping people in the third world.+* And Mom, for stamping and stuffing so many thank you envelopes, and all the+ rhubarb pies.
doc/todo/Amazon_Cloud_Drive.mdwn view
@@ -4,7 +4,7 @@ http://techcrunch.com/2015/03/26/amazon-goes-after-dropbox-google-microsoft-with-unlimited-cloud-drive-storage/ --- bence+-- bence aka [[parhuzamos]] > Not yet, but I just need to investigate haskell api bindings for it, I > suppose. --[[Joey]]
doc/todo/Bittorrent-like_features.mdwn view
@@ -39,6 +39,9 @@ * [syncthing](https://syncthing.net/) looks like a btsync replacement, and could also be interesting, see the [[todo/syncthing_special_remote]] discussion * [gittorrent](http://blog.printf.net/articles/2015/05/29/announcing-gittorrent-a-decentralized-github/) allows for decentralised sharing of the git objects, which could replace pairing between repositories, except it [doesn't support push yet](https://github.com/cjb/GitTorrent/issues/3) * [gitocalypse](https://github.com/SeekingFor/gitocalypse) is similar to gittorrent, except it uses Freenet and HG (Mercurial?!) instead of the bittorrent DHT+ * [tox](https://tox.chat/) - DHT-enabled chat, file transfer and messaging platform, [no stable release](https://github.com/irungentoo/toxcore/issues/1353), [security concerns](http://lists.alioth.debian.org/pipermail/pkg-privacy-maintainers/Week-of-Mon-20150928/000046.html)+ * [ricochet](https://ricochet.im/) - similar, but relies on Tor, unclear if it supports file transfers, packaged in Debian+ * [pond](https://pond.imperialviolet.org/) - similar to ricochet joeyh's approach for now is to [[wait and see what will emerge|devblog/day_219__catching_up_and_looking_back/]], but of course people are welcome to implement their own [[special_remotes]] to fix this problem!
+ doc/todo/show_me_where_unused_file_was__44___i_can_wait.mdwn view
@@ -0,0 +1,7 @@+i know that `git annex unused` would be slower if, instead of just showing the hash, it would also show the pathname where the file was. it does tell me that i can use `git log --stat -SKEY` to find that out myself, but then i would need to make some silly shell script to loop over multiple files. i'm hoping that git-annex has more efficient and clever ways of doing that, and even if it's slower, i'd be ready to wait if there was an extra flag to show me where it was...++i have used this oneliner so far, but it's ugly and painful, especially since `git annex unused` doesn't have a very parseable output format...++ git annex unused 2>&1 | grep '^ *[0-9][0-9]*' | sed 's/^ *[0-9][0-9]* *//' | xargs -I'{}' git log --oneline --stat -S'{}' -1++any way to do this more easily? --[[anarcat]]
+ doc/todo/xmpp_removal/comment_2_1c92cde199612bbd765c818e7b64f944._comment view
@@ -0,0 +1,46 @@+[[!comment format=mdwn+ username="Gastlag"+ subject="Is xmpp the problem ?"+ date="2015-10-30T10:42:06Z"+ content="""+Hello, ++I was wondering why assistant \"is increasingly rarely used\" ?+if you look the different item of the survey http://git-annex-survey.branchable.com/polls/2015/, yes 53% of people said \"I use the assistant, but without XMPP\"++And \"missing ports\" :++ - \"I'm good -- git-annex runs on my OSes of choice! (43%)\"+ - \"Windows (13%)\"+ - Android (6%)++But if you look other anwsers you see++ - \"using with\" :+ - by myself (59%)+ - by myself so far but I hope to get others using my repository (28%)++And :++ - \"Pick the operating system which you use git-annex on the most.\" :+ - \"Linux (78%)\"+ - \"OSX (13%)\"+++Further more \"blocking problems\" :++ - too hard to install (4%)+ - too hard to use (7%)+ - not good enough documentation (16%)+ - The only use for the assistant would be in combination with a good, native, fully automagic Android version which includes some sort of native UI (16%)+ - I use the command line, and **find it difficult to show others** how to use the git-annex assistant (12%)+ - The lack of selective file sync (ie, git annex get and git annex drop) is what prevents me from using the Assistant (5%)++And \"focus\" : ++ - make it easier for nontechnical users (25%) ++I think remove xmpp is a bad idea because as you say it's enable \"Friend discovery and easy sharing of git repo to friends.\" and there is already a lot of people who use xmpp and XMPP address are user friendly because close to email adress. And the main problem seems to be that git-annex assistant still too hard to use and not usable on the platform where users are : windows.++The main problem is that git-annex is still not ready for users. It have too reach other people than \"hardcore linux users\" to be a social tool and remove xmpp may not be the good solution.+"""]]
+ doc/todo/xmpp_removal/comment_3_661be364029ce45db7d6a111b9d65ee7._comment view
@@ -0,0 +1,13 @@+[[!comment format=mdwn+ username="https://id.koumbit.net/anarcat"+ subject="re tox"+ date="2015-10-30T15:37:09Z"+ content="""+i am not sure the proper replacement for XMPP is tox. First off, Debian privacy folks have [expressed concerns about the actual security of Tox](http://lists.alioth.debian.org/pipermail/pkg-privacy-maintainers/Week-of-Mon-20150928/000046.html), which is not a big requirement here, but nevertheless is a question worth adressing. [Pond](https://pond.imperialviolet.org/) and [Ricochet](http://ricochet.im/) are interesting alternatives that are being packaged in Debian (the latter which just entered unstable).++Furthermore, it seems that XMPP is really a \"patch\", a workaround for NAT issues and, in general, how to share git-annex repositories with users in arbitrary locations. This problem space is more similar to [[todo/Bittorrent-like_features/#index1h1]] than XMPP. Using tox libraries may enable git-annex to share git metadata around, but would it allow git-annex to download actual files from other users through tox? How stable is tox? Last I checked, [tox core don't actually want to make any releases](https://github.com/irungentoo/toxcore/issues/1353), which makes it a much less attractive option because the API can change all the time...++I have nevertheless added the three tools to [[todo/Bittorrent-like_features/]].++Anyways, it seems that XMPP is rarely used and could be removed if it makes maintenance easier: i have never found a good use case for it, personnally: you can usually find a space for a private git repo fairly easily... the problem is sharing the big files! --[[anarcat]]+"""]]
+ doc/users/parhuzamos.mdwn view
@@ -0,0 +1,8 @@+My life with git-annex++Todos: ++- publish git-annex scripts++[[!inline pages="todo/* and !todo/done and !link(todo/done) and+link(users/parhuzamos)" sort=mtime feeds=no actions=yes archive=yes show=0]]
git-annex.cabal view
@@ -1,5 +1,5 @@ Name: git-annex-Version: 5.20151019+Version: 5.20151102 Cabal-Version: >= 1.8 License: GPL-3 Maintainer: Joey Hess <id@joeyh.name>
man/git-annex-assistant.1 view
@@ -21,6 +21,8 @@ Wait N seconds before running the startup scan. This process can be expensive and you may not want to run it immediately upon login. .IP+When \-\-autostart is used, defaults to \-\-startdelay=5.+.IP .IP "\fB\-\-foreground\fP" Avoid forking to the background. .IP
man/git-annex-enableremote.1 view
@@ -3,7 +3,7 @@ git-annex-enableremote \- enables use of an existing special remote .PP .SH SYNOPSIS-git annex enableremote \fBname [param=value ...]\fP+git annex enableremote \fBname|uuid|desc [param=value ...]\fP .PP .SH DESCRIPTION Enables use of an existing special remote in the current repository,@@ -13,7 +13,8 @@ The name of the remote is the same name used when originally creating that remote with \fBgit annex initremote\fP. Run \fBgit annex enableremote\fP without any name to get a list of-special remote names.+special remote names. Or you can specify the uuid or description of the+remote. .PP Some special remotes may need parameters to be specified every time they are enabled. For example, the directory special remote requires a directory=