reorg
This commit is contained in:
parent
c812018cc5
commit
6e82584305
1 changed files with 8 additions and 13 deletions
|
@ -13,6 +13,7 @@ import Config
|
||||||
import Utility.Tmp
|
import Utility.Tmp
|
||||||
import Utility.Env
|
import Utility.Env
|
||||||
import Annex.Direct
|
import Annex.Direct
|
||||||
|
import qualified Annex
|
||||||
import qualified Git
|
import qualified Git
|
||||||
import qualified Git.Sha
|
import qualified Git.Sha
|
||||||
import qualified Git.Ref
|
import qualified Git.Ref
|
||||||
|
@ -44,29 +45,21 @@ start (c:ps) = liftIO . exitWith =<< ifM isDirect
|
||||||
<$> (inRepo . maybe Git.Ref.headSha Git.Ref.sha
|
<$> (inRepo . maybe Git.Ref.headSha Git.Ref.sha
|
||||||
=<< inRepo Git.Branch.currentUnsafe)
|
=<< inRepo Git.Branch.currentUnsafe)
|
||||||
|
|
||||||
setuptmpworktree tmp
|
|
||||||
exitcode <- proxy tmp
|
exitcode <- proxy tmp
|
||||||
|
|
||||||
cleanupproxy tmp oldref
|
cleanupproxy tmp oldref
|
||||||
|
|
||||||
return exitcode
|
return exitcode
|
||||||
|
|
||||||
proxy tmp = do
|
proxy tmp = do
|
||||||
usetmp <- liftIO $ Just . addEntry "GIT_WORK_TREE" tmp <$> getEnvironment
|
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 (isNothing <$> inRepo Git.Branch.current) $
|
||||||
unlessM (liftIO $ boolSystemEnv "git" [Param "checkout", Param "--", Param "."] usetmp) $
|
unlessM (liftIO $ boolSystemEnv "git" [Param "checkout", Param "--", Param "."] usetmp) $
|
||||||
error "Failed to set up proxy work tree."
|
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
|
top <- fromRepo Git.repoPath
|
||||||
(fs, cleanup) <- inRepo $ Git.LsFiles.notInRepo True [top]
|
(fs, cleanup) <- inRepo $ Git.LsFiles.notInRepo True [top]
|
||||||
forM_ fs $ \f -> do
|
forM_ fs $ \f -> do
|
||||||
|
@ -76,6 +69,8 @@ start (c:ps) = liftIO . exitWith =<< ifM isDirect
|
||||||
createDirectoryIfMissing True (takeDirectory tmpf)
|
createDirectoryIfMissing True (takeDirectory tmpf)
|
||||||
createLinkOrCopy f tmpf
|
createLinkOrCopy f tmpf
|
||||||
liftIO $ void cleanup
|
liftIO $ void cleanup
|
||||||
|
|
||||||
|
liftIO $ safeSystemEnv c (map Param ps) usetmp
|
||||||
|
|
||||||
-- To merge the changes made by the proxied command into
|
-- To merge the changes made by the proxied command into
|
||||||
-- the work tree is similar to cleaning up after a
|
-- the work tree is similar to cleaning up after a
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue