summaryrefslogtreecommitdiff
path: root/src/Propellor/DotDir.hs
diff options
context:
space:
mode:
authorJoey Hess2018-02-19 12:46:16 -0400
committerJoey Hess2018-02-19 12:46:16 -0400
commit6f18e665ca8d960a77e437d8edec8f3d14169585 (patch)
treea9a27632955e6a49624565fa8f0d98f5b64872a1 /src/Propellor/DotDir.hs
parent98dad1f10e92424871f7356469f42481b40256a6 (diff)
Warn again about new upstream version when ~/.propellor was cloned from the Debian git bundle using an older version of propellor that set up an upstream remote.
This commit was sponsored by Jake Vosloo on Patreon.
Diffstat (limited to 'src/Propellor/DotDir.hs')
-rw-r--r--src/Propellor/DotDir.hs45
1 files changed, 35 insertions, 10 deletions
diff --git a/src/Propellor/DotDir.hs b/src/Propellor/DotDir.hs
index 17eb095a..39c111f6 100644
--- a/src/Propellor/DotDir.hs
+++ b/src/Propellor/DotDir.hs
@@ -387,16 +387,17 @@ checkRepoUpToDate = whenM (gitbundleavail <&&> dotpropellorpopulated) $ do
-- into the user's repository, as if fetching from a upstream remote,
-- yielding a new upstream/master branch.
--
--- If there's no upstream/master, the user is not using the distrepo,
--- so do nothing. And, if there's a remote named "upstream", the user
--- must have set that up and is not using the distrepo, so do nothing.
+-- If there's no upstream/master, or the repo is not using the distrepo,
+-- do nothing.
updateUpstreamMaster :: String -> IO ()
-updateUpstreamMaster newref = unlessM (hasRemote "upstream") $ do
+updateUpstreamMaster newref = do
changeWorkingDirectory =<< dotPropellor
- go =<< catchMaybeIO getoldrev
+ v <- getoldrev
+ case v of
+ Nothing -> return ()
+ Just oldref -> go oldref
where
- go Nothing = return ()
- go (Just oldref) = do
+ go oldref = do
let tmprepo = ".git/propellordisttmp"
let cleantmprepo = void $ catchMaybeIO $ removeDirectoryRecursive tmprepo
cleantmprepo
@@ -421,13 +422,37 @@ updateUpstreamMaster newref = unlessM (hasRemote "upstream") $ do
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
+ -- Get ref that the upstreambranch points to, only when
+ -- the distrepo is being used.
+ getoldrev = do
+ mrev <- catchMaybeIO $ takeWhile (/= '\n')
+ <$> readProcess "git" ["show-ref", upstreambranch, "--hash"]
+ print mrev
+ case mrev of
+ Just _ -> do
+ -- Normally there will be no upstream
+ -- remote when the distrepo is used.
+ -- Older versions of propellor set up
+ -- an upstream remote pointing at the
+ -- distrepo.
+ ifM (hasRemote "upstream")
+ ( do
+ v <- remoteUrl "upstream"
+ print ("remote url", v)
+ return $ case v of
+ Just rurl | rurl == distrepo -> mrev
+ _ -> Nothing
+ , return mrev
+ )
+ Nothing -> return mrev
+
+-- And, if there's a remote named "upstream"
+-- that does not point at the distrepo, the user must have set that up
+-- and is not using the distrepo, so do nothing.
warnoutofdate :: Bool -> IO ()
warnoutofdate havebranch = do
warningMessage ("** Your ~/.propellor/ is out of date..")