summaryrefslogtreecommitdiff
path: root/doc/todo
diff options
context:
space:
mode:
Diffstat (limited to 'doc/todo')
-rw-r--r--doc/todo/User.hasDesktopGroups:_debian-tor_group_doesn__39__t_necessarily_exist.mdwn10
-rw-r--r--doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN.mdwn17
-rw-r--r--doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN/comment_1_432c6009fbe2309af81a47658173f753._comment27
-rw-r--r--doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN/comment_2_3ddaec3927b4a4aefad45a02e83476dc._comment9
-rw-r--r--doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN/comment_3_cf7b9d698c67e7a12d07a53667241092._comment9
-rw-r--r--doc/todo/pull_request:_Git.repoConfigured_and_Git.repoAcceptsNonFFs_properties.mdwn1
-rw-r--r--doc/todo/pull_request:_Locale.selectedFor_and_Locale.available_properties.mdwn15
-rw-r--r--doc/todo/pull_request:_Locale.selectedFor_and_Locale.available_properties/comment_1_3c528827f40420e3f4001f69127a0c51._comment17
-rw-r--r--doc/todo/pull_request:_Locale.selectedFor_and_Locale.available_properties/comment_2_981a305c50d699fd3d06c39ca66107ea._comment7
-rw-r--r--doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable.mdwn6
-rw-r--r--doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_10_eb58216ef1172ee5b882090dab7219ce._comment32
-rw-r--r--doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_11_bee4b2397dfb28a3791081a83d725daf._comment7
-rw-r--r--doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_12_1e09f5a3f4565a9392d7b50b703a8a69._comment17
-rw-r--r--doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_13_54de6d1c5351e9303c190edda7e7a33f._comment7
-rw-r--r--doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_1_88f5d79b8cd6064d1a65dec445819afe._comment14
-rw-r--r--doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_2_23cb35130719bf1657652b76c0791947._comment10
-rw-r--r--doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_3_5759b4fddf360e8a777c0339c5426b40._comment9
-rw-r--r--doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_4_cd49645ff94d9ccec74ff72a836cd1f7._comment20
-rw-r--r--doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_5_33744064a8b224d6e44e2cf8081f6a56._comment9
-rw-r--r--doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_6_db48a08bc6eece590aebd41691623665._comment7
-rw-r--r--doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_7_9c45f473cbc432a32bd64bbbf048fae4._comment21
-rw-r--r--doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_8_7069f68888663fef109b82a044aeb5e1._comment9
-rw-r--r--doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_9_5694c0bec217d3513aa8e80f55482d75._comment17
-rw-r--r--doc/todo/should_not_overwrite_unchanged_private_files.mdwn1
-rw-r--r--doc/todo/should_not_overwrite_unchanged_private_files/comment_1_d65fd2ebfca6b9994db9512232ce78ff._comment20
25 files changed, 318 insertions, 0 deletions
diff --git a/doc/todo/User.hasDesktopGroups:_debian-tor_group_doesn__39__t_necessarily_exist.mdwn b/doc/todo/User.hasDesktopGroups:_debian-tor_group_doesn__39__t_necessarily_exist.mdwn
new file mode 100644
index 00000000..b6e1ec20
--- /dev/null
+++ b/doc/todo/User.hasDesktopGroups:_debian-tor_group_doesn__39__t_necessarily_exist.mdwn
@@ -0,0 +1,10 @@
+The new `User.hasDesktopGroups` tries to add a user to the group `debian-tor` which fails if this group does not exist.
+
+What package creates this group? If someone could let me know that, I will patch `User.hasDesktopGroups` to only try to add a user to `debian-tor` if `Apt.isInstalled "blah"` is true.
+
+Or perhaps Joey added this group because this group exists by default on Debian Unstable. If so then a check can be inserted for that.
+
+--[[spwhitton|https://spwhitton.name/]]
+
+> Noticed that too and made it only add the user to existant groups, which
+> is the same approach user-setup uses. [[done]] --[[Joey]]
diff --git a/doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN.mdwn b/doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN.mdwn
new file mode 100644
index 00000000..fad2a1e0
--- /dev/null
+++ b/doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN.mdwn
@@ -0,0 +1,17 @@
+I'd like to patch the `/usr/bin/propellor` wrapper to check for two environment variables. I'm posting my proposal here to see whether Joey would be willing to merge such a patch before starting to write it.
+
+# Proposal
+
+- if the branch currently checked out in the `~/.propellor` repository does not match `PROPELLOR_SPIN_BRANCH`, Propellor would refuse to spin
+
+- if the `PROPELLOR_DIRTY_NOSPIN` variable is set, Propellor would refuse to spin if the `~/.propellor` repository contains uncommitted changes
+
+# Rationale
+
+`PROPELLOR_SPIN_BRANCH` is to prevent foot-shooting. When working on a feature branch one might forget to check out one's usual config branch before spinning. If the host that is spun is configured with `Cron.runPropellor`, it will be set to pull from the feature branch. If the user doesn't realise that this has happened, they might make further commits to their usual config branch and expect them to have propagated to the host by means of its `Cron.runPropellor` cronjob, but they won't reach the host until the next manual spin from the correct branch. Of course there are other possible foot-shootings available in this area that this environment variable would prevent.
+
+`PROPELLOR_DIRTY_NOSPIN` is to prevent configuration changes ending up in commits made with the undescriptive commit message "propellor spin". I understand that it doesn't bother Joey, but I want all configuration changes to be recorded with a descriptive commit message because it makes using `git revert` and `git cherry-pick` easier. So for users like me this environment variable is a useful check.
+
+--[[spwhitton|https://spwhitton.name]]
+
+> nice work! [[merged|done]] --[[Joey]]
diff --git a/doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN/comment_1_432c6009fbe2309af81a47658173f753._comment b/doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN/comment_1_432c6009fbe2309af81a47658173f753._comment
new file mode 100644
index 00000000..9b9ea864
--- /dev/null
+++ b/doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN/comment_1_432c6009fbe2309af81a47658173f753._comment
@@ -0,0 +1,27 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-12-06T21:14:36Z"
+ content="""
+I'd use `PROPELLOR_SPIN_BRANCH`. No objections to `PROPELLOR_DIRTY_NOSPIN`
+as long as it's not default.
+
+Note that Cron.runPropellor does not use /usr/bin/propellor, and there are
+other ways of running propellor that don't use that wrapper. So I don't
+think the wrapper is the place to implement this kind of thing.
+
+Why use environment variables for configuration? That makes it hard to make
+sure propellor gets the same configuration every way it can be run. And,
+propellor has a config file. :)
+
+Implementation could be something like, add a `configuredMain` that takes a
+monoidial configuration value for such global config settings.
+(so `defaultMain = configuredMain mempty`)
+
+Hmm, I suppose the issue with `PROPELLOR_SPIN_BRANCH` is that when a
+different branch is checked out, that branch's config.hs would not have that
+configured, or would perhaps set it to use that branch. So, that's why
+you were thinking environment variables?
+
+Maybe use git-config?
+"""]]
diff --git a/doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN/comment_2_3ddaec3927b4a4aefad45a02e83476dc._comment b/doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN/comment_2_3ddaec3927b4a4aefad45a02e83476dc._comment
new file mode 100644
index 00000000..045cd927
--- /dev/null
+++ b/doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN/comment_2_3ddaec3927b4a4aefad45a02e83476dc._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ subject="comment 2"
+ date="2015-12-06T22:24:06Z"
+ content="""
+I was thinking environment variables because I saw both of these as just safety checks for the user, spinning hosts from their xterm on their laptop. I'll implement both as `git-config` variables; that's a good idea as it covers more cases.
+
+I don't think that this patch need touch the propellor executable run by `Cron.runPropellor`, because if the check has already ensured that the correct branch got pushed to the host during the most recent spin, then `propellor_cronjob` is guaranteed to pull the correct branch.
+"""]]
diff --git a/doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN/comment_3_cf7b9d698c67e7a12d07a53667241092._comment b/doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN/comment_3_cf7b9d698c67e7a12d07a53667241092._comment
new file mode 100644
index 00000000..ca22b1d3
--- /dev/null
+++ b/doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN/comment_3_cf7b9d698c67e7a12d07a53667241092._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ subject="comment 3"
+ date="2015-12-06T23:58:51Z"
+ content="""
+I've implemented these in the `safetychecks` branch of `https://git.spwhitton.name/propellor`.
+
+A nice side effect of my implementation is that the spin only errors out after there's been an attempt to compile Propellor. So you can run `propellor --spin` in order to have GHC typecheck your code on a feature branch.
+"""]]
diff --git a/doc/todo/pull_request:_Git.repoConfigured_and_Git.repoAcceptsNonFFs_properties.mdwn b/doc/todo/pull_request:_Git.repoConfigured_and_Git.repoAcceptsNonFFs_properties.mdwn
index 6bdd0b42..c1df5461 100644
--- a/doc/todo/pull_request:_Git.repoConfigured_and_Git.repoAcceptsNonFFs_properties.mdwn
+++ b/doc/todo/pull_request:_Git.repoConfigured_and_Git.repoAcceptsNonFFs_properties.mdwn
@@ -10,3 +10,4 @@ This branch adds
Note that `Git.repoConfigured` uses a tuple instead of just two function arguments in order that it can be used infix in `config.hs` when connected to other properties with `&`, as `ConfFile.containsIniSetting`.
> [[done]], thank you (had to fix some indents) --[[Joey]]
+>> Sorry about that! Thought I had Emacs set up for your style guide. --spwhitton
diff --git a/doc/todo/pull_request:_Locale.selectedFor_and_Locale.available_properties.mdwn b/doc/todo/pull_request:_Locale.selectedFor_and_Locale.available_properties.mdwn
new file mode 100644
index 00000000..b34118f0
--- /dev/null
+++ b/doc/todo/pull_request:_Locale.selectedFor_and_Locale.available_properties.mdwn
@@ -0,0 +1,15 @@
+Please consider merging branch `locale` of repo `https://git.spwhitton.name/propellor`
+
+It adds the following properties:
+
+- `Locale.selectedFor` to choose a locale for a locale variable
+- `Locale.available`, used by `Locale.selectedFor` to ensure a locale is generated
+
+Example usage (I'm British but I live in the US):
+
+ & "en_GB.UTF-8" `Locale.selectedFor` ["LANG", "LANGUAGE"]
+ & "en_US.UTF-8" `Locale.selectedFor` ["LC_PAPER"]
+
+Pretty sure I've got the indentation right this time too ;)
+
+> merged, thanks! [[done]] --[[Joey]]
diff --git a/doc/todo/pull_request:_Locale.selectedFor_and_Locale.available_properties/comment_1_3c528827f40420e3f4001f69127a0c51._comment b/doc/todo/pull_request:_Locale.selectedFor_and_Locale.available_properties/comment_1_3c528827f40420e3f4001f69127a0c51._comment
new file mode 100644
index 00000000..4d413c84
--- /dev/null
+++ b/doc/todo/pull_request:_Locale.selectedFor_and_Locale.available_properties/comment_1_3c528827f40420e3f4001f69127a0c51._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-11-25T15:24:10Z"
+ content="""
+The types here don't tell me much about what values it expects.
+
+`selectedFor :: String -> [String] -> Property NoInfo`
+
+Function needs either some examples in its haddock, or better types.
+
+Also, the `available` property incorrectly succeeds if the locale passed to
+it is not listed in locale.gen.
+
+(It would be nice for these properties to be revertable but that's just a
+thought.)
+"""]]
diff --git a/doc/todo/pull_request:_Locale.selectedFor_and_Locale.available_properties/comment_2_981a305c50d699fd3d06c39ca66107ea._comment b/doc/todo/pull_request:_Locale.selectedFor_and_Locale.available_properties/comment_2_981a305c50d699fd3d06c39ca66107ea._comment
new file mode 100644
index 00000000..e8801aba
--- /dev/null
+++ b/doc/todo/pull_request:_Locale.selectedFor_and_Locale.available_properties/comment_2_981a305c50d699fd3d06c39ca66107ea._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ subject="comment 2"
+ date="2015-11-26T02:51:22Z"
+ content="""
+Thanks for the feedback. I've implemented your suggestions. Please take a look.
+"""]]
diff --git a/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable.mdwn b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable.mdwn
new file mode 100644
index 00000000..275ea9f5
--- /dev/null
+++ b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable.mdwn
@@ -0,0 +1,6 @@
+Please consider merging branch `builddepfix` of repo `https://git.spwhitton.name/propellor`
+
+Patches `Apt.buildDep` to check whether the build deps are installable, so that it no longer registers a change every spin.
+
+> Apt.buildDep now checks if the dpkg status file has changed, so [[done]]
+> --[[Joey]]
diff --git a/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_10_eb58216ef1172ee5b882090dab7219ce._comment b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_10_eb58216ef1172ee5b882090dab7219ce._comment
new file mode 100644
index 00000000..3799a012
--- /dev/null
+++ b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_10_eb58216ef1172ee5b882090dab7219ce._comment
@@ -0,0 +1,32 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 10"""
+ date="2015-12-03T15:05:21Z"
+ content="""
+
+ trivial (trivial p `changesFile` f) `changesFile` f'
+
+The parenthesized property here is all marked trivial, so a change to f
+won't result in MadeChange, though a change to f' will.
+
+The only way propellor might intercept the output of a program is if you're
+using the new Concurrent module. In that case it should buffer program output
+and display it all at once. There could potentially be a bug there that
+hid program output. I certianly can't reproduce changesFile hiding the output
+of a program:
+
+ *Propellor.Property.Apt> runPropellor (Host "localhost" [] mempty) $ ensureProperty $ trivial (buildDep ["git-annex"]) `changesFile` "/var/lib/dpkg/status"
+ Reading package lists... Done
+ Building dependency tree
+ Reading state information... Done
+ 0 upgraded, 0 newly installed, 0 to remove and 707 not upgraded.
+ NoChange
+
+ *Propellor.Property.Apt Propellor.Property.Concurrent> withConcurrentOutput $ runPropellor (Host "localhost" [] mempty) $ ensureProperty $ (trivial (buildDep ["git-annex"]) `changesFile` "/var/lib/dpkg/status") `concurrently` cmdProperty "echo" ["hi"]
+ hi
+ Reading package lists...
+ Building dependency tree...
+ Reading state information...
+ 0 upgraded, 0 newly installed, 0 to remove and 707 not upgraded.
+ MadeChange
+"""]]
diff --git a/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_11_bee4b2397dfb28a3791081a83d725daf._comment b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_11_bee4b2397dfb28a3791081a83d725daf._comment
new file mode 100644
index 00000000..f4df5527
--- /dev/null
+++ b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_11_bee4b2397dfb28a3791081a83d725daf._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ subject="comment 11"
+ date="2015-12-03T23:29:57Z"
+ content="""
+Thank you for your feedback. I'll think about how I might rewrite `changeIfChanges` to avoid that problem with `trivial`, and I'll try to pin down the hiding of apt's output.
+"""]]
diff --git a/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_12_1e09f5a3f4565a9392d7b50b703a8a69._comment b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_12_1e09f5a3f4565a9392d7b50b703a8a69._comment
new file mode 100644
index 00000000..3db6fd1b
--- /dev/null
+++ b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_12_1e09f5a3f4565a9392d7b50b703a8a69._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 12"""
+ date="2015-12-05T22:52:42Z"
+ content="""
+I had a thought about this;
+[[trivial is a code smell|type-level_trivial_avoidance]] and adding
+UncheckedProperty type avoids needing to use trivial.
+
+So, now cmdProperty, runApt, and other things that make a Property but
+can't really detect when it MadeChange can instead make an
+UncheckedProperty, and changesFile is one of the ways to convert that into
+a Property.
+
+My implementation also allows applying changesFile multiple times, to
+detect a change to multiple files.
+"""]]
diff --git a/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_13_54de6d1c5351e9303c190edda7e7a33f._comment b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_13_54de6d1c5351e9303c190edda7e7a33f._comment
new file mode 100644
index 00000000..72f6bf40
--- /dev/null
+++ b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_13_54de6d1c5351e9303c190edda7e7a33f._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ subject="comment 13"
+ date="2015-12-06T17:17:34Z"
+ content="""
+Very nice. Thank you for writing it up in full so Haskell beginners like me can learn about the flexibilities and limitations of programming with Haskell types.
+"""]]
diff --git a/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_1_88f5d79b8cd6064d1a65dec445819afe._comment b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_1_88f5d79b8cd6064d1a65dec445819afe._comment
new file mode 100644
index 00000000..209b62a3
--- /dev/null
+++ b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_1_88f5d79b8cd6064d1a65dec445819afe._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-11-26T11:14:37Z"
+ content="""
+Looks like Build-Depends-Index is not handled, nor are 'a | b' build deps,
+or arch-specific build deps. Since versions are skipped, if a build dep
+needed a newer version, the property also wouldn't try to upgrade to it
+after this change.
+
+I feel that parsing build deps is too complex for propellor.
+
+It might work to somehow detect if apt has made any changes.
+"""]]
diff --git a/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_2_23cb35130719bf1657652b76c0791947._comment b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_2_23cb35130719bf1657652b76c0791947._comment
new file mode 100644
index 00000000..ace80098
--- /dev/null
+++ b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_2_23cb35130719bf1657652b76c0791947._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2015-11-26T12:48:25Z"
+ content="""
+How about simply checking if /var/lib/dpkg/status is changed?
+
+I added a `changesFile` property combinator which should be helpful for
+that.
+"""]]
diff --git a/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_3_5759b4fddf360e8a777c0339c5426b40._comment b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_3_5759b4fddf360e8a777c0339c5426b40._comment
new file mode 100644
index 00000000..86f4d1de
--- /dev/null
+++ b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_3_5759b4fddf360e8a777c0339c5426b40._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ subject="comment 3"
+ date="2015-11-26T14:39:31Z"
+ content="""
+I was hoping your deep knowledge of Apt would be able to help with this!
+
+Before I proceed, how would you feel about catching the output of apt and only printing it if apt did make changes? Although that would make the output weirdly appear all at once when the build deps are actually installed, on the other hand it would mean no output if they're not, when we detect no changes to /var/lib/dpkg/status.
+"""]]
diff --git a/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_4_cd49645ff94d9ccec74ff72a836cd1f7._comment b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_4_cd49645ff94d9ccec74ff72a836cd1f7._comment
new file mode 100644
index 00000000..30149a4c
--- /dev/null
+++ b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_4_cd49645ff94d9ccec74ff72a836cd1f7._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 4"""
+ date="2015-11-30T16:57:45Z"
+ content="""
+I think it would probably depend on the user when that makes sense to do.
+If I'm installing build deps over a slow network connection, I'd like to
+see the output.
+
+It would be awesome if this transformation could be applied to any
+arbitrary Property. I don't immediately know how to do that, although it
+seems useful that all process spawning already goes through
+concurrent-output, which can buffer the output and display it only when the
+command finishes.
+
+Perhaps an extension to concurrent-ouput could let it buffer the output
+of all commands run by a property and then discard the buffer if the
+property finished with NoChange. But I don't see a way to make this work
+when multiple properties are being run concurrently.
+"""]]
diff --git a/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_5_33744064a8b224d6e44e2cf8081f6a56._comment b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_5_33744064a8b224d6e44e2cf8081f6a56._comment
new file mode 100644
index 00000000..b0283161
--- /dev/null
+++ b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_5_33744064a8b224d6e44e2cf8081f6a56._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ subject="comment 5"
+ date="2015-12-02T04:46:14Z"
+ content="""
+I've made a property combinator `noChangeIfUnchanged` and applied it to Apt.buildDep in my `builddepfix` branch. Please take a look.
+
+In my testing of this, Propellor hides the output if the build deps are already installed i.e. if the property returns NoChange. So it looks like you've already implemented your awesome at some point :)
+"""]]
diff --git a/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_6_db48a08bc6eece590aebd41691623665._comment b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_6_db48a08bc6eece590aebd41691623665._comment
new file mode 100644
index 00000000..85c91d65
--- /dev/null
+++ b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_6_db48a08bc6eece590aebd41691623665._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ subject="comment 6"
+ date="2015-12-02T04:57:57Z"
+ content="""
+Seems I blanked on your `changesFile` combinator when I sat down to write mine. Taking a look now, my approach is much more direct for cases like `Apt.buildDep` when the problem is registering a change when there should be NoChange, whereas I think the intention of your changesFile is the opposite case. Though it might be nice to combine them. Let me know what you think.
+"""]]
diff --git a/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_7_9c45f473cbc432a32bd64bbbf048fae4._comment b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_7_9c45f473cbc432a32bd64bbbf048fae4._comment
new file mode 100644
index 00000000..e2611fd5
--- /dev/null
+++ b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_7_9c45f473cbc432a32bd64bbbf048fae4._comment
@@ -0,0 +1,21 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 7"""
+ date="2015-12-02T16:10:34Z"
+ content="""
+The two combinators are indeed very similar. The reason I wrote
+changesFile the way I did is that that allows it to be applied repeatedly
+when a property can change any of several files.
+
+ trivial someprop
+ `changesFile` "foo"
+ `changesFile` "bar"
+
+That seems fairly likely to come up, while it would be unusual for a
+property to have to change multiple files at once to be considered
+to make a change at all, which is what multiple applications of
+`noChangeIfUnchanged` leads to.
+
+But neither combinator causes apt's output to not be displayed,
+which is what I thought we were talking about.
+"""]]
diff --git a/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_8_7069f68888663fef109b82a044aeb5e1._comment b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_8_7069f68888663fef109b82a044aeb5e1._comment
new file mode 100644
index 00000000..c05d6255
--- /dev/null
+++ b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_8_7069f68888663fef109b82a044aeb5e1._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ subject="comment 8"
+ date="2015-12-02T21:44:37Z"
+ content="""
+My original goal was to have `Apt.buildDep` return NoChange if the build deps are already installed. As a welcome but unexplained side-effect, on my system `noChangeIfUnchanged` *does* cause apt's output not to be displayed.
+
+I'll think about ways to combine our two combinators.
+"""]]
diff --git a/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_9_5694c0bec217d3513aa8e80f55482d75._comment b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_9_5694c0bec217d3513aa8e80f55482d75._comment
new file mode 100644
index 00000000..5783dd7b
--- /dev/null
+++ b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_9_5694c0bec217d3513aa8e80f55482d75._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ subject="comment 9"
+ date="2015-12-03T02:08:58Z"
+ content="""
+I can get what I want if I use `trivial` and `changesFile` in the way you described. So please consider adding your method as a combinator:
+
+ p `changeIfChanges` f = (trivial p) `changesFile` f
+
+which is okay because `trivial` is idempotent so `changeIfChanges` may be applied more than once (I've got this in my branch with a decent docstring and I've applied it to `Apt.buildDep`).
+
+I think that this ought to be its own combinator, rather than just a recommendation to use `trivial` and `changesFile` in such cases, because this doesn't follow the semantics of `trivial`: it's not necessarily the case that it is the same amount of work to check if the property needs to be ensured as it is to ensure it.
+
+(In this language, my `noChangeIfUnchanged` could be called `changeOnlyIfChanges`. I agree that it's very unlikely to useful.)
+
+(Again, on my machine, applying `changeIfChanges` to `Apt.buildDep` magically hides apt's output if the build-deps are already installed.)
+"""]]
diff --git a/doc/todo/should_not_overwrite_unchanged_private_files.mdwn b/doc/todo/should_not_overwrite_unchanged_private_files.mdwn
new file mode 100644
index 00000000..090849f1
--- /dev/null
+++ b/doc/todo/should_not_overwrite_unchanged_private_files.mdwn
@@ -0,0 +1 @@
+A private file is overwritten by propellor at each run. It is not optimal when the host runs an integrity checker (like samhain). It would be great to have a file modified only if necessary.
diff --git a/doc/todo/should_not_overwrite_unchanged_private_files/comment_1_d65fd2ebfca6b9994db9512232ce78ff._comment b/doc/todo/should_not_overwrite_unchanged_private_files/comment_1_d65fd2ebfca6b9994db9512232ce78ff._comment
new file mode 100644
index 00000000..6e44dde6
--- /dev/null
+++ b/doc/todo/should_not_overwrite_unchanged_private_files/comment_1_d65fd2ebfca6b9994db9512232ce78ff._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-12-11T16:35:43Z"
+ content="""
+Doesn't rebuilding propellor overwrite lots of files too? Is the
+privdata.local file somehow a particular problem, perhaps becuase
+of its permissions?
+
+You should find it easy enough to make propellor read any existing
+file and only update the file when there are changes. But it seems to me
+your integrity checker would still go off whenever a new version
+of the file is legitimately reveiced. Perhaps it would be better to
+write a property to configure your integrity checker to not fire on
+this file?
+
+(I've thought from time to time about having rsync update the privdata.local
+file. Since it's unchanged in most spins, that would probably save network
+bandwidth.)
+"""]]