From 0080bed0bc6ee4f2f0714c214bee42131f023f11 Mon Sep 17 00:00:00 2001
From: Andreas Klebinger <klebinger.andreas@gmx.at>
Date: Thu, 3 Oct 2024 14:50:46 +0200
Subject: [PATCH] Adjust progress message for hadrian to include cwd.

Fixes #25335
---
 hadrian/hadrian.cabal   |  1 +
 hadrian/src/Main.hs     |  3 ++-
 hadrian/src/Progress.hs | 14 ++++++++++++++
 3 files changed, 17 insertions(+), 1 deletion(-)
 create mode 100644 hadrian/src/Progress.hs

diff --git a/hadrian/hadrian.cabal b/hadrian/hadrian.cabal
index e6d168cfe0d6..496ced64234f 100644
--- a/hadrian/hadrian.cabal
+++ b/hadrian/hadrian.cabal
@@ -74,6 +74,7 @@ executable hadrian
                        , Oracles.ModuleFiles
                        , Oracles.TestSettings
                        , Packages
+                       , Progress
                        , Rules
                        , Rules.BinaryDist
                        , Rules.CabalReinstall
diff --git a/hadrian/src/Main.hs b/hadrian/src/Main.hs
index f2eeb8f0b710..51f1600f9bba 100644
--- a/hadrian/src/Main.hs
+++ b/hadrian/src/Main.hs
@@ -27,6 +27,7 @@ import qualified Rules.Selftest
 import qualified Rules.SourceDist
 import qualified Rules.Test
 import qualified UserSettings
+import qualified Progress
 
 main :: IO ()
 main = do
@@ -56,7 +57,7 @@ main = do
         options = shakeOptions
             { shakeChange   = ChangeModtimeAndDigest
             , shakeFiles    = buildRoot -/- Base.shakeFilesDir
-            , shakeProgress = progressSimple
+            , shakeProgress = Progress.hadrianProgress (cwd -/- "hadrian > " <> buildRoot <> ":")
             , shakeRebuild  = rebuild
             , shakeTimings  = False
             , shakeColor    = shakeColor
diff --git a/hadrian/src/Progress.hs b/hadrian/src/Progress.hs
new file mode 100644
index 000000000000..39cf3a2adb7d
--- /dev/null
+++ b/hadrian/src/Progress.hs
@@ -0,0 +1,14 @@
+module Progress (hadrianProgress) where
+
+import Development.Shake
+
+-- | A simple method for displaying progress messages, suitable for using as 'Development.Shake.shakeProgress'.
+--   This is the shakeProgress function hadrian uses. It writes the current progress to the titlebar every five seconds
+--   using 'progressTitlebar', and calls any @shake-progress@ program on the @$PATH@ using 'progressProgram'.
+--
+-- Unlike the default shake progress bar it includes a prefix for the status bar.
+hadrianProgress :: String -> IO Progress -> IO ()
+hadrianProgress prefix p = do
+    program <- progressProgram
+    progressDisplay 5 (\status -> let s = prefix <> status in progressTitlebar s >> program s) p
+
-- 
GitLab