diff options
author | Joey Hess <joeyh@joeyh.name> | 2015-08-04 14:45:16 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2015-08-04 14:45:16 -0400 |
commit | 75e322339a4f302d22d7e736b199ab9f24cbdf17 (patch) | |
tree | 424994bca4d1f90c5be0bd773986f28fdbb2b326 /Command | |
parent | a9c156e7e70e6ec259a66e5d1f5a029ab9d17b3b (diff) |
reorg
Diffstat (limited to 'Command')
-rw-r--r-- | Command/Proxy.hs | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/Command/Proxy.hs b/Command/Proxy.hs index d38a94b46..98804ef67 100644 --- a/Command/Proxy.hs +++ b/Command/Proxy.hs @@ -13,6 +13,7 @@ import Config import Utility.Tmp import Utility.Env import Annex.Direct +import qualified Annex import qualified Git import qualified Git.Sha import qualified Git.Ref @@ -44,29 +45,21 @@ start (c:ps) = liftIO . exitWith =<< ifM isDirect <$> (inRepo . maybe Git.Ref.headSha Git.Ref.sha =<< inRepo Git.Branch.currentUnsafe) - setuptmpworktree tmp exitcode <- proxy tmp + cleanupproxy tmp oldref return exitcode proxy tmp = do usetmp <- liftIO $ Just . addEntry "GIT_WORK_TREE" tmp <$> getEnvironment + + -- Set up the tmp work tree, to contain both a checkout of all + -- staged files as well as hard links (or copies) of any + -- unstaged files. unlessM (isNothing <$> inRepo Git.Branch.current) $ unlessM (liftIO $ boolSystemEnv "git" [Param "checkout", Param "--", Param "."] usetmp) $ error "Failed to set up proxy work tree." - liftIO $ safeSystemEnv c (map Param ps) usetmp - - -- Commands like git revert will fail if there's a file - -- in the work tree, or index, that would be overwritten - -- by the revert. We want that to also happen when such a command - -- is proxied. - -- - -- It suffices to find any files in the real work tree that - -- are not in the index, and hard link (or copy) them - -- into the tmp work tree. This assumes that files that are in the - -- index don't need to appear in the tmp work tree. - setuptmpworktree tmp = do top <- fromRepo Git.repoPath (fs, cleanup) <- inRepo $ Git.LsFiles.notInRepo True [top] forM_ fs $ \f -> do @@ -76,6 +69,8 @@ start (c:ps) = liftIO . exitWith =<< ifM isDirect createDirectoryIfMissing True (takeDirectory tmpf) createLinkOrCopy f tmpf liftIO $ void cleanup + + liftIO $ safeSystemEnv c (map Param ps) usetmp -- To merge the changes made by the proxied command into -- the work tree is similar to cleaning up after a |