From 70a599c4b0197042acd80f33c0e4675653112173 Mon Sep 17 00:00:00 2001 From: Miezhiko Date: Tue, 10 Mar 2026 16:14:32 +0400 Subject: [PATCH] hackage status: --updates option to show atoms that present both in overlay and hackage Signed-off-by: Miezhiko --- exe/Main.hs | 3 +++ src/Status.hs | 9 ++++++++- src/Status/Types.hs | 1 + 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/exe/Main.hs b/exe/Main.hs index 96dc93d0..308d16a3 100644 --- a/exe/Main.hs +++ b/exe/Main.hs @@ -237,6 +237,9 @@ statusParser = Opt.info parser infoMod , Opt.flag' HackageToOverlay $ Opt.long "from-hackage" <> Opt.help "Print only packages likely to be interesting to move from hackage tree." + , Opt.flag' OverlayAndHackage + $ Opt.long "updates" + <> Opt.help "Print only packages that present in both overlay and tree (overlay)." , pure PortagePlusOverlay ] diff --git a/src/Status.hs b/src/Status.hs index 1a9ed537..fb5ba695 100644 --- a/src/Status.hs +++ b/src/Status.hs @@ -1,4 +1,3 @@ - -- TODO: Rearrange things so we don't have to disable this warning {-# OPTIONS_GHC -Wno-incomplete-uni-patterns #-} @@ -122,6 +121,7 @@ runStatus repoContext = OverlayToPortage -> toPortageFilter PortagePlusOverlay -> id HackageToOverlay -> fromHackageFilter + OverlayAndHackage -> overlayAndHackageFilter pkgs' <- forM pkgs $ \p -> case simpleParsec p of Nothing -> die ("Could not parse package name: " ++ p ++ ". Format cat/pkg") @@ -155,6 +155,13 @@ toPortageFilter = Map.mapMaybe $ \ sts -> then Just sts else Nothing +-- |Only return packages that exist in both the overlay and on hackage +overlayAndHackageFilter :: Map PackageName [FileStatus ExistingEbuild] -> Map PackageName [FileStatus ExistingEbuild] +overlayAndHackageFilter = Map.filter $ \sts -> + let hasOverlay = any (\st -> case st of { OverlayOnly _ -> True; Same _ -> True; Differs _ _ -> True; _ -> False }) sts + hasHackage = any (\st -> case st of { HackageOnly _ -> True; _ -> False }) sts + in hasOverlay && hasHackage + -- |Only return packages that exist in overlay or portage but look outdated fromHackageFilter :: Map PackageName [FileStatus ExistingEbuild] -> Map PackageName [FileStatus ExistingEbuild] fromHackageFilter = Map.mapMaybe $ \ sts -> diff --git a/src/Status/Types.hs b/src/Status/Types.hs index e10c6cc5..22825447 100644 --- a/src/Status/Types.hs +++ b/src/Status/Types.hs @@ -10,6 +10,7 @@ data StatusDirection = PortagePlusOverlay | OverlayToPortage | HackageToOverlay + | OverlayAndHackage deriving Eq data FileStatus a