summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--debian/changelog8
-rw-r--r--doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_12_aea497eeecb077659db3f1dfb1e5f289._comment20
-rw-r--r--src/Propellor/DotDir.hs45
-rw-r--r--src/Propellor/Git.hs4
4 files changed, 67 insertions, 10 deletions
diff --git a/debian/changelog b/debian/changelog
index 3515497b..55ca5a93 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+propellor (5.3.3) UNRELEASED; urgency=medium
+
+ * 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.
+
+ -- Joey Hess <id@joeyh.name> Mon, 19 Feb 2018 12:44:24 -0400
+
propellor (5.3.2) unstable; urgency=medium
* Added Propellor.Property.Atomic, which can make a non-atomic property
diff --git a/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_12_aea497eeecb077659db3f1dfb1e5f289._comment b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_12_aea497eeecb077659db3f1dfb1e5f289._comment
new file mode 100644
index 00000000..90d0ba2c
--- /dev/null
+++ b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_12_aea497eeecb077659db3f1dfb1e5f289._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 12"""
+ date="2018-02-19T15:48:21Z"
+ content="""
+What propellor --init sets up, when you select the clone option
+and the Debian package is installed, is no remote
+defined, but a remotes/upsteam/master tracking branch.
+
+So not normally this:
+
+ upstream /usr/src/propellor/propellor.git (fetch)
+
+Aha! The very first revision of propellor --init
+*did* set up an upstream remote pointing at the distrepo. At some point
+that changed to the above described behavior. You're bitten by being an
+early adopter.
+
+I've adjusted the logic to handle that case.
+"""]]
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..")
diff --git a/src/Propellor/Git.hs b/src/Propellor/Git.hs
index 10b88ddd..c446f67a 100644
--- a/src/Propellor/Git.hs
+++ b/src/Propellor/Git.hs
@@ -30,6 +30,10 @@ hasRemote remotename = catchDefaultIO False $ do
rs <- lines <$> readProcess "git" ["remote"]
return $ remotename `elem` rs
+remoteUrl :: String -> IO (Maybe String)
+remoteUrl remotename = catchDefaultIO Nothing $ headMaybe . lines
+ <$> readProcess "git" ["config", "remote." ++ remotename ++ ".url"]
+
hasGitRepo :: IO Bool
hasGitRepo = doesFileExist ".git/HEAD"