drop incomplete bare repo support
Added a bug about it. Now git annex move --from works fully
This commit is contained in:
parent
1aa19422ac
commit
8beed17168
3 changed files with 34 additions and 28 deletions
14
Locations.hs
14
Locations.hs
|
@ -28,22 +28,22 @@ gitStateDir repo = (Git.workTree repo) ++ "/" ++ stateLoc
|
|||
- <backend:fragment>
|
||||
-
|
||||
- That allows deriving the key and backend by looking at the symlink to it.
|
||||
-
|
||||
- Note that even if the repo is a bare repo, the annex is put in a .git
|
||||
- sub
|
||||
-}
|
||||
annexLocation :: Git.Repo -> Key -> FilePath
|
||||
annexLocation r key =
|
||||
(Git.workTree r) ++ "/" ++ (annexLocationRelative r key)
|
||||
|
||||
{- Annexed file's location relative to git's working tree. -}
|
||||
{- Annexed file's location relative to git's working tree.
|
||||
-
|
||||
- Note: Assumes repo is NOT bare.-}
|
||||
annexLocationRelative :: Git.Repo -> Key -> FilePath
|
||||
annexLocationRelative r key = Git.dir r ++ "/annex/" ++ (keyFile key)
|
||||
annexLocationRelative r key = ".git/annex/" ++ (keyFile key)
|
||||
|
||||
{- .git-annex/tmp is used for temp files
|
||||
-}
|
||||
-
|
||||
- Note: Assumes repo is NOT bare. -}
|
||||
annexTmpLocation :: Git.Repo -> FilePath
|
||||
annexTmpLocation r = (Git.workTree r) ++ "/" ++ Git.dir r ++ "/annex/tmp/"
|
||||
annexTmpLocation r = (Git.workTree r) ++ ".git/annex/tmp/"
|
||||
|
||||
{- Converts a key into a filename fragment.
|
||||
-
|
||||
|
|
34
Remotes.hs
34
Remotes.hs
|
@ -188,27 +188,19 @@ tryGitConfigRead r = do
|
|||
{- Tries to copy a key's content from a remote to a file. -}
|
||||
copyFromRemote :: Git.Repo -> Key -> FilePath -> Annex Bool
|
||||
copyFromRemote r key file = do
|
||||
-- annexLocation needs the git config to have been read for a remote,
|
||||
-- so do that now if it hasn't been already
|
||||
result <- tryGitConfigRead r
|
||||
case (result) of
|
||||
Left err -> return False
|
||||
Right from -> copy from
|
||||
Core.showNote $ "copying from " ++ (Git.repoDescribe r) ++ "..."
|
||||
if (not $ Git.repoIsUrl r)
|
||||
then getlocal
|
||||
else if (Git.repoIsSsh r)
|
||||
then getssh
|
||||
else error "copying from non-ssh repo not supported"
|
||||
where
|
||||
copy from = do
|
||||
Core.showNote $ "copying from " ++ (Git.repoDescribe from) ++ "..."
|
||||
if (not $ Git.repoIsUrl from)
|
||||
then getlocal
|
||||
else if (Git.repoIsSsh from)
|
||||
then getssh
|
||||
else error "copying from non-ssh repo not supported"
|
||||
where
|
||||
getlocal = liftIO $ boolSystem "cp" ["-a", location, file]
|
||||
getssh = do
|
||||
liftIO $ putStrLn "" -- make way for scp progress bar
|
||||
liftIO $ boolSystem "scp" [sshlocation, file]
|
||||
location = annexLocation from key
|
||||
sshlocation = (Git.urlHost from) ++ ":" ++ location
|
||||
getlocal = liftIO $ boolSystem "cp" ["-a", location, file]
|
||||
getssh = do
|
||||
liftIO $ putStrLn "" -- make way for scp progress bar
|
||||
liftIO $ boolSystem "scp" [sshlocation, file]
|
||||
location = annexLocation r key
|
||||
sshlocation = (Git.urlHost r) ++ ":" ++ location
|
||||
|
||||
{- Tries to copy a key's content to a remote. -}
|
||||
copyToRemote :: Git.Repo -> Key -> Annex Bool
|
||||
|
@ -255,7 +247,7 @@ updateRemoteLogStatus r key = do
|
|||
-- TODO: remote log locking
|
||||
let mergecmd = "cat >> " ++ (shellEscape $ logFile r key) ++ " && " ++
|
||||
"cd " ++ (shellEscape $ Git.workTree r) ++ " && " ++
|
||||
"git add " ++ (shellEscape $ gitStateDir r)
|
||||
"git add " ++ (shellEscape $ stateLoc)
|
||||
let shellcmd = if (not $ Git.repoIsUrl r)
|
||||
then pOpen WriteToPipe "sh" ["-c", mergecmd]
|
||||
else if (Git.repoIsSsh r)
|
||||
|
|
14
doc/bugs/bare_git_repos.mdwn
Normal file
14
doc/bugs/bare_git_repos.mdwn
Normal file
|
@ -0,0 +1,14 @@
|
|||
It would be nice if git-annex could be used in bare git repos.
|
||||
However, that is not currently supported. Problems include:
|
||||
|
||||
* git-annex often does not read a git repo's config before touching it,
|
||||
so it doesn't know if the repo is bare or not
|
||||
(reading the config when operating on ssh repos would be a pain and SLOW;
|
||||
I had some of that code in as of 1aa19422ac8748eeff219ac4f46df166dae783c5,
|
||||
but ripped it all out)
|
||||
* .. which results in creating `.git/annex` in a bare repo, which mightily
|
||||
confuses git (so it will complain that the bare repo is not
|
||||
a git repo at all!)
|
||||
* `.git-annex/` needs to have state recorded to it and committed, and that
|
||||
is not possible with a bare repo. (If [[todo/branching]] were done,
|
||||
that might be fixed.)
|
Loading…
Reference in a new issue