avoid using CopyFile

If .git/config symlinks are ever a thing, this will handle them better.

But mostly, this is to avoid git-repair needing to include CopyFile,
which would complicate it unduely.
This commit is contained in:
Joey Hess 2021-06-29 13:21:21 -04:00
parent 6b0d732746
commit 75d29de8d4
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38

View file

@ -42,7 +42,6 @@ import Utility.Directory.Create
import Utility.Tmp.Dir
import Utility.Rsync
import Utility.FileMode
import Utility.CopyFile
import qualified Utility.RawFilePath as R
import qualified Data.Set as S
@ -116,12 +115,10 @@ retrieveMissingObjects missing referencerepo r
| otherwise = withTmpDir "tmprepo" $ \tmpdir -> do
unlessM (boolSystem "git" [Param "init", File tmpdir]) $
error $ "failed to create temp repository in " ++ tmpdir
let repoconfig r' = fromRawFilePath (localGitDir r' P.</> "config")
tmpr <- Config.read =<< Construct.fromPath (toRawFilePath tmpdir)
let repoconfig r' = fromRawFilePath (localGitDir r' P.</> "config")
whenM (doesFileExist (repoconfig r)) $
void $ copyFileExternal CopyAllMetaData
(repoconfig r)
(repoconfig tmpr)
L.readFile (repoconfig r) >>= L.writeFile (repoconfig tmpr)
rs <- Construct.fromRemotes r
stillmissing <- pullremotes tmpr rs fetchrefstags missing
if S.null (knownMissing stillmissing)