Skip to content

Commit bc194a3

Browse files
authored
Notify maintainers when dependency is out of range (#1168)
* Notify maintainers when dependency is out of range * Only send one mail to each maintainer per dependency update * Remove age/major-age based filtering, use CSS for hiding subconfiguration * Add preferences adjustment link to all notification links * Do not concatenate rev-dep emails with other e-mail types * Wait 0.25 seconds between emails * Early opt-ins didn't opt in to rev dep notification * Simpler option to detect only new incompatibilities * Fix NewIncompatibility filter being too lax Also adds a test which would fail before this commit. * Remove duplicate test This test is identical to the second of the assertEquals. * Test NotifyPref CSV roundtrip * Don't notify for releases that aren't the very newest
1 parent 70c2193 commit bc194a3

File tree

7 files changed

+459
-59
lines changed

7 files changed

+459
-59
lines changed

datafiles/templates/UserNotify/user-notify-form.html.st

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,20 @@
33
<head>
44
$hackageCssTheme()$
55
<title>Set user notification preferences | Hackage</title>
6+
<style>
7+
td {
8+
vertical-align: top;
9+
}
10+
label {
11+
align-items: center;
12+
}
13+
.expandable {
14+
visibility: visible;
15+
}
16+
#notifyDependencyForMaintainedFalse:checked ~ .expandable {
17+
visibility: collapse;
18+
}
19+
</style>
620
</head>
721

822
<body>
@@ -45,6 +59,32 @@ $endif$
4559
<tr>
4660
<td><label>Notify on maintained package pending proposed tags:
4761
<td>$notifyPendingTags$
62+
63+
<tr>
64+
<td><label>Notify when a dependency is updated for any of my maintained packages:
65+
<td>
66+
<input $notifyDependencyForMaintainedTrueChecked$ type="radio" name="notifyDependencyForMaintained=%s" value="true" id="notifyDependencyForMaintainedTrue">
67+
<label for="notifyDependencyForMaintainedTrue">Yes</label>
68+
<input $notifyDependencyForMaintainedFalseChecked$ type="radio" name="notifyDependencyForMaintained=%s" value="false" id="notifyDependencyForMaintainedFalse">
69+
<label for="notifyDependencyForMaintainedFalse">No</label>
70+
<p class="expandable">
71+
trigger:
72+
<label style="display:flex">
73+
<input $notifyDependencyTriggerBoundsAlwaysChecked$ type="radio" name="notifyDependencyTriggerBounds=%s" value="Always">
74+
always
75+
</label>
76+
<label style="display:flex">
77+
<input $notifyDependencyTriggerBoundsBoundsOutOfRangeChecked$ type="radio" name="notifyDependencyTriggerBounds=%s" value="BoundsOutOfRange">
78+
my maintained package doesn't accept the version of the newly uploaded or revised dependency
79+
</label>
80+
<label style="display:flex">
81+
<input $newIncompatibilityChecked$ type="radio" name="notifyDependencyTriggerBounds=%s" value="NewIncompatibility">
82+
my maintained package doesn't accept the version of the newly uploaded or revised dependency
83+
and my package does accept the second highest version of said dependency
84+
</label>
85+
</p>
86+
</td>
87+
</tr>
4888
</table>
4989
<input type="submit" value="Save notify preference" />
5090
</form>

src/Distribution/Server/Features.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,7 @@ initHackageFeatures env@ServerEnv{serverVerbosity = verbosity} = do
352352
userDetailsFeature
353353
reportsCoreFeature
354354
tagsFeature
355+
reverseFeature
355356

356357
packageFeedFeature <- mkPackageFeedFeature
357358
coreFeature

src/Distribution/Server/Features/ReverseDependencies.hs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ data ReverseFeature = ReverseFeature {
5454
revCountForAllPackages :: forall m. MonadIO m => m [(PackageName, ReverseCount)],
5555
revJSON :: IO ByteString,
5656
revDisplayInfo :: forall m. MonadIO m => m VersionIndex,
57-
revForEachVersion :: PackageName -> IO (Map.Map Version (Set PackageIdentifier))
57+
revForEachVersion :: PackageName -> IO (Map.Map Version (Set PackageIdentifier)),
58+
queryReverseIndex :: forall m. MonadIO m => m ReverseIndex
5859
}
5960

6061
instance IsHackageFeature ReverseFeature where

src/Distribution/Server/Features/ReverseDependencies/State.hs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
{-# LANGUAGE TupleSections #-}
44

55
module Distribution.Server.Features.ReverseDependencies.State
6-
( ReverseIndex(..)
6+
( NodeId
7+
, ReverseIndex(..)
78
, ReverseDisplay
89
, ReverseCount(..)
910
, VersionIndex

0 commit comments

Comments
 (0)