setupUpstreamMaster :: String -> IO () setupUpstreamMaster newref = do changeWorkingDirectory =<< dotPropellor go =<< catchMaybeIO getoldrev where go Nothing = warnoutofdate False go (Just oldref) = do let tmprepo = ".git/propellordisttmp" let cleantmprepo = void $ catchMaybeIO $ removeDirectoryRecursive tmprepo cleantmprepo git ["clone", "--quiet", ".", tmprepo]
changeWorkingDirectory tmprepo git ["fetch", distrepo, "--quiet"] git ["reset", "--hard", oldref, "--quiet"] v <- gitVersion let mergeparams = [ "merge", newref , "-s", "recursive" , "-Xtheirs" , "--quiet" , "-m", "merging upstream version" ] ++ if v >= [2,9] then [ "--allow-unrelated-histories" ] else [] git mergeparams void $ fetchUpstreamBranch tmprepo cleantmprepo warnoutofdate True getoldrev = takeWhile (/= '\n') <$> readProcess "git" ["show-ref", upstreambranch, "--hash"] git = run "git" run cmd ps = unlessM (boolSystem cmd (map Param ps)) $ error $ "Failed to run " ++ cmd ++ " " ++ show ps Yes here