Recent changes to this wiki:

Add git-repo-updater gitup to the list of related software
diff --git a/doc/index.mdwn b/doc/index.mdwn
index 70c67ab..e4fdaeb 100644
--- a/doc/index.mdwn
+++ b/doc/index.mdwn
@@ -88,6 +88,7 @@ Some more examples of things it can do include:
 * [gita](https://github.com/nosarthur/gita): manage multiple git repos
 * [gitbatch](https://github.com/isacikgoz/gitbatch): manage multiple git repos in one place
 * [git-plus](https://github.com/tkrajina/git-plus) multi: run commands in multiple git repos
+* [git-repo-updater](https://github.com/earwig/git-repo-updater) gitup: update multiple git repos at once
 * [mu-repo](https://fabioz.github.io/mu-repo/): help working with multiple git repos
 * [ghq](https://github.com/motemen/ghq): manage remote repository clones
 * [uncommitted](https://github.com/brandon-rhodes/uncommitted): find uncommitted changes in VCS directories

Remove test of the forum
diff --git a/doc/forum/this_is_a_test.mdwn b/doc/forum/this_is_a_test.mdwn
deleted file mode 100644
index 7b86167..0000000
--- a/doc/forum/this_is_a_test.mdwn
+++ /dev/null
@@ -1,4 +0,0 @@
-I'm testing
-
-
-and another tyest
diff --git a/doc/forum/this_is_a_test/comment_1_5de8d067545e0784547fe3c81239fb81._comment b/doc/forum/this_is_a_test/comment_1_5de8d067545e0784547fe3c81239fb81._comment
deleted file mode 100644
index 77e424a..0000000
--- a/doc/forum/this_is_a_test/comment_1_5de8d067545e0784547fe3c81239fb81._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="pabs3@49c776417680694a0f3295ee80df4edfca300096"
- nickname="pabs3"
- avatar="http://cdn.libravatar.org/avatar/3bf5f3b29a3d68ddf11eb1a3d8c5dc65"
- subject="a test"
- date="2020-04-23T22:59:53Z"
- content="""
-more testing
-"""]]

Added a comment: no easy way to do this yet
diff --git a/doc/forum/How_to_work_on_a_specific_subset_of_repos__63__/comment_1_82957cc4d2c4bdbe0a0e20bd709c0c79._comment b/doc/forum/How_to_work_on_a_specific_subset_of_repos__63__/comment_1_82957cc4d2c4bdbe0a0e20bd709c0c79._comment
new file mode 100644
index 0000000..9bb5e7a
--- /dev/null
+++ b/doc/forum/How_to_work_on_a_specific_subset_of_repos__63__/comment_1_82957cc4d2c4bdbe0a0e20bd709c0c79._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="PaulWise"
+ avatar="http://cdn.libravatar.org/avatar/3bf5f3b29a3d68ddf11eb1a3d8c5dc65"
+ subject="no easy way to do this yet"
+ date="2020-04-30T11:42:15Z"
+ content="""
+I can see how tag based classification of repos would be really useful and I would welcome a patch for that, but until someone writes it, there is no easy way to do this, especially if the subsets overlap. For now the best option is to split each subset out into a separate .mrconfig-foo config and have your global .mrconfig file include all the subsets. If your subsets overlap then keep each config file separate without includes. Then when you want to run on a subset, you simply tell mr to use the config file for that subset.
+
+
+"""]]

diff --git a/doc/forum/How_to_work_on_a_specific_subset_of_repos__63__.mdwn b/doc/forum/How_to_work_on_a_specific_subset_of_repos__63__.mdwn
new file mode 100644
index 0000000..113bfb2
--- /dev/null
+++ b/doc/forum/How_to_work_on_a_specific_subset_of_repos__63__.mdwn
@@ -0,0 +1,25 @@
+I often want to run a specific operation on a fixed subset of repos.
+The operation itself is valid for all repos, just I usually don't want to run it when I am doing specific tasks.
+E.g. when I am working on TaskA, I only want the operation to run on repo1 and repo3, whereas when I am running TaskB
+I want to run them on repo2 and repo3.
+
+Is there some way to preselect a (potentially large) list of repos to run an operation on?
+Ideally, I would imaging to add some kind of tags or labels on the repos section so it is specific to the repo
+and not coded in the operation itself and then have mr select the repos with the specific tags?
+
+E.g. something like this pseudo code
+
+    cat .mrconfig
+    [repo1]
+    tag = TaskA
+    
+    [repo2]
+    tag = TaskB
+    
+    [repo3]
+    tag = TaskA TaskB
+
+and then run the update operation with something like
+
+    mr --select-repos-with-tags=TaskA  update
+

Added a comment: forum fixed
diff --git a/doc/todo/Failure_message_when_nothing_to_commit/comment_2_1424aacec18b5585b7653f121d644f9d._comment b/doc/todo/Failure_message_when_nothing_to_commit/comment_2_1424aacec18b5585b7653f121d644f9d._comment
new file mode 100644
index 0000000..ef0c050
--- /dev/null
+++ b/doc/todo/Failure_message_when_nothing_to_commit/comment_2_1424aacec18b5585b7653f121d644f9d._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="pabs3@49c776417680694a0f3295ee80df4edfca300096"
+ nickname="pabs3"
+ avatar="http://cdn.libravatar.org/avatar/3bf5f3b29a3d68ddf11eb1a3d8c5dc65"
+ subject="forum fixed"
+ date="2020-04-23T23:04:20Z"
+ content="""
+The forum has been fixed, thanks for reporting that.
+"""]]

Add a news item about the forum being fixed
diff --git a/doc/news/forum-fixed.mdwn b/doc/news/forum-fixed.mdwn
new file mode 100644
index 0000000..94b815b
--- /dev/null
+++ b/doc/news/forum-fixed.mdwn
@@ -0,0 +1,9 @@
+The forum wasn't working due to incorrect ikiwiki settings.
+The settings have been fixed and the forum is now working!
+
+If you have a topic to discuss, jump on the forum and
+share your myrepos config, tips, tricks or questions.
+
+Thanks to Mat for letting us know about this.
+
+[[!meta author=pabs]]

Added a comment: a test
diff --git a/doc/forum/this_is_a_test/comment_1_5de8d067545e0784547fe3c81239fb81._comment b/doc/forum/this_is_a_test/comment_1_5de8d067545e0784547fe3c81239fb81._comment
new file mode 100644
index 0000000..77e424a
--- /dev/null
+++ b/doc/forum/this_is_a_test/comment_1_5de8d067545e0784547fe3c81239fb81._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="pabs3@49c776417680694a0f3295ee80df4edfca300096"
+ nickname="pabs3"
+ avatar="http://cdn.libravatar.org/avatar/3bf5f3b29a3d68ddf11eb1a3d8c5dc65"
+ subject="a test"
+ date="2020-04-23T22:59:53Z"
+ content="""
+more testing
+"""]]

diff --git a/doc/forum/this_is_a_test.mdwn b/doc/forum/this_is_a_test.mdwn
index 3c4a259..7b86167 100644
--- a/doc/forum/this_is_a_test.mdwn
+++ b/doc/forum/this_is_a_test.mdwn
@@ -1 +1,4 @@
 I'm testing
+
+
+and another tyest

test
diff --git a/doc/forum/this_is_a_test.mdwn b/doc/forum/this_is_a_test.mdwn
new file mode 100644
index 0000000..3c4a259
--- /dev/null
+++ b/doc/forum/this_is_a_test.mdwn
@@ -0,0 +1 @@
+I'm testing

Fix my comment up a bit
diff --git a/doc/todo/Failure_message_when_nothing_to_commit/comment_1_029161137e8acd5ca4259c64ec239e74._comment b/doc/todo/Failure_message_when_nothing_to_commit/comment_1_029161137e8acd5ca4259c64ec239e74._comment
index f2e6025..dff41cc 100644
--- a/doc/todo/Failure_message_when_nothing_to_commit/comment_1_029161137e8acd5ca4259c64ec239e74._comment
+++ b/doc/todo/Failure_message_when_nothing_to_commit/comment_1_029161137e8acd5ca4259c64ec239e74._comment
@@ -4,12 +4,17 @@
  subject="try setting the commit/record commands for those directories"
  date="2020-04-23T22:40:58Z"
  content="""
-I'm not sure myrepos should be in the business of ignoring failure of VCS commands generally. I think the right way to go for this is for you to override the commit/record commands for the repositories you want this feature in, or for the parent directory if the repositories are in one directory or for all repositories if you don't have any where you do snapshots.
-
+I'm not sure myrepos should be in the business of ignoring failure of VCS commands generally. I think the right way to go for this is for you to override the commit/record commands for the repositories you want this feature in, or for the parent directory if the repositories are in one directory or for all repositories if you don't have any where you don't do snapshots.
 
+    # For just the current repository
     mr config \"$(pwd)\" commit='git commit -a && git push --all || true'
     mr config \"$(pwd)\" record='git commit -a || true'
 
+    # For all the repos in a parent dir
+    mr config ~/path/to/snapshot/parent/dir commit='git commit -a && git push --all || true'
+    mr config ~/path/to/snapshot/parent/dir record='git commit -a || true'
+
+    # For changing the default mr commit command for git
     mr config DEFAULT git_commit='git commit -a && git push --all || true'
     mr config DEFAULT git_record='git commit -a || true'
 

Added a comment: try setting the commit/record commands for those directories
diff --git a/doc/todo/Failure_message_when_nothing_to_commit/comment_1_029161137e8acd5ca4259c64ec239e74._comment b/doc/todo/Failure_message_when_nothing_to_commit/comment_1_029161137e8acd5ca4259c64ec239e74._comment
new file mode 100644
index 0000000..f2e6025
--- /dev/null
+++ b/doc/todo/Failure_message_when_nothing_to_commit/comment_1_029161137e8acd5ca4259c64ec239e74._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="PaulWise"
+ avatar="http://cdn.libravatar.org/avatar/3bf5f3b29a3d68ddf11eb1a3d8c5dc65"
+ subject="try setting the commit/record commands for those directories"
+ date="2020-04-23T22:40:58Z"
+ content="""
+I'm not sure myrepos should be in the business of ignoring failure of VCS commands generally. I think the right way to go for this is for you to override the commit/record commands for the repositories you want this feature in, or for the parent directory if the repositories are in one directory or for all repositories if you don't have any where you do snapshots.
+
+
+    mr config \"$(pwd)\" commit='git commit -a && git push --all || true'
+    mr config \"$(pwd)\" record='git commit -a || true'
+
+    mr config DEFAULT git_commit='git commit -a && git push --all || true'
+    mr config DEFAULT git_record='git commit -a || true'
+
+I'll look into fixing the forum, thanks for reporting that.
+"""]]

diff --git a/doc/todo/Failure_message_when_nothing_to_commit.mdwn b/doc/todo/Failure_message_when_nothing_to_commit.mdwn
new file mode 100644
index 0000000..0071cc9
--- /dev/null
+++ b/doc/todo/Failure_message_when_nothing_to_commit.mdwn
@@ -0,0 +1,7 @@
+This is more of an annoyance than a bug: I've got multiple Git repos that I want to snapshot and push to back them up, so I run `mr commit -m "Snapshot $(date)"`.  When there is nothing to commit in one of the repos, I get `mr commit: command failed`.  Is there something I can do to make that not be considered a failure?
+
+Thanks,
+-Mat
+
+
+By the way, I hope this is the right place to report these things.  I tried the Forums page but Branchable reported that it was locked.

bug report
diff --git a/doc/todo/seemingly_unncessary_stat_of_all_repos_can_cause_unexpected_hang.mdwn b/doc/todo/seemingly_unncessary_stat_of_all_repos_can_cause_unexpected_hang.mdwn
new file mode 100644
index 0000000..05cbcd1
--- /dev/null
+++ b/doc/todo/seemingly_unncessary_stat_of_all_repos_can_cause_unexpected_hang.mdwn
@@ -0,0 +1,16 @@
+I had a mr commit in /etc hang. Investigation showed it was trying to stat
+a path under /media/, to a drive that had automount enabled, but which
+happened to have its USB port turned off to save power. In this situation,
+any access to the drive's mountpoint can take several minutes for the
+automount to time out before it fails.
+
+It seems unncessary for mr run in /foo to cause mr to stat repos in /bar
+that it's not going to be working in. I don't think it's worth going to major
+lengths to avoid, eg if a repo has chain=true then it's reasonable for mr
+to want to read its mrconfig at startup along with all the rest. But this
+repo in /media did not have chain=true, it was just an unrelated repo to
+the one mr was going to operate in.
+
+Tracked the stat to the use of `safe_abs_path` in `loadconfig`.
+
+--[[Joey]]

Add github2mr to the list of myrepos extensions
See-also: https://blog.steve.fi/exporting_github_repositories_to_myrepos.html
See-also: https://blog.steve.fi/announce__github2mr.html
diff --git a/doc/index.mdwn b/doc/index.mdwn
index ba083ae..70c67ab 100644
--- a/doc/index.mdwn
+++ b/doc/index.mdwn
@@ -80,6 +80,7 @@ Some more examples of things it can do include:
 
 * [drupal](https://github.com/wimleers/mr-drupal): simple way to manage drupal websites
 * [freeze](https://bitbucket.org/mforbes/mmfhg#rst-header-mr-un-freeze): record and restore VCS revision details
+* [github2mr](https://github.com/skx/github2mr): add your github repos to myrepos
 
 ## related software
 

Switch URLs from http to https where possible
https URLs are more secure.
Suggested-by: check-all-the-things
diff --git a/doc/index.mdwn b/doc/index.mdwn
index faf5d9b..ba083ae 100644
--- a/doc/index.mdwn
+++ b/doc/index.mdwn
@@ -91,7 +91,7 @@ Some more examples of things it can do include:
 * [ghq](https://github.com/motemen/ghq): manage remote repository clones
 * [uncommitted](https://github.com/brandon-rhodes/uncommitted): find uncommitted changes in VCS directories
 * [kas](https://github.com/siemens/kas): bitbake repository management tool
-* [VCS](http://www.greenend.org.uk/rjk/vcs/): a wrapper for version control systems
+* [VCS](https://www.greenend.org.uk/rjk/vcs/): a wrapper for version control systems
 * [vcstool](https://github.com/dirk-thomas/vcstool): work with multiple repositories
 * [vcstools](https://github.com/vcstools/vcstools): Python API wrapping version control systems
 * [rosinstall](https://github.com/vcstools/rosinstall): source code workspace management tool
diff --git a/doc/todo/Discoverability_of_mr_VCS_types__47__modules__47__handlers.mdwn b/doc/todo/Discoverability_of_mr_VCS_types__47__modules__47__handlers.mdwn
index b675a12..066c43f 100644
--- a/doc/todo/Discoverability_of_mr_VCS_types__47__modules__47__handlers.mdwn
+++ b/doc/todo/Discoverability_of_mr_VCS_types__47__modules__47__handlers.mdwn
@@ -1,4 +1,4 @@
-4 years ago, I created <https://github.com/wimleers/mr-drupal>. It still works great. I wrote about it at <http://wimleers.com/article/mr-drupal>.
+4 years ago, I created <https://github.com/wimleers/mr-drupal>. It still works great. I wrote about it at <https://wimleers.com/article/mr-drupal>.
 
 But this is very hard to discover.
 
diff --git a/doc/todo/sorted_.mrconfig/comment_1_fe128f2a8f16438b9e5b48fcfaf0c47b._comment b/doc/todo/sorted_.mrconfig/comment_1_fe128f2a8f16438b9e5b48fcfaf0c47b._comment
index 700a40e..e42b749 100644
--- a/doc/todo/sorted_.mrconfig/comment_1_fe128f2a8f16438b9e5b48fcfaf0c47b._comment
+++ b/doc/todo/sorted_.mrconfig/comment_1_fe128f2a8f16438b9e5b48fcfaf0c47b._comment
@@ -9,7 +9,7 @@ I am by no way a command line expert, but I was unable to get the sort-ini metho
 
 A couple of paragraphs down the original example is labeled \"Robbins' awk based shell pipeline\"
  
-http://homepage.smc.edu/morgan_david/linadmin/labs/sort-multiline-blocks.htm
+https://homepage.smc.edu/morgan_david/linadmin/labs/sort-multiline-blocks.htm
 
 From there I came to this
 
diff --git a/lib/dgit b/lib/dgit
index ec55f56..fcd3894 100644
--- a/lib/dgit
+++ b/lib/dgit
@@ -13,7 +13,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
 #
 # Maintainer: Sean Whitton <spwhitton@spwhitton.name>
 

Added a comment
diff --git a/doc/todo/ControlMaster/comment_8_211af62c869466d5fe456e07c24ab191._comment b/doc/todo/ControlMaster/comment_8_211af62c869466d5fe456e07c24ab191._comment
new file mode 100644
index 0000000..5695f4a
--- /dev/null
+++ b/doc/todo/ControlMaster/comment_8_211af62c869466d5fe456e07c24ab191._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="PaulWise"
+ avatar="http://cdn.libravatar.org/avatar/3bf5f3b29a3d68ddf11eb1a3d8c5dc65"
+ subject="comment 8"
+ date="2019-10-27T02:15:24Z"
+ content="""
+My git_fetch is just a workaround for something that IMO belongs in git itself that I haven't gotten around to implementing in a way that would be acceptable to git upstream. I have a branch that implements what I wanted, but it got rejected upstream and I never got around to figuring out a way forward:
+
+https://github.com/pabs3/git/commits/minimal-output
+https://public-inbox.org/git/1445741384-30828-1-git-send-email-pabs3@bonedaddy.net/
+
+Personally, I think in many instances `git pull` should be deprecated in favour of `git fetch` plus reviewing the incoming changes from upstream and then if appropriate fast-forwarding/rebasing/merging branches and fixing any issues. The obvious exception is upstreams that move so fast that review is not possible (like Linux) or people who have way too many repos checked out like me :)
+
+The default `mr update` just runs `git pull`, which allegedly \"is shorthand for git fetch followed by git merge FETCH_HEAD\" according to the docs. Unfortunately `git pull` doesn't seem to respect the `alias.fetch` config and I don't see any other config option to make git update/fetch pull from all remotes. We could change `mr update` to run `git pull --all` instead I guess, not sure if there are any downsides to that apart from the behaviour change...
+"""]]

Added a comment: thanks!
diff --git a/doc/todo/ControlMaster/comment_7_3242281b289ab31b55c1d44e919fd3e7._comment b/doc/todo/ControlMaster/comment_7_3242281b289ab31b55c1d44e919fd3e7._comment
new file mode 100644
index 0000000..549a666
--- /dev/null
+++ b/doc/todo/ControlMaster/comment_7_3242281b289ab31b55c1d44e919fd3e7._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="anarcat"
+ avatar="http://cdn.libravatar.org/avatar/b486931ea9d27c0cc41a4e9e4daccb7c"
+ subject="thanks!"
+ date="2019-10-25T15:25:27Z"
+ content="""
+thanks for all the advice, pabs and joeyh! :)
+
+joeyh: I suspected there was a lot more to it, and considering what I know of Haskell, I suspect 400 LOC in Haskell would translate into something much more complex in myrepos. :p
+
+pabs: neat trick! couldn't this be merged straight into mr though? it seems you have reimplemented most of the mr functions in your .mrconfig now. :)
+
+also, now that I switched to `fetch`, i keep up stumbling upon the issue that i have to rerun update everywhere to get the changes... couldn't there be a way to run update (with `--ff-only` maybe) *and* fetch at once? in other words, why doesn't `update` fetch changes from all remotes?
+"""]]

comment
diff --git a/doc/todo/ControlMaster/comment_6_21704b4357765ef19805b43ad4bd59cd._comment b/doc/todo/ControlMaster/comment_6_21704b4357765ef19805b43ad4bd59cd._comment
new file mode 100644
index 0000000..e079b4b
--- /dev/null
+++ b/doc/todo/ControlMaster/comment_6_21704b4357765ef19805b43ad4bd59cd._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 6"""
+ date="2019-10-20T17:50:20Z"
+ content="""
+git-annex contains a robust implementation of this in Annex/Ssh.hs.
+It's nontrivial; my implementation is over 400 LoC.
+
+Some other complications that may or may not have been discussed:
+
+* The path to a unix socket is limited to around 100 bytes,
+  so using the full server name in the socket name will sometimes fail.
+* Multiple password prompting has to be avoided when there's concurrency.
+  This and ssh failing on a socket that is not yet connected can both be
+  dealt with by locking until a connection is set up, running a dummy
+  command like "true" has to be run over ssh to know when the connection is
+  up.
+"""]]

Added a comment
diff --git a/doc/todo/ControlMaster/comment_5_d6a858f29224cb8685a1ac504e218571._comment b/doc/todo/ControlMaster/comment_5_d6a858f29224cb8685a1ac504e218571._comment
new file mode 100644
index 0000000..8905036
--- /dev/null
+++ b/doc/todo/ControlMaster/comment_5_d6a858f29224cb8685a1ac504e218571._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="PaulWise"
+ avatar="http://cdn.libravatar.org/avatar/3bf5f3b29a3d68ddf11eb1a3d8c5dc65"
+ subject="comment 5"
+ date="2019-10-18T15:10:35Z"
+ content="""
+About the TOFU issue, agreed that is better for security. I switched away because my `ControlMaster autoask` at the time was very annoying during `mr fetch`. On alioth I had an SSH key for read-only git access with no prompt and a key for read-write git access with a prompt, but that doesn't appear to be supported by gitlab/etc. I probably should rethink how to do this more optimally at some point.
+
+For the git fetch issue, you could do something like what I do here to make `mr -m fetch` not print things for remotes that don't have any changes and skip remotes that I disabled fetching from because they are gone now. Then just add any checks you want; if the remote is a USB stick and the path doesn't exist, skip the remote. You could also just make a git_fetchorigin command to only fetch one remote.
+
+```
+# work around git annoyance with mr -m fetch
+git_fetch =
+        git remote |
+                while read -r remote ; do
+                        if [ xtrue != \"x$(git config --bool \"remote.$remote.skipFetchAll\")\" ] ; then
+                                git fetch \"$remote\"
+                                git fetch --tags \"$remote\"
+                        fi
+                done
+```
+"""]]

Added a comment
diff --git a/doc/todo/ControlMaster/comment_4_9614cbe750f552434edc6a4b789786c0._comment b/doc/todo/ControlMaster/comment_4_9614cbe750f552434edc6a4b789786c0._comment
new file mode 100644
index 0000000..a08d496
--- /dev/null
+++ b/doc/todo/ControlMaster/comment_4_9614cbe750f552434edc6a4b789786c0._comment
@@ -0,0 +1,77 @@
+[[!comment format=mdwn
+ username="anarcat"
+ avatar="http://cdn.libravatar.org/avatar/b486931ea9d27c0cc41a4e9e4daccb7c"
+ subject="comment 4"
+ date="2019-10-18T14:50:54Z"
+ content="""
+> I've worked to getting most of my remote repos over https instead of SSH. This is mainly because I have a prompt for each use of my SSH keys, but also helps with this problem.
+
+My [wrapper script](https://gitlab.com/anarcat/scripts/raw/master/sync-boxes) takes care of that: it makes sure SSH works first...
+
+But it's true I might have better performance over HTTPS, I guess. It's just that I like the idea of pulling everything over SSH: I have a solid TOFU there that I don't have over HTTPS... And since this is an automated process, I really prefer to have that solid trust path in place. Plus setting up each push/pull URL is annoying, although there are nice ways around that, as you said...
+
+> Instead of configuring ControlMaster for all SSH connections, you could also just configure it for the hosts that you can only use git with (I'm thinking github.com/etc).
+>
+> I suggest putting SSH sockets in $XDG_RUNTIME_DIR instead of HOME, so you never get stale sockets after reboot and never get backup programs looking at sockets (some do).
+
+Excellent suggestions, thanks!
+
+> To be honest I'm not sure how myrepos could selectively enable ControlMaster for commands it runs. The only thing I can think of would be to modify PATH to add a script that runs the real ssh with additional options, but that seems pretty hacky.
+
+Well, what I was thinking of is that etckeeper is the one that calls the git processes ultimately, so it could do some magic with `GIT_SSH_COMMAND` for example... It's VCS-specific of course... :/
+
+> Either way, if ControlMaster provides very little improvement for you, adding it via myrepos instead of via the SSH config isn't going to change that.
+
+I guess I would first need to figure out *that* part of course. ;)
+
+> PS: I only ever do mr -j10 fetch and I leave updating branches to interactive shells where I can deal with any conflicts manually.
+
+That's also a good point, I always forget about `fetch`, thanks!
+
+One of the problems i have with `fetch` though is that it pulls *all* remotes that are configured. In some cases, those refer to USB keys or non-existent, transient repos... For example, I have this in one repo:
+
+    anarcat@angela:calendes(master)$ git rv
+    origin	anarc.at:/var/www/calendes (fetch)
+    origin	anarc.at:/var/www/calendes (push)
+    sneakernet	/media/anarcat/KINGSTON/calendes/ (fetch)
+    sneakernet	/media/anarcat/KINGSTON/calendes/ (push)
+
+It fails with the following:
+
+    mr fetch: /home/anarcat/Pictures/calendes
+    Récupération de origin
+    Récupération de sneakernet
+    fatal: '/media/anarcat/KINGSTON/calendes/' does not appear to be a git repository
+    fatal: Impossible de lire le dépôt distant.
+
+This also makes `fetch` slower, as it fetches more remotes.
+
+> Perhaps by \"dispatch stuff much better\" you mean just to avoid the race condition?
+
+Well, what I would like would be to the process to be much faster. I am not sure it's possible at all! I figured that ControlMaster might help, but I stumbled upon the race condition, so maybe that's the first thing to solve. Maybe, even, that's a bug in the ssh client itself that should *never* run into such a race condition (it could easily *wait* just a bit for another process to setup the socket correctly when it's created, for example).
+
+Here's a new benchmark, with your `ControlPersist` setting. I still
+get those errors, unfortunately:
+
+    ControlSocket /run/user/1000/ssh-control-local-user@remote.example.com:22 already exists, disabling multiplexing
+
+... which feel more and more like a bug in SSH: if it exists, use it!
+If you can't use it, just wait! If you can't wait, just shut the hell
+up, no? :)
+
+Anyways, without the multiplexer:
+
+    13.45user 6.51system 2:10.01elapsed 15%CPU (0avgtext+0avgdata 44900maxresident)k
+    0inputs+14400outputs (0major+514164minor)pagefaults 0swaps
+
+And with the multiplexer:
+
+    8.75user 4.86system 1:48.98elapsed 12%CPU (0avgtext+0avgdata 44972maxresident)k
+    1760inputs+14000outputs (39major+474784minor)pagefaults 0swaps
+
+So it still shaves off a good 20 seconds, which is not negligible. But
+since I now use `fetch` instead of update, I'm actually back to square
+one, and get tons of warnings to go through. :p
+
+Can't help but think this is just a bug with ssh though...
+"""]]

Added a comment: dispatch stuff much better...
diff --git a/doc/todo/ControlMaster/comment_3_ed8b11ab449b98868db2097383f69154._comment b/doc/todo/ControlMaster/comment_3_ed8b11ab449b98868db2097383f69154._comment
new file mode 100644
index 0000000..f501ead
--- /dev/null
+++ b/doc/todo/ControlMaster/comment_3_ed8b11ab449b98868db2097383f69154._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="PaulWise"
+ avatar="http://cdn.libravatar.org/avatar/3bf5f3b29a3d68ddf11eb1a3d8c5dc65"
+ subject="dispatch stuff much better..."
+ date="2019-10-18T04:38:44Z"
+ content="""
+Perhaps by \"dispatch stuff much better\" you mean just to avoid the race condition? Grouping accesses to the same host isn't likely to improve speed, especially if it is an overloaded host you probably want to spread out accesses instead. For spreading accesses out, it isn't possible for myrepos to know what host(s) the command it runs will connect to, since that info is in the git config for each repo and the myrepos copy of that config could be out of date and would be missing non-origin remotes.
+"""]]

Added a comment
diff --git a/doc/todo/ControlMaster/comment_2_05f4d8be1ab4cd6e95bd9806a2f22983._comment b/doc/todo/ControlMaster/comment_2_05f4d8be1ab4cd6e95bd9806a2f22983._comment
new file mode 100644
index 0000000..990f19a
--- /dev/null
+++ b/doc/todo/ControlMaster/comment_2_05f4d8be1ab4cd6e95bd9806a2f22983._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="PaulWise"
+ avatar="http://cdn.libravatar.org/avatar/3bf5f3b29a3d68ddf11eb1a3d8c5dc65"
+ subject="comment 2"
+ date="2019-10-18T04:29:24Z"
+ content="""
+PS: I forgot to mention that I use https for the repo remote URLs and then I set the push URLs globally in `~/.gitconfig` like this:
+
+```
+[url \"ssh://github.com/\"]
+        pushInsteadOf = https://github.com/
+```
+"""]]

Added a comment: my approach
diff --git a/doc/todo/ControlMaster/comment_1_c4ff57e61405d4724dd6d8cf03ecea2b._comment b/doc/todo/ControlMaster/comment_1_c4ff57e61405d4724dd6d8cf03ecea2b._comment
new file mode 100644
index 0000000..f90f28a
--- /dev/null
+++ b/doc/todo/ControlMaster/comment_1_c4ff57e61405d4724dd6d8cf03ecea2b._comment
@@ -0,0 +1,26 @@
+[[!comment format=mdwn
+ username="PaulWise"
+ avatar="http://cdn.libravatar.org/avatar/3bf5f3b29a3d68ddf11eb1a3d8c5dc65"
+ subject="my approach"
+ date="2019-10-18T04:27:19Z"
+ content="""
+I've worked to getting most of my remote repos over https instead of SSH. This is mainly because I have a prompt for each use of my SSH keys, but also helps with this problem.
+
+I'm using ControlMaster for all SSH connections, with some situations where I turn it off, and I find it works fairly well apart from the annoying race condition you mention during `mr fetch`. I use time-limited connections so I don't have SSH running forever.
+
+Instead of configuring ControlMaster for all SSH connections, you could also just configure it for the hosts that you can only use git with (I'm thinking github.com/etc).
+
+I suggest putting SSH sockets in $XDG_RUNTIME_DIR instead of HOME, so you never get stale sockets after reboot and never get backup programs looking at sockets (some do).
+
+```
+ControlMaster autoask
+ControlPath /run/user/%i/ssh-control-%l->%r@%h:%p
+ControlPersist 60
+```
+
+To be honest I'm not sure how myrepos could selectively enable ControlMaster for commands it runs. The only thing I can think of would be to modify PATH to add a script that runs the real `ssh` with additional options, but that seems pretty hacky.
+
+Either way, if ControlMaster provides very little improvement for you, adding it via myrepos instead of via the SSH config isn't going to change that.
+
+PS: I only ever do `mr -j10 fetch` and I leave updating branches to interactive shells where I can deal with any conflicts manually.
+"""]]

could multiplexing help with mr's performance?
diff --git a/doc/todo/ControlMaster.mdwn b/doc/todo/ControlMaster.mdwn
new file mode 100644
index 0000000..9660015
--- /dev/null
+++ b/doc/todo/ControlMaster.mdwn
@@ -0,0 +1,19 @@
+I have a ton of repos in my `~/.mrconfig`, so a full `mr update` takes a long time, even if parallelized. A lot of those remotes are on the same server, however, so I can't help but wonder if it would save time to enable `ControlMaster` from mr directly. I know I could set that up in my `~/.ssh/config` myself, but I'm not sure I feel comfortable setting that all for all use cases. If it would be done in mr, it could setup the multiplexer and tear it down when done...
+
+Here a full pull (`mr -j10 update`) takes:
+
+    30.39user 8.05system 1:51.04elapsed 34%CPU (0avgtext+0avgdata 73320maxresident)k
+    0inputs+15664outputs (0major+529937minor)pagefaults 0swaps
+
+One trick is that multiplexing might fail with `-j` because of a race condition that ssh doesn't seem to handle very well:
+
+    ControlSocket /home/anarcat/.ssh/control-master-747c83a00480de0860fde4d7df86be06fe25e555.sock already exists, disabling multiplexing
+
+That's with the following configuration:
+
+     ControlMaster auto
+     ControlPath ~/.ssh/control-master-%C.sock
+
+So with that configuration, there's very little improvement, unfortunately. I would bet that, however, mr could be smarter than this and dispatch stuff much better...
+
+Thanks! -- [[anarcat]]

Add gitbatch to the list of related software
diff --git a/doc/index.mdwn b/doc/index.mdwn
index 44015b1..faf5d9b 100644
--- a/doc/index.mdwn
+++ b/doc/index.mdwn
@@ -85,6 +85,7 @@ Some more examples of things it can do include:
 
 * [repo](https://android.googlesource.com/tools/repo): git repository management tool
 * [gita](https://github.com/nosarthur/gita): manage multiple git repos
+* [gitbatch](https://github.com/isacikgoz/gitbatch): manage multiple git repos in one place
 * [git-plus](https://github.com/tkrajina/git-plus) multi: run commands in multiple git repos
 * [mu-repo](https://fabioz.github.io/mu-repo/): help working with multiple git repos
 * [ghq](https://github.com/motemen/ghq): manage remote repository clones

Add silver-platter to the list of related software
diff --git a/doc/index.mdwn b/doc/index.mdwn
index 727adfb..44015b1 100644
--- a/doc/index.mdwn
+++ b/doc/index.mdwn
@@ -98,6 +98,7 @@ Some more examples of things it can do include:
 * [vcs-repo-mgr](https://github.com/xolox/python-vcs-repo-mgr): version control repository manager
 * [go-vcs](https://github.com/Masterminds/vcs): version control repository management for Golang
 * [v](https://github.com/ChristophBerg/dotfiles/blob/master/bin/v): version control subcommand wrapper
+* [silver-platter](https://www.jelmer.uk/silver-platter-intro.html): make automated changes in different version control repositories
 
 ## news
 

Fix markdown formatting typo: ] -> )
diff --git a/doc/index.mdwn b/doc/index.mdwn
index 6478136..727adfb 100644
--- a/doc/index.mdwn
+++ b/doc/index.mdwn
@@ -85,7 +85,7 @@ Some more examples of things it can do include:
 
 * [repo](https://android.googlesource.com/tools/repo): git repository management tool
 * [gita](https://github.com/nosarthur/gita): manage multiple git repos
-* [git-plus](https://github.com/tkrajina/git-plus] multi: run commands in multiple git repos
+* [git-plus](https://github.com/tkrajina/git-plus) multi: run commands in multiple git repos
 * [mu-repo](https://fabioz.github.io/mu-repo/): help working with multiple git repos
 * [ghq](https://github.com/motemen/ghq): manage remote repository clones
 * [uncommitted](https://github.com/brandon-rhodes/uncommitted): find uncommitted changes in VCS directories

Added a comment: re: Allow symlinked directories
diff --git a/doc/todo/Allow_symlinked_directories/comment_4_bcdf040e86967750fb2132ce3d9e1565._comment b/doc/todo/Allow_symlinked_directories/comment_4_bcdf040e86967750fb2132ce3d9e1565._comment
new file mode 100644
index 0000000..2bf86e0
--- /dev/null
+++ b/doc/todo/Allow_symlinked_directories/comment_4_bcdf040e86967750fb2132ce3d9e1565._comment
@@ -0,0 +1,21 @@
+[[!comment format=mdwn
+ username="terrynbrown@5ea87878c9b9b78c5042c1c99c2bd387a2703633"
+ nickname="terrynbrown"
+ avatar="http://cdn.libravatar.org/avatar/870687a83f99c5885a6ac18bff762f28"
+ subject="re: Allow symlinked directories "
+ date="2019-02-12T19:07:47Z"
+ content="""
+I made a wrapper <https://github.com/tbnorth/mrls> to handle symlinks, it
+analyses ~/.mrconfig and generates output like:
+
+    N=47  mr -d /mnt/edata
+    N=2   mr -d /mnt/usr1
+    snnm pypanart drifters
+
+the first two lines being mr commands pointing to specific absolute paths
+you can copy paste to run on the relevant devices.
+
+The third line is a list of groups, I ended up adding the ability to define
+groups of repos. to manage together :-}
+
+"""]]

Add ghq to related software
This was discovered by anarcat.
diff --git a/doc/index.mdwn b/doc/index.mdwn
index e5709b3..6478136 100644
--- a/doc/index.mdwn
+++ b/doc/index.mdwn
@@ -87,6 +87,7 @@ Some more examples of things it can do include:
 * [gita](https://github.com/nosarthur/gita): manage multiple git repos
 * [git-plus](https://github.com/tkrajina/git-plus] multi: run commands in multiple git repos
 * [mu-repo](https://fabioz.github.io/mu-repo/): help working with multiple git repos
+* [ghq](https://github.com/motemen/ghq): manage remote repository clones
 * [uncommitted](https://github.com/brandon-rhodes/uncommitted): find uncommitted changes in VCS directories
 * [kas](https://github.com/siemens/kas): bitbake repository management tool
 * [VCS](http://www.greenend.org.uk/rjk/vcs/): a wrapper for version control systems

Added a comment: Symlinked Repos
diff --git a/doc/todo/Allow_symlinked_directories/comment_3_d8125cd41b5dc0726cac967dc324cafd._comment b/doc/todo/Allow_symlinked_directories/comment_3_d8125cd41b5dc0726cac967dc324cafd._comment
new file mode 100644
index 0000000..cbe7296
--- /dev/null
+++ b/doc/todo/Allow_symlinked_directories/comment_3_d8125cd41b5dc0726cac967dc324cafd._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="mforbes"
+ avatar="http://cdn.libravatar.org/avatar/e497ff9efad76394e98daa506ebc8fef"
+ subject="Symlinked Repos"
+ date="2019-02-08T19:22:34Z"
+ content="""
+Any Perl guru's able to fix this an allow symlinks to work again?
+"""]]

Add git-plus multi, mu-repo, uncommitted, wstool to related software
These were all discovered in the discussion about gita.
Discussion: https://news.ycombinator.com/item?id=19074170
diff --git a/doc/index.mdwn b/doc/index.mdwn
index 285d20e..e5709b3 100644
--- a/doc/index.mdwn
+++ b/doc/index.mdwn
@@ -85,11 +85,15 @@ Some more examples of things it can do include:
 
 * [repo](https://android.googlesource.com/tools/repo): git repository management tool
 * [gita](https://github.com/nosarthur/gita): manage multiple git repos
+* [git-plus](https://github.com/tkrajina/git-plus] multi: run commands in multiple git repos
+* [mu-repo](https://fabioz.github.io/mu-repo/): help working with multiple git repos
+* [uncommitted](https://github.com/brandon-rhodes/uncommitted): find uncommitted changes in VCS directories
 * [kas](https://github.com/siemens/kas): bitbake repository management tool
 * [VCS](http://www.greenend.org.uk/rjk/vcs/): a wrapper for version control systems
 * [vcstool](https://github.com/dirk-thomas/vcstool): work with multiple repositories
 * [vcstools](https://github.com/vcstools/vcstools): Python API wrapping version control systems
 * [rosinstall](https://github.com/vcstools/rosinstall): source code workspace management tool
+* [wstool](https://github.com/vcstools/wstool): maintain workspace of projects from multiple VCSes
 * [vcs-repo-mgr](https://github.com/xolox/python-vcs-repo-mgr): version control repository manager
 * [go-vcs](https://github.com/Masterminds/vcs): version control repository management for Golang
 * [v](https://github.com/ChristophBerg/dotfiles/blob/master/bin/v): version control subcommand wrapper

Add link to gita for managing multiple git repositories
Discussion: https://news.ycombinator.com/item?id=19074170
diff --git a/doc/index.mdwn b/doc/index.mdwn
index a54ae73..285d20e 100644
--- a/doc/index.mdwn
+++ b/doc/index.mdwn
@@ -84,6 +84,7 @@ Some more examples of things it can do include:
 ## related software
 
 * [repo](https://android.googlesource.com/tools/repo): git repository management tool
+* [gita](https://github.com/nosarthur/gita): manage multiple git repos
 * [kas](https://github.com/siemens/kas): bitbake repository management tool
 * [VCS](http://www.greenend.org.uk/rjk/vcs/): a wrapper for version control systems
 * [vcstool](https://github.com/dirk-thomas/vcstool): work with multiple repositories

Added a comment: process a repository before anything else
diff --git a/doc/todo/config___39__order__39___is_ignored_when___39__jobs__39_____62__1/comment_4_b37c8216ed51d9b64f78b7a7d629efa6._comment b/doc/todo/config___39__order__39___is_ignored_when___39__jobs__39_____62__1/comment_4_b37c8216ed51d9b64f78b7a7d629efa6._comment
new file mode 100644
index 0000000..e3fa8a4
--- /dev/null
+++ b/doc/todo/config___39__order__39___is_ignored_when___39__jobs__39_____62__1/comment_4_b37c8216ed51d9b64f78b7a7d629efa6._comment
@@ -0,0 +1,25 @@
+[[!comment format=mdwn
+ username="https://ao2.it/"
+ nickname="ao2"
+ avatar="http://cdn.libravatar.org/avatar/fe977073a31737b41b0ad0df63c0fba3972c817fdda57399e6d1880eb7194beb"
+ subject="process a repository before anything else"
+ date="2019-01-24T22:06:37Z"
+ content="""
+Hi,
+
+I too experienced this issue with `order` an `jobs`, but in my case I wanted
+to process one specific repository (the vcsh one with `order=1`) **before**
+all the others.
+
+The specific case I wanted to cover is when the main vcsh repository has some
+updated hooks, so I want it to be updated before updating or cloning all the
+other repositories managed by vcsh.
+
+The idea of having some value of `order` mean \"*first*\" or \"*last*\", and
+serialize the repositories which use them outside of the multi-processing
+dispatch is tempting.
+
+Ciao,
+   Antonio
+
+"""]]

Mention Myon's v script
diff --git a/doc/index.mdwn b/doc/index.mdwn
index 22a6f7c..a54ae73 100644
--- a/doc/index.mdwn
+++ b/doc/index.mdwn
@@ -91,6 +91,7 @@ Some more examples of things it can do include:
 * [rosinstall](https://github.com/vcstools/rosinstall): source code workspace management tool
 * [vcs-repo-mgr](https://github.com/xolox/python-vcs-repo-mgr): version control repository manager
 * [go-vcs](https://github.com/Masterminds/vcs): version control repository management for Golang
+* [v](https://github.com/ChristophBerg/dotfiles/blob/master/bin/v): version control subcommand wrapper
 
 ## news
 

fix formatting
diff --git a/doc/todo/config___39__order__39___is_ignored_when___39__jobs__39_____62__1.mdwn b/doc/todo/config___39__order__39___is_ignored_when___39__jobs__39_____62__1.mdwn
index 8ecdea1..3a3a64a 100644
--- a/doc/todo/config___39__order__39___is_ignored_when___39__jobs__39_____62__1.mdwn
+++ b/doc/todo/config___39__order__39___is_ignored_when___39__jobs__39_____62__1.mdwn
@@ -1,14 +1,12 @@
 I'm attempting to implement a *dummy* target as illustrated in [mrconfig.complex](https://github.com/joeyh/myrepos/blob/master/mrconfig.complex) to run fixups after all updates have been completed:
 
-```
-[tmp]
-# This is a dummy target, all it does is run fixups at the end of
-# an update.
-fixups = $HOME/bin/fixups
-checkout = mkdir -p $HOME/tmp
-status = :
-order = 25
-```
+    [tmp]
+    # This is a dummy target, all it does is run fixups at the end of
+    # an update.
+    fixups = $HOME/bin/fixups
+    checkout = mkdir -p $HOME/tmp
+    status = :
+    order = 25
 
 1. After adding the above section to my .mrconfig, I received the following error message when executing `mr up`:
 > **mr update: unknown repository type and no defined update command for /Users/tom/tmp**

Added a comment: not possible yet
diff --git a/doc/todo/Make_mr_status_or_git__95__status_for_that_matter_have_minimal_set_by_default_through_.mrconfig/comment_1_f312541b567210f46f6ee109002d9135._comment b/doc/todo/Make_mr_status_or_git__95__status_for_that_matter_have_minimal_set_by_default_through_.mrconfig/comment_1_f312541b567210f46f6ee109002d9135._comment
new file mode 100644
index 0000000..a1578e0
--- /dev/null
+++ b/doc/todo/Make_mr_status_or_git__95__status_for_that_matter_have_minimal_set_by_default_through_.mrconfig/comment_1_f312541b567210f46f6ee109002d9135._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="PaulWise"
+ avatar="http://cdn.libravatar.org/avatar/3bf5f3b29a3d68ddf11eb1a3d8c5dc65"
+ subject="not possible yet"
+ date="2018-11-12T01:37:47Z"
+ content="""
+This isn't possible at this time, the mr command-line options are only able to be set on the command-line.
+
+The minimal option is implemented in mr, not in the *_status values that specify commands. It works by supervising the output of the commands and only printing the mr parts of the output when there is command output or errors.
+
+I can see that this idea would definitely be useful to some folks.
+
+I think any implementation of this idea probably should have these features:
+
+* allow replacing, prepending, appending and setting the default options like the other value setting mechanisms do, for maximum flexibility in setting up the options
+* allow setting the options in the DEFAULT section or in any of the repository sections, to allow setting them on a per-repository basis
+* allow setting the options differently for each command type and each repository type, for maximum flexibility
+* add options for turning off options (like --no-minimal), so that there is more flexibility about when to turn them on/off
+* *only* allow setting a whitelisted set of *safe* options, so that this doesn't cause any security issues
+"""]]

close due to user error
diff --git a/doc/todo/mr_will_not_clone_to___47__opt.mdwn b/doc/todo/mr_will_not_clone_to___47__opt.mdwn
index 5a0caf6..5bf9b93 100644
--- a/doc/todo/mr_will_not_clone_to___47__opt.mdwn
+++ b/doc/todo/mr_will_not_clone_to___47__opt.mdwn
@@ -23,3 +23,4 @@ From my reading of the **mrconfig.complex** example configuration file, there sh
 
 *I'm certain I've overlooked something rather simple--please help. Thanks!*
 
+[[done]] --pabs: user error

Added a comment: cd / && mr up
diff --git a/doc/todo/mr_will_not_clone_to___47__opt/comment_3_86879f5d33417fc0edacff4cca0dfe68._comment b/doc/todo/mr_will_not_clone_to___47__opt/comment_3_86879f5d33417fc0edacff4cca0dfe68._comment
new file mode 100644
index 0000000..1dc41cc
--- /dev/null
+++ b/doc/todo/mr_will_not_clone_to___47__opt/comment_3_86879f5d33417fc0edacff4cca0dfe68._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="Tom"
+ avatar="http://cdn.libravatar.org/avatar/a39876f3fdeb0295ec9258bbb1b37f88"
+ subject="cd / && mr up"
+ date="2018-11-11T23:38:03Z"
+ content="""
+--->  In order to operate on /opt, you would first need to cd /  <---
+
+Thanks! I knew it had to be something simple. I was under the faulty assumption the absolute path in `[/opt]` would cause it to work when executing from my home directory.
+"""]]

Added a comment: works for me
diff --git a/doc/todo/mr_will_not_clone_to___47__opt/comment_2_96e6d884b69df6a55a549ce6a1a97b9b._comment b/doc/todo/mr_will_not_clone_to___47__opt/comment_2_96e6d884b69df6a55a549ce6a1a97b9b._comment
new file mode 100644
index 0000000..102c2fa
--- /dev/null
+++ b/doc/todo/mr_will_not_clone_to___47__opt/comment_2_96e6d884b69df6a55a549ce6a1a97b9b._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="PaulWise"
+ avatar="http://cdn.libravatar.org/avatar/3bf5f3b29a3d68ddf11eb1a3d8c5dc65"
+ subject="works for me"
+ date="2018-11-11T07:51:39Z"
+ content="""
+I tried this in a chroot and it works for me.
+
+Which directory are you running `mr up` etc from?
+"""]]

Added a comment
diff --git a/doc/todo/mr_will_not_clone_to___47__opt/comment_1_6eac2a8a4470ec8794282cc8777f7537._comment b/doc/todo/mr_will_not_clone_to___47__opt/comment_1_6eac2a8a4470ec8794282cc8777f7537._comment
new file mode 100644
index 0000000..6734ebb
--- /dev/null
+++ b/doc/todo/mr_will_not_clone_to___47__opt/comment_1_6eac2a8a4470ec8794282cc8777f7537._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ avatar="http://cdn.libravatar.org/avatar/9c3f08f80e67733fd506c353239569eb"
+ subject="comment 1"
+ date="2018-11-08T20:55:36Z"
+ content="""
+In order to operate on `/opt`, you would first need to `cd /`.
+"""]]

diff --git a/doc/todo/mr_will_not_clone_to___47__opt.mdwn b/doc/todo/mr_will_not_clone_to___47__opt.mdwn
new file mode 100644
index 0000000..5a0caf6
--- /dev/null
+++ b/doc/todo/mr_will_not_clone_to___47__opt.mdwn
@@ -0,0 +1,25 @@
+##Possible Bug
+
+I've been using mr to manage dozens of git repos for many years (most live in my home directory). Today, I ran into something that didn't work. I had decided to manage `/opt` in a git repo, and I added the following configuration lines:
+
+    [/opt]
+    checkout = git clone 'https://github.com/tomhoover/docker-compose.git' 'opt'
+    skip = ! test "$(whoami)" = root
+    fixups = chmod 755 /opt
+
+Running `mr up` didn't do anything (nor even list the `/opt` repo within its output--it acted as if it had been skipped), so I deleted the `skip` line above and tried again--still a no-go.
+
+ All of the above was attempted while logged in as **root**, and I verified the **/opt** directory did not already exist.
+
+##Additional info
+To verify git was working properly, I executed `git clone 'https://github.com/tomhoover/docker-compose.git' 'opt' && chmod 755 /opt` from **/**, as **root**, and it worked as expected. After manually cloning the repo into **/opt**, I attemped `mr up`, `mr push`, etc; however, mr continues to ignore the **/opt** git repo.
+
+From my reading of the **mrconfig.complex** example configuration file, there should be nothing preventing a repo from living at **/**, as the following example is included:
+
+    [/etc]
+    # I use etckeeper to keep /etc in git. But it only works if I'm root, 
+    # and if it's not already in etc, skip it.
+    skip = ! test -d /etc/.git || ! test "$(whoami)" = root
+
+*I'm certain I've overlooked something rather simple--please help. Thanks!*
+

paths stored are relative to HOME but printed as absolute
diff --git a/doc/todo/Unregister_and_Delete_command.mdwn b/doc/todo/Unregister_and_Delete_command.mdwn
index 1b8a34d..2b8ba2f 100644
--- a/doc/todo/Unregister_and_Delete_command.mdwn
+++ b/doc/todo/Unregister_and_Delete_command.mdwn
@@ -5,9 +5,10 @@ I found this script pretty useful but lacking some basic commands for cleanup li
 I've added the following definitions in my ~/.mrconfig file:
 
     [DEFAULT]
+    # Teach mr how to `mr gc` in git repos.
     git_gc = git gc "$@"
-    unregister = sed -i "\|${PWD}|,+2 d" ${MR_CONFIG}
-    delete = rm -rI "$@" "$PWD" && sed -i "\|${PWD}|,+2 d" ${MR_CONFIG}
+    unregister = sed -i "\|${PWD//${HOME}\//}|,+2 d" ${MR_CONFIG}
+    delete = rm -rI "$@" "$PWD" && sed -i "\|${PWD//${HOME}\//}|,+2 d" ${MR_CONFIG}
 
 While the first command is an example in the documentation the other two basically iterate over available repos in "mr ls" to either just remove the entry lines from mrconfig file (mr unregister) or delete existing directory with confirmations (mr delete) and then unregister, you can force using (mr delete -f)
 

paths stored are relative to HOME but printed as absolute
diff --git a/doc/todo/Unregister_and_Delete_command.mdwn b/doc/todo/Unregister_and_Delete_command.mdwn
index 7f5d6cb..1b8a34d 100644
--- a/doc/todo/Unregister_and_Delete_command.mdwn
+++ b/doc/todo/Unregister_and_Delete_command.mdwn
@@ -16,7 +16,7 @@ I also had the situation that some repositories were already deleted and so "mr
 I've applied the following workaround:
 
     repo_list=$(mr ls 2>&1 | grep "failed to chdir to" | egrep -o "/.*:" | sed "s|/:||" | sed "s|${HOME}/||")
-    for repo in ${repo_list}; do
+    for repo in ${repo_list//${HOME}\//}; do
         sed -i "\|${repo}|,+2 d" ~/.mrconfig
     done
 

Added a comment: Alternative Sorting Method with GAWK
diff --git a/doc/todo/sorted_.mrconfig/comment_1_fe128f2a8f16438b9e5b48fcfaf0c47b._comment b/doc/todo/sorted_.mrconfig/comment_1_fe128f2a8f16438b9e5b48fcfaf0c47b._comment
new file mode 100644
index 0000000..700a40e
--- /dev/null
+++ b/doc/todo/sorted_.mrconfig/comment_1_fe128f2a8f16438b9e5b48fcfaf0c47b._comment
@@ -0,0 +1,27 @@
+[[!comment format=mdwn
+ username="hello@ba09c8bb59ae91163b65dfbd0b66e3f1cc450ffe"
+ nickname="hello"
+ avatar="http://cdn.libravatar.org/avatar/0846020203474ffe096f5cbd58cc98d5"
+ subject="Alternative Sorting Method with GAWK"
+ date="2018-10-01T23:51:42Z"
+ content="""
+I am by no way a command line expert, but I was unable to get the sort-ini method to work for me so I looked into generalized sorting by pattern and came across a site that had an example that was pretty close to what I needed.
+
+A couple of paragraphs down the original example is labeled \"Robbins' awk based shell pipeline\"
+ 
+http://homepage.smc.edu/morgan_david/linadmin/labs/sort-multiline-blocks.htm
+
+From there I came to this
+
+```
+gawk -v RS=\"\" '{ gsub(\"\n\", \"###\"); print }' .mrconfig | sort -f | gawk -v ORS=\"\n\n\" '{ gsub(\"###\", \"\n\"); print }' > .mrconfig.tmp && mv .mrconfig.tmp .mrconfig
+```
+
+The `###` is my temp replacement for the newline so that sort can be used, at which point it is returned to a newline. I had trouble with the `^Z` characters in the example. 
+
+Which I then set up as an alias
+
+```
+alias mrsort=\"gawk -v RS=\\"\\" '{ gsub(\\"\n\\", \\"###\\"); print }' .mrconfig | sort -f | gawk -v ORS=\\"\n\n\\" '{ gsub(\\"###\\", \\"\n\\"); print }' > .mrconfig.tmp && mv .mrconfig.tmp .mrconfig\"
+```
+"""]]

diff --git a/doc/todo/Make_mr_status_or_git__95__status_for_that_matter_have_minimal_set_by_default_through_.mrconfig.mdwn b/doc/todo/Make_mr_status_or_git__95__status_for_that_matter_have_minimal_set_by_default_through_.mrconfig.mdwn
index b9f6692..4b83542 100644
--- a/doc/todo/Make_mr_status_or_git__95__status_for_that_matter_have_minimal_set_by_default_through_.mrconfig.mdwn
+++ b/doc/todo/Make_mr_status_or_git__95__status_for_that_matter_have_minimal_set_by_default_through_.mrconfig.mdwn
@@ -1 +1,2 @@
 as the title states, I would like mr status to be --minimal by default, is there a way to change it in .mrconfig?
+for now I made a bash alias but thats not very satisfying.

diff --git a/doc/todo/Make_mr_status_or_git__95__status_for_that_matter_have_minimal_set_by_default_through_.mrconfig.mdwn b/doc/todo/Make_mr_status_or_git__95__status_for_that_matter_have_minimal_set_by_default_through_.mrconfig.mdwn
new file mode 100644
index 0000000..b9f6692
--- /dev/null
+++ b/doc/todo/Make_mr_status_or_git__95__status_for_that_matter_have_minimal_set_by_default_through_.mrconfig.mdwn
@@ -0,0 +1 @@
+as the title states, I would like mr status to be --minimal by default, is there a way to change it in .mrconfig?

Added a comment: Encountering the same error on WSL
diff --git a/doc/todo/Issues_with_Bash_on_Windows/comment_3_bc3997375a543f4c6126ec1c93efc762._comment b/doc/todo/Issues_with_Bash_on_Windows/comment_3_bc3997375a543f4c6126ec1c93efc762._comment
new file mode 100644
index 0000000..efb6df1
--- /dev/null
+++ b/doc/todo/Issues_with_Bash_on_Windows/comment_3_bc3997375a543f4c6126ec1c93efc762._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="tobias.brandt@7743a4214ef91db7c3e3a7e80d8553e8725dc92c"
+ nickname="tobias.brandt"
+ avatar="http://cdn.libravatar.org/avatar/d8aec090bed3518ebcb66c2063dbdf0b"
+ subject="Encountering the same error on WSL"
+ date="2018-08-19T16:25:34Z"
+ content="""
+I hit the same error just now on WSL. Still getting the 127 error as I'm using Ubuntu 16.04 package version of mr.
+"""]]

removed
diff --git a/doc/todo/Issues_with_Bash_on_Windows/comment_3_a129e65e7b3b9512a173d6550a64cad4._comment b/doc/todo/Issues_with_Bash_on_Windows/comment_3_a129e65e7b3b9512a173d6550a64cad4._comment
deleted file mode 100644
index b473db0..0000000
--- a/doc/todo/Issues_with_Bash_on_Windows/comment_3_a129e65e7b3b9512a173d6550a64cad4._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="tobias.brandt@7743a4214ef91db7c3e3a7e80d8553e8725dc92c"
- nickname="tobias.brandt"
- avatar="http://cdn.libravatar.org/avatar/d8aec090bed3518ebcb66c2063dbdf0b"
- subject="Encountering the same error"
- date="2018-08-19T16:23:50Z"
- content="""
-I hit the same error just now. Still getting the 127 error as I'm using Ubuntu 16.04 package version of `mr`.
-
-"""]]

Added a comment: Encountering the same error
diff --git a/doc/todo/Issues_with_Bash_on_Windows/comment_3_a129e65e7b3b9512a173d6550a64cad4._comment b/doc/todo/Issues_with_Bash_on_Windows/comment_3_a129e65e7b3b9512a173d6550a64cad4._comment
new file mode 100644
index 0000000..b473db0
--- /dev/null
+++ b/doc/todo/Issues_with_Bash_on_Windows/comment_3_a129e65e7b3b9512a173d6550a64cad4._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="tobias.brandt@7743a4214ef91db7c3e3a7e80d8553e8725dc92c"
+ nickname="tobias.brandt"
+ avatar="http://cdn.libravatar.org/avatar/d8aec090bed3518ebcb66c2063dbdf0b"
+ subject="Encountering the same error"
+ date="2018-08-19T16:23:50Z"
+ content="""
+I hit the same error just now. Still getting the 127 error as I'm using Ubuntu 16.04 package version of `mr`.
+
+"""]]

Removed quotes
diff --git a/doc/todo/Issues_with_Bash_on_Windows.mdwn b/doc/todo/Issues_with_Bash_on_Windows.mdwn
index 614c862..7580bdc 100644
--- a/doc/todo/Issues_with_Bash_on_Windows.mdwn
+++ b/doc/todo/Issues_with_Bash_on_Windows.mdwn
@@ -12,5 +12,3 @@ mr s: received signal 127
 The status action does not cover a number of my repos, it just stops at the first repo.
 
 I have installed `mr` via `sudo apt-get install mr`.
-```
-

Removed my comment which I had put in the wrong place.
diff --git a/doc/todo/Issues_with_Bash_on_Windows.mdwn b/doc/todo/Issues_with_Bash_on_Windows.mdwn
index d3b96c8..614c862 100644
--- a/doc/todo/Issues_with_Bash_on_Windows.mdwn
+++ b/doc/todo/Issues_with_Bash_on_Windows.mdwn
@@ -13,4 +13,4 @@ The status action does not cover a number of my repos, it just stops at the firs
 
 I have installed `mr` via `sudo apt-get install mr`.
 ```
-I hit the same error just now. Still getting the 127 error as I'm using Ubuntu 16.04 package version of `mr`.
+

diff --git a/doc/todo/Issues_with_Bash_on_Windows.mdwn b/doc/todo/Issues_with_Bash_on_Windows.mdwn
index 7580bdc..d3b96c8 100644
--- a/doc/todo/Issues_with_Bash_on_Windows.mdwn
+++ b/doc/todo/Issues_with_Bash_on_Windows.mdwn
@@ -12,3 +12,5 @@ mr s: received signal 127
 The status action does not cover a number of my repos, it just stops at the first repo.
 
 I have installed `mr` via `sudo apt-get install mr`.
+```
+I hit the same error just now. Still getting the 127 error as I'm using Ubuntu 16.04 package version of `mr`.

Added a comment
diff --git a/doc/todo/Add_gbp_support/comment_4_d019df93d0e6d1582ddb79e2369c8dbf._comment b/doc/todo/Add_gbp_support/comment_4_d019df93d0e6d1582ddb79e2369c8dbf._comment
new file mode 100644
index 0000000..2c1c307
--- /dev/null
+++ b/doc/todo/Add_gbp_support/comment_4_d019df93d0e6d1582ddb79e2369c8dbf._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ avatar="http://cdn.libravatar.org/avatar/9c3f08f80e67733fd506c353239569eb"
+ subject="comment 4"
+ date="2018-08-10T11:31:13Z"
+ content="""
+Since this would likely be a one-off, you could just use `mr run`.
+"""]]

removed
diff --git a/doc/todo/Add_gbp_support/comment_4_a8f3e9ec8ff05b186838342af2b528b9._comment b/doc/todo/Add_gbp_support/comment_4_a8f3e9ec8ff05b186838342af2b528b9._comment
deleted file mode 100644
index 0b8e272..0000000
--- a/doc/todo/Add_gbp_support/comment_4_a8f3e9ec8ff05b186838342af2b528b9._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="spwhitton"
- avatar="http://cdn.libravatar.org/avatar/9c3f08f80e67733fd506c353239569eb"
- subject="comment 4"
- date="2018-08-10T11:30:40Z"
- content="""
-You can just use `mr run` in such a case.
-"""]]

Added a comment
diff --git a/doc/todo/Add_gbp_support/comment_4_a8f3e9ec8ff05b186838342af2b528b9._comment b/doc/todo/Add_gbp_support/comment_4_a8f3e9ec8ff05b186838342af2b528b9._comment
new file mode 100644
index 0000000..0b8e272
--- /dev/null
+++ b/doc/todo/Add_gbp_support/comment_4_a8f3e9ec8ff05b186838342af2b528b9._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ avatar="http://cdn.libravatar.org/avatar/9c3f08f80e67733fd506c353239569eb"
+ subject="comment 4"
+ date="2018-08-10T11:30:40Z"
+ content="""
+You can just use `mr run` in such a case.
+"""]]

releasing package myrepos version 1.20180726
diff --git a/debian/changelog b/debian/changelog
index 24f767d..2d2744c 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,35 @@
+myrepos (1.20180726) unstable; urgency=medium
+
+  [ Andrew Bradford ]
+  * Suggest perl-doc (Closes: #813738)
+
+  [ Mark Haber ]
+  * Fix hours_since for git fake bare repos (Closes: #828827)
+
+  [ Tom Hoover ]
+  * Fix 'no defined update command error' in example config
+
+  [ Pavel Nakonechnyi ]
+  * More meaningful names for temporary files
+
+  [ Paul Wise ]
+  * Mitigate vulns caused by git code execution (Closes: #840014, CVE-2018-7032)
+  * Migrate from ack-grep to ack (Closes: #849600)
+  * More reliable output supervision
+  * Allow prepending commands to existing commands
+  * Allow for fallback to default commands
+  * Add support for caching command output
+  * Add graph, remote, upgrade extensions
+  * Improve the status output for CVS
+  * Improve the git-cvs extension
+  * Add shell extension to maintain a repo status cache
+  * git registration improvements
+  * webcheckout: prefer https transport
+  * Suggest more tools that are used
+  * Various packaging cleanups
+
+ -- Paul Wise <pabs@debian.org>  Thu, 26 Jul 2018 14:14:21 +0800
+
 myrepos (1.20171231) unstable; urgency=medium
 
   [ Joey Hess ]
diff --git a/doc/news/version_1.20180726.mdwn b/doc/news/version_1.20180726.mdwn
new file mode 100644
index 0000000..734c6dc
--- /dev/null
+++ b/doc/news/version_1.20180726.mdwn
@@ -0,0 +1,24 @@
+myrepos 1.20180726 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * [ Mark Haber ]
+   * Fix hours_since for git fake bare repos
+
+ * [ Tom Hoover ]
+   * Fix 'no defined update command error' in example config
+
+ * [ Pavel Nakonechnyi ]
+   * More meaningful names for temporary files
+
+ * [ Paul Wise ]
+   * Mitigate vulns caused by git code execution (CVE-2018-7032)
+   * Migrate from ack-grep to ack
+   * More reliable output supervision
+   * Improve the status output for CVS
+   * Improve the git-cvs extension
+   * Allow prepending commands to existing commands
+   * Allow for fallback to default commands
+   * Add support for caching command output
+   * Add shell extension to maintain a repo status cache
+   * Add graph, remote, upgrade extensions
+   * git registration improvements
+   * webcheckout: prefer https transport"""]]

Added a comment: similar changes across multiple repos?
diff --git a/doc/todo/Add_gbp_support/comment_3_a9bb97e5bbdff3771edcdf51f2eb1dfb._comment b/doc/todo/Add_gbp_support/comment_3_a9bb97e5bbdff3771edcdf51f2eb1dfb._comment
new file mode 100644
index 0000000..dfacc99
--- /dev/null
+++ b/doc/todo/Add_gbp_support/comment_3_a9bb97e5bbdff3771edcdf51f2eb1dfb._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="PaulWise"
+ avatar="http://cdn.libravatar.org/avatar/3bf5f3b29a3d68ddf11eb1a3d8c5dc65"
+ subject="similar changes across multiple repos?"
+ date="2018-07-24T09:45:56Z"
+ content="""
+Would it make sense to run `gbp dch` on multiple repos after making a change using sed or another automated mechanism?
+"""]]

Switch to the Repology packages page instead of the versions page
The packages page includes more links than just the main page.
diff --git a/doc/todo.mdwn b/doc/todo.mdwn
index 43f73be..7f3b380 100644
--- a/doc/todo.mdwn
+++ b/doc/todo.mdwn
@@ -19,7 +19,7 @@ See also:
 [MacPorts](https://github.com/macports/macports-ports/tree/master/devel/myrepos),
 [Homebrew](https://github.com/Homebrew/homebrew-core/blob/master/Formula/mr.rb),
 [Linuxbrew](https://github.com/Linuxbrew/homebrew-core/blob/master/Formula/mr.rb),
-[Repology](https://repology.org/metapackage/myrepos/versions).
+[Repology](https://repology.org/metapackage/myrepos/packages).
 
 [[!inline pages="./todo/* and !./todo/done and !link(done)
 and !*/Discussion" actions=yes postform=yes show=0 archive=yes]]

Remove Repology mr link
Repology has removed the mr metapackage and
added all the mr packages to the myrepos metapackage.
diff --git a/doc/todo.mdwn b/doc/todo.mdwn
index 5d6970f..43f73be 100644
--- a/doc/todo.mdwn
+++ b/doc/todo.mdwn
@@ -19,9 +19,7 @@ See also:
 [MacPorts](https://github.com/macports/macports-ports/tree/master/devel/myrepos),
 [Homebrew](https://github.com/Homebrew/homebrew-core/blob/master/Formula/mr.rb),
 [Linuxbrew](https://github.com/Linuxbrew/homebrew-core/blob/master/Formula/mr.rb),
-Repology
-([myrepos](https://repology.org/metapackage/myrepos/versions),
-[mr](https://repology.org/metapackage/mr/versions])).
+[Repology](https://repology.org/metapackage/myrepos/versions).
 
 [[!inline pages="./todo/* and !./todo/done and !link(done)
 and !*/Discussion" actions=yes postform=yes show=0 archive=yes]]

diff --git a/doc/todo/Unregister_and_Delete_command.mdwn b/doc/todo/Unregister_and_Delete_command.mdwn
index 472e3e1..7f5d6cb 100644
--- a/doc/todo/Unregister_and_Delete_command.mdwn
+++ b/doc/todo/Unregister_and_Delete_command.mdwn
@@ -15,7 +15,7 @@ While the first command is an example in the documentation the other two basical
 I also had the situation that some repositories were already deleted and so "mr unregister" would fail because it could not "change to directory".
 I've applied the following workaround:
 
-    repo_list=$(mr ls 2>&1 | grep "failed to chdir to" | egrep -o '/.*:' | sed s'|/:||')
+    repo_list=$(mr ls 2>&1 | grep "failed to chdir to" | egrep -o "/.*:" | sed "s|/:||" | sed "s|${HOME}/||")
     for repo in ${repo_list}; do
         sed -i "\|${repo}|,+2 d" ~/.mrconfig
     done

diff --git a/doc/todo/Unregister_and_Delete_command.mdwn b/doc/todo/Unregister_and_Delete_command.mdwn
index af2a664..472e3e1 100644
--- a/doc/todo/Unregister_and_Delete_command.mdwn
+++ b/doc/todo/Unregister_and_Delete_command.mdwn
@@ -15,7 +15,7 @@ While the first command is an example in the documentation the other two basical
 I also had the situation that some repositories were already deleted and so "mr unregister" would fail because it could not "change to directory".
 I've applied the following workaround:
 
-    repo_list=$(mr ls 2>&1 | egrep -o '/.*:' | sed s'|/:||')
+    repo_list=$(mr ls 2>&1 | grep "failed to chdir to" | egrep -o '/.*:' | sed s'|/:||')
     for repo in ${repo_list}; do
         sed -i "\|${repo}|,+2 d" ~/.mrconfig
     done

diff --git a/doc/todo/Unregister_and_Delete_command.mdwn b/doc/todo/Unregister_and_Delete_command.mdwn
index 009e36a..af2a664 100644
--- a/doc/todo/Unregister_and_Delete_command.mdwn
+++ b/doc/todo/Unregister_and_Delete_command.mdwn
@@ -3,6 +3,7 @@ I found this script pretty useful but lacking some basic commands for cleanup li
 
 ## Settings in ~/.mrconfig
 I've added the following definitions in my ~/.mrconfig file:
+
     [DEFAULT]
     git_gc = git gc "$@"
     unregister = sed -i "\|${PWD}|,+2 d" ${MR_CONFIG}
@@ -13,6 +14,7 @@ While the first command is an example in the documentation the other two basical
 ## Unregister repos already deleted
 I also had the situation that some repositories were already deleted and so "mr unregister" would fail because it could not "change to directory".
 I've applied the following workaround:
+
     repo_list=$(mr ls 2>&1 | egrep -o '/.*:' | sed s'|/:||')
     for repo in ${repo_list}; do
         sed -i "\|${repo}|,+2 d" ~/.mrconfig

diff --git a/doc/todo/Unregister_and_Delete_command.mdwn b/doc/todo/Unregister_and_Delete_command.mdwn
new file mode 100644
index 0000000..009e36a
--- /dev/null
+++ b/doc/todo/Unregister_and_Delete_command.mdwn
@@ -0,0 +1,21 @@
+# Overview
+I found this script pretty useful but lacking some basic commands for cleanup like "unregister" or "delete" existing repos, so I decided to try to make my own using the DEFAULT aliases in config file.
+
+## Settings in ~/.mrconfig
+I've added the following definitions in my ~/.mrconfig file:
+    [DEFAULT]
+    git_gc = git gc "$@"
+    unregister = sed -i "\|${PWD}|,+2 d" ${MR_CONFIG}
+    delete = rm -rI "$@" "$PWD" && sed -i "\|${PWD}|,+2 d" ${MR_CONFIG}
+
+While the first command is an example in the documentation the other two basically iterate over available repos in "mr ls" to either just remove the entry lines from mrconfig file (mr unregister) or delete existing directory with confirmations (mr delete) and then unregister, you can force using (mr delete -f)
+
+## Unregister repos already deleted
+I also had the situation that some repositories were already deleted and so "mr unregister" would fail because it could not "change to directory".
+I've applied the following workaround:
+    repo_list=$(mr ls 2>&1 | egrep -o '/.*:' | sed s'|/:||')
+    for repo in ${repo_list}; do
+        sed -i "\|${repo}|,+2 d" ~/.mrconfig
+    done
+
+I hope this helps other users and hopefully, the new commands will get into the default release eventually.

Added a comment
diff --git a/doc/todo/Add_gbp_support/comment_2_bbe3beff9631f4862b889c7f7f665e4b._comment b/doc/todo/Add_gbp_support/comment_2_bbe3beff9631f4862b889c7f7f665e4b._comment
new file mode 100644
index 0000000..900b3bb
--- /dev/null
+++ b/doc/todo/Add_gbp_support/comment_2_bbe3beff9631f4862b889c7f7f665e4b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ avatar="http://cdn.libravatar.org/avatar/9c3f08f80e67733fd506c353239569eb"
+ subject="comment 2"
+ date="2018-05-25T09:36:09Z"
+ content="""
+I don't think I understand the value of this plugin.  The only gbp command that I can imagine wanting to run in batch across all my repos is `gbp clone`, so I could see the value of a short plugin that handles cloning and registering gbp repos.  But I don't see why you would ever want to run `gbp dch` across more than one repo at once.
+"""]]

Added a comment: please link to a git repository
diff --git a/doc/todo/Add_gbp_support/comment_1_837dd63cc0d05585dcc99b57410a043c._comment b/doc/todo/Add_gbp_support/comment_1_837dd63cc0d05585dcc99b57410a043c._comment
new file mode 100644
index 0000000..1abceaf
--- /dev/null
+++ b/doc/todo/Add_gbp_support/comment_1_837dd63cc0d05585dcc99b57410a043c._comment
@@ -0,0 +1,21 @@
+[[!comment format=mdwn
+ username="pabs3@49c776417680694a0f3295ee80df4edfca300096"
+ nickname="pabs3"
+ avatar="http://cdn.libravatar.org/avatar/3bf5f3b29a3d68ddf11eb1a3d8c5dc65"
+ subject="please link to a git repository"
+ date="2018-05-24T01:03:48Z"
+ content="""
+Please add a link to a git repository containing the commit you want to add.
+
+Some suggestions for that:
+
+Please include the gbp support as a plugin rather than in mr itself.
+
+Please add a copyright and license notice in comments at the start of the plugin.
+
+Please add some documentation in comments at the start of the plugin.
+
+Please use perl: for the gbp_test/git_test code, it is faster and most of the other *_test code uses it.
+
+Please sync gbp_grep with git_grep, the latter always returns true.
+"""]]

diff --git a/doc/todo/Add_gbp_support.mdwn b/doc/todo/Add_gbp_support.mdwn
new file mode 100644
index 0000000..058a838
--- /dev/null
+++ b/doc/todo/Add_gbp_support.mdwn
@@ -0,0 +1,39 @@
+It would be use to add gbp (git buildpackage) support to myrepos.
+
+Here's the config I have created (I'm not sure where's best to post patches/PRs, so if someone can point me in the right direction I'll create one):
+
+    git_test = test -e "$MR_REPO/.git" && ! test -e "$MR_REPO/debian/gbp.conf"
+    gbp_test = test -e "$MR_REPO/.git" && test -e "$MR_REPO/debian/gbp.conf"
+    gbp_trusted_checkout = gbp clone $url
+    gbp_register = 
+    	   url="`LC_ALL=C git config --get remote.origin.url`" || true
+    	   if [ -z "$url" ]; then
+    	       error "cannot determine gbp url"
+    	   fi
+    	   echo "Registering gbp url: $url in $MR_CONFIG"
+    	   mr -c "$MR_CONFIG" config "`pwd`" checkout="gbp clone '$url'"
+    gbp_update = gbp pull
+    # additional
+    gbp_buildpackage = gbp buildpackage "$@"
+    gbp_importorig = gbp import-orig "$@"
+    gbp_importdsc = gbp import-dsc "$@"
+    gbp_importdscs = gbp import-dscs "$@"
+    gbp_dch = gbp dch "$@"
+    gbp_pq = gbp pq "$@"
+    gbp_createremoterepo = gbp create-remote-repo "$@"
+    # same as git
+    gbp_fetch = git fetch --all --prune --tags "$@"
+    gbp_status = git status -s "$@" || true; git --no-pager log --branches --not --remotes --simplify-by-decoration --decorate --oneline || true; git --no-pager stash list
+    gbp_commit = git commit -a "$@" && git push --all
+    gbp_record = git commit -a "$@"
+    gbp_push = git push "$@"
+    gbp_diff = git diff "$@"
+    gbp_log = git log "$@"
+    gbp_grep = git grep "$@"
+    gbp_clean = 
+    	   if [ "x$1" = x-f ] ; then
+    	       shift
+    	       git clean -dx --force "$@"
+    	   else
+    	       git clean -dx --dry-run "$@"
+    	   fi

Added a comment: Symlinked Repos
diff --git a/doc/todo/Allow_symlinked_directories/comment_2_c55e82567c7784b89ff729008846789b._comment b/doc/todo/Allow_symlinked_directories/comment_2_c55e82567c7784b89ff729008846789b._comment
new file mode 100644
index 0000000..735db27
--- /dev/null
+++ b/doc/todo/Allow_symlinked_directories/comment_2_c55e82567c7784b89ff729008846789b._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="mforbes"
+ avatar="http://cdn.libravatar.org/avatar/e497ff9efad76394e98daa506ebc8fef"
+ subject="Symlinked Repos"
+ date="2018-05-22T08:10:53Z"
+ content="""
+I too would greatly appreciate being able to track symlinks with myrepos.  (Quite often I will store the repo in a common location, but use it in several other projects via a symlinks).
+
+This used to work, but was broken in revision 52e2de0bdeb8b892c8b83fcad54543f874d4e5b8
+"""]]

some way to sort .mrconfig files
diff --git a/doc/todo/sorted_.mrconfig.mdwn b/doc/todo/sorted_.mrconfig.mdwn
new file mode 100644
index 0000000..783983a
--- /dev/null
+++ b/doc/todo/sorted_.mrconfig.mdwn
@@ -0,0 +1,7 @@
+it would be nice if mr would keep things in order while adding stuff to our every-growing `.mrconfig` files. I try to keep mine sorted, and did that by hand until I had to add a bunch of entries at once (because i managed to [[detect_unregistered_repos_in_tree]]), and it was then really impractical.
+
+I hacked together this ridiculous Python script which reads a .INI file from stdin (or commandline arguments) and spews out a sorted version on stdout. A simple way to use this is:
+
+    sort-ini ~/.mrconfig | sponge ~/.mrconfig
+
+The script is [sort-ini](https://gitlab.com/anarcat/scripts/raw/2dc32c23496b5c3c33d09ed78e7b3acbdc7fe5eb/sort-ini) and is available in my [scripts repo](https://gitlab.com/anarcat/scripts/). --[[anarcat]]

Added a comment: find hack
diff --git a/doc/todo/detect_unregistered_repos_in_tree/comment_1_5ff421bafac1683b7e305b0b225786f6._comment b/doc/todo/detect_unregistered_repos_in_tree/comment_1_5ff421bafac1683b7e305b0b225786f6._comment
new file mode 100644
index 0000000..88bb213
--- /dev/null
+++ b/doc/todo/detect_unregistered_repos_in_tree/comment_1_5ff421bafac1683b7e305b0b225786f6._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="anarcat"
+ avatar="http://cdn.libravatar.org/avatar/b486931ea9d27c0cc41a4e9e4daccb7c"
+ subject="find hack"
+ date="2018-04-29T17:39:42Z"
+ content="""
+I have just used this hack to workaround this issue:
+
+    find -maxdepth 1 -type d -a -\( -execdir grep -q {} ~/.mrconfig \; -o -okdir mr register '{}' \; -\)
+
+What it does is look in the current directory, one level deep, for directories and check if they are in `~/.mrconfig`. If they aren't, ask if they should be registered. Obviously, this should check for stuff like if `.git` exists and so on, but considering the variety of repos supported by mr, i figured I would keep this simple. --[[anarcat]]
+"""]]

Added a comment: State of affairs with symlinks
diff --git a/doc/todo/Allow_symlinked_directories/comment_1_8f808f36de1eacb0c56621b1fc6356c3._comment b/doc/todo/Allow_symlinked_directories/comment_1_8f808f36de1eacb0c56621b1fc6356c3._comment
new file mode 100644
index 0000000..dde50b6
--- /dev/null
+++ b/doc/todo/Allow_symlinked_directories/comment_1_8f808f36de1eacb0c56621b1fc6356c3._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="simonjena@4ef913dc612cd8f4bd72ef70ef1d534ed8bdd69b"
+ nickname="simonjena"
+ avatar="http://cdn.libravatar.org/avatar/1b3e001e798156fb7d97fd064b63c3e2"
+ subject="State of affairs with symlinks"
+ date="2018-04-05T19:35:58Z"
+ content="""
+Hi; 
+I think that project is absolutely great. However, I was disappointed that symlinks are not supported. I, too, have fallen victim to a $HOME symlink situation, but additionally, my idea of creating a generic symlink-based \"views on my repositories\"-kind of structure vanished before my eyes. I really think this project could need a propper refactoring with respect to resolving symlinks with respect to BOTH path-to-configuration-file and path-to-repository. I am absolutely no good with perl, however, as I learned when trying to fix it myself the last few hours :/
+
+Thank you in any case for the project, because it is a nice help already! however, proper symlink support seems a must-have to me at least for real adaption into my core setup and developing stuff around it.
+
+Cheers!
+S.
+"""]]

caps
diff --git a/doc/index.mdwn b/doc/index.mdwn
index 8b550bd..22a6f7c 100644
--- a/doc/index.mdwn
+++ b/doc/index.mdwn
@@ -97,7 +97,7 @@ Some more examples of things it can do include:
 [[!inline pages="news/* and !*/Discussion" show="4" archive=yes]]
 
 [[!sidebar content="""
-[[install]]  
-[[todo]]  
-[[forum]]  
+[[Install]]  
+[[Todo]]  
+[[Forum]]  
 """]]

add a forum
diff --git a/doc/forum.mdwn b/doc/forum.mdwn
new file mode 100644
index 0000000..931900e
--- /dev/null
+++ b/doc/forum.mdwn
@@ -0,0 +1,4 @@
+This is a place to discuss using myrepos, share tips and tricks, etc.
+If you need help, advice, or anything, post about it here.
+
+[[!inline pages="forum/* and !*/Discussion" archive=yes rootpage=forum postformtext="Add a new thread titled:"]]
diff --git a/doc/index.mdwn b/doc/index.mdwn
index e2c6c3e..8b550bd 100644
--- a/doc/index.mdwn
+++ b/doc/index.mdwn
@@ -97,6 +97,7 @@ Some more examples of things it can do include:
 [[!inline pages="news/* and !*/Discussion" show="4" archive=yes]]
 
 [[!sidebar content="""
-[[install]]
-[[todo]]
+[[install]]  
+[[todo]]  
+[[forum]]  
 """]]

Added a comment
diff --git a/doc/todo/scheme_for_managing_Forks/comment_1_37c1845bd19b95a25c2c4e429a228545._comment b/doc/todo/scheme_for_managing_Forks/comment_1_37c1845bd19b95a25c2c4e429a228545._comment
new file mode 100644
index 0000000..d6247c9
--- /dev/null
+++ b/doc/todo/scheme_for_managing_Forks/comment_1_37c1845bd19b95a25c2c4e429a228545._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="duncan@f5130b2b0a997a1072abb7c83c68f15497146966"
+ nickname="duncan"
+ avatar="http://cdn.libravatar.org/avatar/275e9d19ecd061c064e33814b52eeb1c"
+ subject="comment 1"
+ date="2018-03-09T10:35:53Z"
+ content="""
+Checkout and set up your additional remote manually for 1 repo, then you can transcribe that into a reusable shell function that uses the MR_REPO envinoment variable (probably `basename`ing it) and a supplied GitHub username. 
+
+Then paste that function into  \"lib =\"  in the [DEFAULT] section of your mrconfig file. Your 27 \"checkout =\" commands can now just call that function rather than doing git commands themselves. 
+
+I do this and so have lots of lines in my mrconfig like:
+
+    [workspace/programming/someproj]
+    checkout = cloneGithubForkContributing somegithubuser
+"""]]

CVS status: use `cvs -n -q update` instead
The existing form removes directory names from the output.
The new form shows something more like what git status shows.
Fixes: https://myrepos.branchable.com/todo/CVS_status_shortened_too_much/
diff --git a/doc/todo/CVS_status_shortened_too_much.mdwn b/doc/todo/CVS_status_shortened_too_much.mdwn
index cea82d4..06a452b 100644
--- a/doc/todo/CVS_status_shortened_too_much.mdwn
+++ b/doc/todo/CVS_status_shortened_too_much.mdwn
@@ -9,3 +9,5 @@ File: Makefile          Status: Locally Modified
 File: Makefile.am       Status: Locally Modified
 
 Aha, so 3 out of 66 files named 'Makefile' are modified.
+
+[[done]] --pabs
diff --git a/mr b/mr
index 11d376e..4c62cb1 100755
--- a/mr
+++ b/mr
@@ -2414,7 +2414,7 @@ vcsh_clean =
 svn_status = svn status "$@"
 git_status = git status -s "$@" || true; git --no-pager log --branches --not --remotes --simplify-by-decoration --decorate --oneline || true; git --no-pager stash list
 bzr_status = bzr status --short "$@"; bzr missing
-cvs_status = cvs -q status | grep -E '^(File:.*Status:|\?)' | grep -v 'Status: Up-to-date' || true
+cvs_status = cvs -n -q update "$@"
 hg_status  = hg status --pager never "$@"; hg summary --pager never --quiet | grep -v 'parent: 0:'
 darcs_status = darcs whatsnew -ls "$@" || true
 fossil_status = fossil changes "$@"

Add a news page for the website that aggregates 10 news items
Will be used by the Debian upstream meta-data.
diff --git a/doc/news.mdwn b/doc/news.mdwn
new file mode 100644
index 0000000..65cc7bc
--- /dev/null
+++ b/doc/news.mdwn
@@ -0,0 +1,8 @@
+## news
+
+[[!inline pages="news/* and !*/Discussion" show="10" archive=yes]]
+
+[[!sidebar content="""
+[[install]]
+[[todo]]
+"""]]

Link to Debian bugs for a couple of TODO items
diff --git a/doc/todo/Allow_symlinked_directories.mdwn b/doc/todo/Allow_symlinked_directories.mdwn
index cb864e5..c2cf424 100644
--- a/doc/todo/Allow_symlinked_directories.mdwn
+++ b/doc/todo/Allow_symlinked_directories.mdwn
@@ -1 +1,3 @@
 Currently when a repository defined in mrconfig is a symlink to a directory/repository, myrepos simply ignores it and outputs "no repositories found to work on".
+
+Debian bug #[793381](https://bugs.debian.org/793381)
diff --git a/doc/todo/detect_unregistered_repos_in_tree.mdwn b/doc/todo/detect_unregistered_repos_in_tree.mdwn
index bc2126b..90ffa5f 100644
--- a/doc/todo/detect_unregistered_repos_in_tree.mdwn
+++ b/doc/todo/detect_unregistered_repos_in_tree.mdwn
@@ -1,3 +1,5 @@
 a way to detect repos in a tree that are not registered, and warn
 about or even auto-register them. (svn externals make this quite
 difficult!)
+
+Debian bug #[482371](https://bugs.debian.org/482371)

add news item for myrepos 1.20171231
diff --git a/doc/news/version_1.20141024.mdwn b/doc/news/version_1.20141024.mdwn
deleted file mode 100644
index 6aba492..0000000
--- a/doc/news/version_1.20141024.mdwn
+++ /dev/null
@@ -1,3 +0,0 @@
-myrepos 1.20141024 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Fix name for vcsh\_clean. Closes: #[766655](https://bugs.debian.org/766655)"""]]
diff --git a/doc/news/version_1.20171231.mdwn b/doc/news/version_1.20171231.mdwn
new file mode 100644
index 0000000..fa2ba94
--- /dev/null
+++ b/doc/news/version_1.20171231.mdwn
@@ -0,0 +1,10 @@
+myrepos 1.20171231 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * [ Joey Hess ]
+   * Fix undefined value warning when using -j.
+ * [ Paul Wise ]
+   * Join the Debian package maintainers
+   * Bump Standards-Version, no changes needed
+ * [ Joey Hess ]
+   * Improve error message when system exits -1. This was incorrectly
+     displayed as a signal when in fact the program could not be run."""]]
\ No newline at end of file

diff --git a/doc/todo/Allow_symlinked_directories.mdwn b/doc/todo/Allow_symlinked_directories.mdwn
new file mode 100644
index 0000000..cb864e5
--- /dev/null
+++ b/doc/todo/Allow_symlinked_directories.mdwn
@@ -0,0 +1 @@
+Currently when a repository defined in mrconfig is a symlink to a directory/repository, myrepos simply ignores it and outputs "no repositories found to work on".

Added a comment: Clearer error
diff --git a/doc/todo/Issues_with_Bash_on_Windows/comment_2_021d89c87b746dda8696c21073bfa668._comment b/doc/todo/Issues_with_Bash_on_Windows/comment_2_021d89c87b746dda8696c21073bfa668._comment
new file mode 100644
index 0000000..c1edc8d
--- /dev/null
+++ b/doc/todo/Issues_with_Bash_on_Windows/comment_2_021d89c87b746dda8696c21073bfa668._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="DancingQuanta"
+ avatar="http://cdn.libravatar.org/avatar/e9aa3e1b35d54c698b63b33d8ec9b57d"
+ subject="Clearer error"
+ date="2017-11-15T09:17:35Z"
+ content="""
+Thank you for the clear error reporting update of `mr`.
+The hidden error turns out to be 
+```
+mr update: failed to execute: Bad file descriptor
+```
+Now I believe that WSL is responsible for this as it have incomplete Unix filesystem compared to Unix.
+Can this `Bad file descriptor` be triggered because `mr` was acting on bad file descriptor number?
+
+"""]]

Improve error message when system exits -1.
This was incorrectly displayed as a signal when in fact the program could
not be run, or wait failed.
This commit was sponsored by Fernando Jimenez on Patreon.
diff --git a/debian/changelog b/debian/changelog
index 4d51ec6..512639b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -7,6 +7,10 @@ myrepos (1.20170130) UNRELEASED; urgency=medium
   * Join the Debian package maintainers
   * Bump Standards-Version, no changes needed
 
+  [ Joey Hess ]
+  * Improve error message when system exits -1. This was incorrectly
+    displayed as a signal when in fact the program could not be run.
+
  -- Joey Hess <id@joeyh.name>  Wed, 17 May 2017 12:07:26 -0400
 
 myrepos (1.20170129) unstable; urgency=medium
diff --git a/doc/todo/Issues_with_Bash_on_Windows/comment_1_38c15355947309d24477ea03474fe3ef._comment b/doc/todo/Issues_with_Bash_on_Windows/comment_1_38c15355947309d24477ea03474fe3ef._comment
new file mode 100644
index 0000000..f539259
--- /dev/null
+++ b/doc/todo/Issues_with_Bash_on_Windows/comment_1_38c15355947309d24477ea03474fe3ef._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2017-11-14T16:38:01Z"
+ content="""
+It seems that, when it tries to run a command that is not available, or
+if waiting for the command somehow fails, mr incorrectly interprets
+the resulting -1 exit code as a signal 127. I suspect that is what
+happened here. I've fixed mr to say "failed to execute" and give the
+system error message in this case.
+
+As to why this would happen in WSL, I don't know. Other than WSL not being
+a perfect linux system call emulation. Hopefully the above fix will let mr
+report what the actual problem is.
+"""]]
diff --git a/mr b/mr
index 8137479..6d2e750 100755
--- a/mr
+++ b/mr
@@ -824,6 +824,10 @@ sub action {
 			my $ret=runsh "$testname test", $topdir, $subdir,
 				$testcommand, [$action],
 				sub { system(shift()) };
+			if ($ret == -1) {
+				print STDERR "mr $action: failed to execute: $!\n";
+				return FAILED;
+			}
 			if ($ret != 0) {
 				if (($? & 127) == 2) {
 					print STDERR "mr $action: interrupted\n";
@@ -912,17 +916,24 @@ sub action {
 				}
 			};
 		if ($ret != 0) {
-			if (($? & 127) == 2) {
-				print STDERR "mr $action: interrupted\n";
-				return ABORT;
-			}
-			elsif ($? & 127) {
-				print STDERR "mr $action: received signal ".($? & 127)."\n";
-				return ABORT;
+			if ($ret != -1) {
+				if (($? & 127) == 2) {
+					print STDERR "mr $action: interrupted\n";
+					return ABORT;
+				}
+				elsif ($? & 127) {
+					print STDERR "mr $action: received signal ".($? & 127)."\n";
+					return ABORT;
+				}
 			}
 			print STDERR "mr $action: failed ($ret)\n" if $verbose;
 			if ($ret >> 8 != 0) {
-				print STDERR "mr $action: command failed\n";
+				if ($ret == -1) {
+					print STDERR "mr $action: failed to execute: $!\n";
+				}
+				else {
+					print STDERR "mr $action: command failed\n";
+				}
 				if (-e "$ENV{HOME}/.mrlog" && $action ne 'remember') {
 					# recreate original command line to
 					# remember, and avoid recursing
@@ -976,6 +987,10 @@ sub hook {
 				system($sh);
 			}
 		};
+	if ($ret == -1) {
+		print STDERR "mr $hook: failed to execute: $!\n";
+		return FAILED;
+	}
 	if ($ret != 0) {
 		if (($? & 127) == 2) {
 			print STDERR "mr $hook: interrupted\n";
@@ -1524,6 +1539,9 @@ sub loadconfig {
 					}
 					if (-e "$chaindir/.mrconfig") {
 						my $ret=system($value);
+						if ($ret == -1) {
+							print STDERR "mr: chain test failed to execute: $!\n";
+						}
 						if ($ret != 0) {
 							if (($? & 127) == 2) {
 								print STDERR "mr: chain test interrupted\n";

Update list of distro install commands
Add more distros and package managers.
diff --git a/doc/install.mdwn b/doc/install.mdwn
index 291593a..6f7ac95 100644
--- a/doc/install.mdwn
+++ b/doc/install.mdwn
@@ -5,9 +5,16 @@ It's a simple perl script, which can be copied anywhere to install.
 Debian: `apt install myrepos`  
 Ubuntu: `apt install myrepos`  
 Fedora: `dnf install myrepos`  
+openSUSE: `zypper install mr`  
+Mageia: `urpmi myrepos`  
+Sisyphus: `sisyphus install mr`  
 Gentoo: `emerge dev-vcs/mr`  
 Arch: `pacman -S myrepos`  
+Alpine: `apk add myrepos`  
+Nix: `nix-env -i mr`  
+Guix: `guix package -i myrepos`  
 FreeBSD: `pkg install myrepos`  
 NetBSD: `pkg_add mr`  
 Homebrew: `brew install mr`  
+Linuxbrew: `brew install mr`  
 MacPorts: `port install myrepos`  

Add links to more myrepos/mr packages
Also link to Repology for convenient access to version/maintainer info.
diff --git a/doc/todo.mdwn b/doc/todo.mdwn
index 1bbd5df..5d6970f 100644
--- a/doc/todo.mdwn
+++ b/doc/todo.mdwn
@@ -4,11 +4,24 @@ See also:
 [Debian](https://tracker.debian.org/pkg/myrepos),
 [Ubuntu](https://launchpad.net/ubuntu/+source/myrepos),
 [Fedora](https://apps.fedoraproject.org/packages/myrepos/),
+[openSUSE](https://software.opensuse.org/package/mr),
+[Mageia](https://madb.mageia.org/package/show/application/0/name/myrepos),
+[Sisyphus](http://www.sisyphus.ru/en/srpm/Sisyphus/mr),
 [Gentoo](https://packages.gentoo.org/package/dev-vcs/mr),
+[Funtoo](https://github.com/funtoo/dev-kit/tree/master/dev-vcs/mr),
 [AUR](https://aur.archlinux.org/packages/myrepos/)
 ([git](https://aur.archlinux.org/packages/myrepos/)),
+[Alpine Linux](https://pkgs.alpinelinux.org/packages?name=myrepos),
+[nixpkgs](https://github.com/NixOS/nixpkgs/tree/master/pkgs/applications/version-management/mr),
+[GNU Guix](https://www.gnu.org/software/guix/packages/m.html#myrepos),
 [FreeBSD](https://www.freebsd.org/cgi/ports.cgi?stype=all&query=myrepos),
-[NetBSD](http://pkgsrc.se/devel/mr).
+[NetBSD](http://pkgsrc.se/devel/mr),
+[MacPorts](https://github.com/macports/macports-ports/tree/master/devel/myrepos),
+[Homebrew](https://github.com/Homebrew/homebrew-core/blob/master/Formula/mr.rb),
+[Linuxbrew](https://github.com/Linuxbrew/homebrew-core/blob/master/Formula/mr.rb),
+Repology
+([myrepos](https://repology.org/metapackage/myrepos/versions),
+[mr](https://repology.org/metapackage/mr/versions])).
 
 [[!inline pages="./todo/* and !./todo/done and !link(done)
 and !*/Discussion" actions=yes postform=yes show=0 archive=yes]]

Add links to more related software
diff --git a/doc/index.mdwn b/doc/index.mdwn
index 2b9f17d..e2c6c3e 100644
--- a/doc/index.mdwn
+++ b/doc/index.mdwn
@@ -89,6 +89,8 @@ Some more examples of things it can do include:
 * [vcstool](https://github.com/dirk-thomas/vcstool): work with multiple repositories
 * [vcstools](https://github.com/vcstools/vcstools): Python API wrapping version control systems
 * [rosinstall](https://github.com/vcstools/rosinstall): source code workspace management tool
+* [vcs-repo-mgr](https://github.com/xolox/python-vcs-repo-mgr): version control repository manager
+* [go-vcs](https://github.com/Masterminds/vcs): version control repository management for Golang
 
 ## news
 

Add links to some extensions and more related software
diff --git a/doc/index.mdwn b/doc/index.mdwn
index c2d57ee..2b9f17d 100644
--- a/doc/index.mdwn
+++ b/doc/index.mdwn
@@ -76,10 +76,19 @@ Some more examples of things it can do include:
 * Manage your whole home directory in version control.
   (See [VCS-Home](https://vcs-home.branchable.com/))
 
+## extensions
+
+* [drupal](https://github.com/wimleers/mr-drupal): simple way to manage drupal websites
+* [freeze](https://bitbucket.org/mforbes/mmfhg#rst-header-mr-un-freeze): record and restore VCS revision details
+
 ## related software
 
 * [repo](https://android.googlesource.com/tools/repo): git repository management tool
+* [kas](https://github.com/siemens/kas): bitbake repository management tool
 * [VCS](http://www.greenend.org.uk/rjk/vcs/): a wrapper for version control systems
+* [vcstool](https://github.com/dirk-thomas/vcstool): work with multiple repositories
+* [vcstools](https://github.com/vcstools/vcstools): Python API wrapping version control systems
+* [rosinstall](https://github.com/vcstools/rosinstall): source code workspace management tool
 
 ## news
 
diff --git a/doc/todo/Discoverability_of_mr_VCS_types__47__modules__47__handlers.mdwn b/doc/todo/Discoverability_of_mr_VCS_types__47__modules__47__handlers.mdwn
index b62a14d..b675a12 100644
--- a/doc/todo/Discoverability_of_mr_VCS_types__47__modules__47__handlers.mdwn
+++ b/doc/todo/Discoverability_of_mr_VCS_types__47__modules__47__handlers.mdwn
@@ -5,3 +5,5 @@ But this is very hard to discover.
 I wonder what other great additions I'm missing out on? If the canonical `myrepos` repo + website would list contributions/extensions, that'd IMHO greatly enhance the ecosystem!
 
 P.S.: thanks again for this excellent tool. A happy user for 4 years now.
+
+[[done]] --pabs

Strip trailing white-space
Suggested-by: $EDITOR
Suggested-by: git
Suggested-by: podchecker
*** WARNING: line containing nothing but whitespace in paragraph at line 436 in file ./mr
./mr pod syntax OK.
diff --git a/debian/changelog b/debian/changelog
index 0df78b6..d7717cb 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -208,7 +208,7 @@ mr (1.13) unstable; urgency=low
 mr (1.12) unstable; urgency=low
 
   * Ignore nonzero exit status of hg pull, which can happen
-    when there were no changes to pull. Closes: #661870 
+    when there were no changes to pull. Closes: #661870
   * Add vcsh to Suggests.
   * Recognize a repo with a .git file as a git repo.
   * Improve bzr register's heuristics to determine upstream repo.
@@ -247,7 +247,7 @@ mr (1.08) unstable; urgency=low
 mr (1.07) unstable; urgency=low
 
   * Added support for vcsh, enable with: include = cat /usr/share/mr/vcsh
-    Thanks, Richard Hartmann 
+    Thanks, Richard Hartmann
   * Block tty control codes in untrusted mr config files.
   * Correct printing of line numbers when includes are used. Closes: #650952
   * The previous fix for chaining to absolute paths broke chaining to relative
@@ -452,7 +452,7 @@ mr (0.38) unstable; urgency=low
 
 mr (0.37) unstable; urgency=low
 
-  * Add "gitless" file to lib. 
+  * Add "gitless" file to lib.
     This adds a special type of git repository, where the .git directory
     is stored on a file server, to avoid wasting space with it on the client.
   * Revert buggy change to directory printing code.
@@ -483,7 +483,7 @@ mr (0.34) unstable; urgency=low
 
 mr (0.33) unstable; urgency=low
 
-  * Add a push subcommand, which pushes committed changes for DCVS, and 
+  * Add a push subcommand, which pushes committed changes for DCVS, and
     does nothing for svn/cvs. Closes: #491865
 
  -- Joey Hess <joeyh@debian.org>  Tue, 22 Jul 2008 15:22:01 -0400
diff --git a/doc/index.mdwn b/doc/index.mdwn
index c608150..c2d57ee 100644
--- a/doc/index.mdwn
+++ b/doc/index.mdwn
@@ -28,11 +28,11 @@ of other commands. These work no matter which version control system is
 used for a repository. Of course, you can still use the native version
 control commands too.
 
-Oh, and you can abbreviate any command to any unambiguous abbreviation. 
+Oh, and you can abbreviate any command to any unambiguous abbreviation.
 `mr up`, `mr pu`, etc.
 
 Now, maybe you find that you always want to update one repository using
-`git pull --rebase`, instead of the default `git pull` that `mr update` runs. 
+`git pull --rebase`, instead of the default `git pull` that `mr update` runs.
 No problem: The `~/.mrconfig` file makes it easy to override the command
 run for any repository. It's like a `Makefile` for repositories.
 
@@ -43,14 +43,14 @@ run for any repository. It's like a `Makefile` for repositories.
 You can make up your own commands too:
 
 	[bar]
-	# This repository has an upstream, which I've forked; 
+	# This repository has an upstream, which I've forked;
 	# set up a remote on checkout.
-	checkout = 
+	checkout =
 		git clone git@github.com:joeyh/bar.git
 		cd bar
 		git remote add upstream git@github.com:barbar/bar.git
 	# make `mr zap` integrate from upstream
-	zap = 
+	zap =
 		git pull upstream
 		git merge upstream/master
 		git push origin master
@@ -86,6 +86,6 @@ Some more examples of things it can do include:
 [[!inline pages="news/* and !*/Discussion" show="4" archive=yes]]
 
 [[!sidebar content="""
-[[install]]  
-[[todo]]  
+[[install]]
+[[todo]]
 """]]
diff --git a/doc/install.mdwn b/doc/install.mdwn
index 1396873..291593a 100644
--- a/doc/install.mdwn
+++ b/doc/install.mdwn
@@ -1,4 +1,4 @@
-`git clone git://myrepos.branchable.com/ myrepos`  
+`git clone git://myrepos.branchable.com/ myrepos`
 
 It's a simple perl script, which can be copied anywhere to install.
 
diff --git a/doc/todo/CVS_status_shortened_too_much.mdwn b/doc/todo/CVS_status_shortened_too_much.mdwn
index d042843..cea82d4 100644
--- a/doc/todo/CVS_status_shortened_too_much.mdwn
+++ b/doc/todo/CVS_status_shortened_too_much.mdwn
@@ -8,4 +8,4 @@ File: Makefile          Status: Locally Modified
 File: Makefile          Status: Locally Modified
 File: Makefile.am       Status: Locally Modified
 
-Aha, so 3 out of 66 files named 'Makefile' are modified. 
+Aha, so 3 out of 66 files named 'Makefile' are modified.
diff --git a/doc/todo/config___39__order__39___is_ignored_when___39__jobs__39_____62__1.mdwn b/doc/todo/config___39__order__39___is_ignored_when___39__jobs__39_____62__1.mdwn
index 30c93e3..8ecdea1 100644
--- a/doc/todo/config___39__order__39___is_ignored_when___39__jobs__39_____62__1.mdwn
+++ b/doc/todo/config___39__order__39___is_ignored_when___39__jobs__39_____62__1.mdwn
@@ -10,13 +10,13 @@ status = :
 order = 25
 ```
 
-1. After adding the above section to my .mrconfig, I received the following error message when executing `mr up`: 
-> **mr update: unknown repository type and no defined update command for /Users/tom/tmp**  
->  
+1. After adding the above section to my .mrconfig, I received the following error message when executing `mr up`:
+> **mr update: unknown repository type and no defined update command for /Users/tom/tmp**
+>
 > This was easily resolved by adding `update = :` to the [tmp] section. [git repository containing proposed change](https://github.com/tomhoover/myrepos/tree/dummy-target).
 
 2. I now discovered that the [tmp] target was not being executed after all other targets (as the `order = 25` should have required). NOTE: none of my other targets have an **order** setting of greater than **15**.
-> I normally have `jobs = 5` set in my .mrconfig file--changing this to `jobs = 1` resulted in the desired behavior.  
+> I normally have `jobs = 5` set in my .mrconfig file--changing this to `jobs = 1` resulted in the desired behavior.
 
 **Enhancement Request:**
 
diff --git a/doc/todo/config___39__order__39___is_ignored_when___39__jobs__39_____62__1/comment_1_b25c104467d054d42ea1a25fec79930f._comment b/doc/todo/config___39__order__39___is_ignored_when___39__jobs__39_____62__1/comment_1_b25c104467d054d42ea1a25fec79930f._comment
index 1ab2b02..98f342c 100644
--- a/doc/todo/config___39__order__39___is_ignored_when___39__jobs__39_____62__1/comment_1_b25c104467d054d42ea1a25fec79930f._comment
+++ b/doc/todo/config___39__order__39___is_ignored_when___39__jobs__39_____62__1/comment_1_b25c104467d054d42ea1a25fec79930f._comment
@@ -23,7 +23,7 @@ I think there are probably two ways `order` might be used:
    linux repo updated concurrently.
 
 These are both valid; might be better to keep order as it is to handle #2,
-and add a more formal dependency mechanism for #1. 
+and add a more formal dependency mechanism for #1.
 
 The use of a dummy target to run a `fixups` at the end of the update, which
 is what we're both using `order` for suggests a simpler approach: Just make
diff --git a/lib/git-fake-bare b/lib/git-fake-bare
index 5091d95..d59e3fe 100644
--- a/lib/git-fake-bare
+++ b/lib/git-fake-bare
@@ -63,7 +63,7 @@ git_fake_bare_commit =
 git_fake_bare_push =
 	GIT_DIR="$MR_REPO" git push --all
 
-git_fake_bare_record = 
+git_fake_bare_record =
 	cd "$(git_get_worktree)"
 	GIT_DIR="$MR_REPO" git commit -a "$@"
 
@@ -73,7 +73,7 @@ git_fake_bare_diff =
 
 git_fake_bare_log = GIT_DIR="$MR_REPO" git log "$@"
 
-git_fake_bare_register = 
+git_fake_bare_register =
 	url="$(LC_ALL=C GIT_CONFIG=config git config --get remote.origin.url)" || true
 	if [ -z "$url" ]; then
 		error "cannot determine git url"
diff --git a/lib/stow b/lib/stow
index aa1e857..328106c 100644
--- a/lib/stow
+++ b/lib/stow
@@ -1,7 +1,7 @@
 # Plug-in to use GNU Stow to manage symlinks whose targets lie in a
 # repository managed with myrepos
 #
-# The standard use case is for managing symlinks to dotfiles 
+# The standard use case is for managing symlinks to dotfiles
 # inside one's home directory.
 #
 # Original author (2011):
diff --git a/lib/unison b/lib/unison
index ffe5205..9bde909 100644
--- a/lib/unison
+++ b/lib/unison
@@ -1,5 +1,5 @@
 # This allows using unison as a "version control system" with mr.
-# 
+#
 # You need to configure unison by setting up files in ~/.unison named
 # the same as the basenames of the directories you want to sync, and
 # containing unison configuration to sync them.
diff --git a/mr b/mr
index c415392..f2fb1a3 100755
--- a/mr
+++ b/mr
@@ -381,7 +381,7 @@ All other sections add repositories. The section header specifies the
 directory where the repository is located. This is relative to the directory
 that contains the mrconfig file, but you can also choose to use absolute
 paths. (Note that you can use environment variables in section names; they
-will be passed through the shell for expansion. For example, 
+will be passed through the shell for expansion. For example,
 C<[$HOSTNAME]>, or C<[${HOSTNAME}foo]>).
 
 Within a section, each setting defines a shell command to run to handle a
@@ -400,7 +400,7 @@ C<$@>. All commands other than "checkout" are run inside the repository,

(Diff truncated)
Fix typos
Suggested-by: codespell
Suggested-by: spellintian
diff --git a/debian/changelog b/debian/changelog
index f659326..bc1dc81 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -264,7 +264,7 @@ mr (1.07) unstable; urgency=low
 
 mr (1.06) unstable; urgency=low
 
-  * Fix propigation of failure from pre and post hooks and from fixups.
+  * Fix propagation of failure from pre and post hooks and from fixups.
   * Support chaining to absolute paths.
   * Add support for skip = lazy, a mode where mr only operates on repositories
     that are checked out.
diff --git a/debian/control b/debian/control
index 5493448..5e6b6af 100644
--- a/debian/control
+++ b/debian/control
@@ -40,7 +40,7 @@ Recommends:
  perl
 Description: tool to manage all your version control repos
  The mr(1) command can checkout, update, or perform other actions on
- a set of repositories as if they were one combined respository. It
+ a set of repositories as if they were one combined repository. It
  supports any combination of git, svn, mercurial, bzr, darcs, cvs, vcsh,
  fossil, and veracity repositories, and support for other version control
  systems can easily be added. (There are extensions adding support for unison
diff --git a/doc/todo/add-all-git-remotes/comment_1_7025247e6ae402b861db7194b6c24698._comment b/doc/todo/add-all-git-remotes/comment_1_7025247e6ae402b861db7194b6c24698._comment
index a30c2cb..3e51a88 100644
--- a/doc/todo/add-all-git-remotes/comment_1_7025247e6ae402b861db7194b6c24698._comment
+++ b/doc/todo/add-all-git-remotes/comment_1_7025247e6ae402b861db7194b6c24698._comment
@@ -7,6 +7,6 @@ I like this idea, and it seems fine to change the default `mr register`
 behavior like this.
 
 The TODOs need to be dealt with or removed before I can merge it.
-Git remote names *are* allowed to contain ".", altough they cannot start
+Git remote names *are* allowed to contain ".", although they cannot start
 with it.
 """]]
diff --git a/doc/todo/config___39__order__39___is_ignored_when___39__jobs__39_____62__1/comment_1_b25c104467d054d42ea1a25fec79930f._comment b/doc/todo/config___39__order__39___is_ignored_when___39__jobs__39_____62__1/comment_1_b25c104467d054d42ea1a25fec79930f._comment
index 98f342c..9a8ca55 100644
--- a/doc/todo/config___39__order__39___is_ignored_when___39__jobs__39_____62__1/comment_1_b25c104467d054d42ea1a25fec79930f._comment
+++ b/doc/todo/config___39__order__39___is_ignored_when___39__jobs__39_____62__1/comment_1_b25c104467d054d42ea1a25fec79930f._comment
@@ -13,7 +13,7 @@ guarantee that.
 
 I think there are probably two ways `order` might be used:
 
-1. To make a dependant repository be processed after another one. I use it
+1. To make a dependent repository be processed after another one. I use it
    this way myself. Broken by --jobs.
 2. To eg, sort more expensive or less important repositories later. For
    example, I used to keep a clone of the linux git repo, but it's very

Fix typo
diff --git a/doc/index.mdwn b/doc/index.mdwn
index 1a8ec10..c608150 100644
--- a/doc/index.mdwn
+++ b/doc/index.mdwn
@@ -62,7 +62,7 @@ You can even define commands globally, so `mr` can use them in all repositories.
 	git_gc = git gc "$@"
 
 This only scratches the surface of the ways you can use myrepos to automate
-and mange your repositories!
+and manage your repositories!
 
 Some more examples of things it can do include:
 

Add a section on the front page about related software
diff --git a/doc/index.mdwn b/doc/index.mdwn
index a4cafc1..1a8ec10 100644
--- a/doc/index.mdwn
+++ b/doc/index.mdwn
@@ -76,6 +76,11 @@ Some more examples of things it can do include:
 * Manage your whole home directory in version control.
   (See [VCS-Home](https://vcs-home.branchable.com/))
 
+## related software
+
+* [repo](https://android.googlesource.com/tools/repo): git repository management tool
+* [VCS](http://www.greenend.org.uk/rjk/vcs/): a wrapper for version control systems
+
 ## news
 
 [[!inline pages="news/* and !*/Discussion" show="4" archive=yes]]

restore trailing spaces to fix line breaks
diff --git a/doc/install.mdwn b/doc/install.mdwn
index 2278b86..1396873 100644
--- a/doc/install.mdwn
+++ b/doc/install.mdwn
@@ -2,12 +2,12 @@
 
 It's a simple perl script, which can be copied anywhere to install.
 
-Debian: `apt install myrepos`
-Ubuntu: `apt install myrepos`
-Fedora: `dnf install myrepos`
-Gentoo: `emerge dev-vcs/mr`
-Arch: `pacman -S myrepos`
-FreeBSD: `pkg install myrepos`
-NetBSD: `pkg_add mr`
-Homebrew: `brew install mr`
-MacPorts: `port install myrepos`
+Debian: `apt install myrepos`  
+Ubuntu: `apt install myrepos`  
+Fedora: `dnf install myrepos`  
+Gentoo: `emerge dev-vcs/mr`  
+Arch: `pacman -S myrepos`  
+FreeBSD: `pkg install myrepos`  
+NetBSD: `pkg_add mr`  
+Homebrew: `brew install mr`  
+MacPorts: `port install myrepos`  

My patches got merged since I got commit access
diff --git a/doc/todo/patches_from_pabs.mdwn b/doc/todo/patches_from_pabs.mdwn
index 71dae59..40c4fdf 100644
--- a/doc/todo/patches_from_pabs.mdwn
+++ b/doc/todo/patches_from_pabs.mdwn
@@ -20,3 +20,5 @@ cc24aa1 Cope with the transition from ack-grep to ack in Debian
 9e740ff Ignore the return value from grep and ack-grep subcommands.
 cabc3e2 Erase to the end of the line when exiting
 ```
+
+[[done]]

Issues with Bash on Windows getting 127 on action
diff --git a/doc/todo/Issues_with_Bash_on_Windows.mdwn b/doc/todo/Issues_with_Bash_on_Windows.mdwn
new file mode 100644
index 0000000..7580bdc
--- /dev/null
+++ b/doc/todo/Issues_with_Bash_on_Windows.mdwn
@@ -0,0 +1,14 @@
+I tried `mr` out on `Bash on Windows`.
+I found that `mr` does not work so well.
+
+Steps to reproduce the problem:
+
+```
+15:12:57 Andrew@LAPTOP-V9S562AR:~
+$ mr s
+mr s: /home/Andrew/.config/vcsh/repo.d/author.git
+mr s: received signal 127
+```
+The status action does not cover a number of my repos, it just stops at the first repo.
+
+I have installed `mr` via `sudo apt-get install mr`.

auto-adding other remotes
diff --git a/doc/todo/scheme_for_managing_Forks.mdwn b/doc/todo/scheme_for_managing_Forks.mdwn
new file mode 100644
index 0000000..a36b881
--- /dev/null
+++ b/doc/todo/scheme_for_managing_Forks.mdwn
@@ -0,0 +1,7 @@
+My last feature request today, I promise!
+
+A workflow that is common for Github-style hosting sites is for there to be a canonical repo for a given software project, and for contributors to have a separate "fork" of that repository, to which they push changes. The changes are merged into the canonical repository by way of Pull Requests, an out-of-band process (from the pov of command line git).
+
+I've just cloned 27 github repositories that belong to a given organisation and I wish to configure an additional remote, corresponding to my github fork, for each repo. It would be nice if mr could facilitate this in an organised way; in  addition, repositories in this github organisation (or put it another way, in this part of my filesystem hierarchy) might come and go over time (see [[nicities when working with github and similar]]).
+
+-- [Jonathan Dowland](https://jmtd.net/)

feature request: move repositories
diff --git a/doc/todo/command_to_move_or_rename_repositories.mdwn b/doc/todo/command_to_move_or_rename_repositories.mdwn
new file mode 100644
index 0000000..c0d0784
--- /dev/null
+++ b/doc/todo/command_to_move_or_rename_repositories.mdwn
@@ -0,0 +1,5 @@
+It would be useful to be able to easily move or rename repositories, e.g.
+
+    mr move historicrepo old/historicrepo
+
+Updating the relevant mrconfig(s) accordingly. -- [Jonathan Dowland](https://jmtd.net/)

feature request: github/gh-style organisation tracking
diff --git a/doc/todo/nicities_when_working_with_github_and_similar.mdwn b/doc/todo/nicities_when_working_with_github_and_similar.mdwn
new file mode 100644
index 0000000..1b7762a
--- /dev/null
+++ b/doc/todo/nicities_when_working_with_github_and_similar.mdwn
@@ -0,0 +1 @@
+I am using `mr` to manage/track repositories for a team which uses one or more github Organisations. It would be nice if mr was able to notice when a new repository was added for a given github organisation, and automatically clone it / add it to the set of locally cloned/tracked repositories. I suppose it could associate a particular local directory path with an Organisation name. Likewise I suppose for other github-style things. I found this simple python script to list all repositories under an organisationhttps://gist.github.com/ralphbean/5733076 which uses a python module pygithub3, I'm guessing there's likely a REST API. -- [Jonathan Dowland](https://jmtd.net/)

bug report
diff --git a/doc/todo/mr_config_chained_repo_section_name_issue.mdwn b/doc/todo/mr_config_chained_repo_section_name_issue.mdwn
new file mode 100644
index 0000000..5bb4a45
--- /dev/null
+++ b/doc/todo/mr_config_chained_repo_section_name_issue.mdwn
@@ -0,0 +1,24 @@
+`mr config` has confusing behavior when used with chained mrconfig files.
+
+For example, I have ~/.mrconfig which defines a git-annex repository.
+And chains to ~/src/.mrconfig, which defines a git-annex repisoitory too.
+Those are separate repositories in different locations. But, if
+I run `mr config git-annex checkout`, it prints out the checkout
+actions for both repositories.
+
+Another example, my ~/.mrconfig defines a "." repository, which goes
+in my $HOME. If I run `mr config . checkout`, it prints out the checkout
+command for that repsitory, even when I'm in some other repository. Which
+is pretty confusing behavior!
+
+This might be especially bad when using mr config to change settings.
+I have not dared to try it.
+
+Looking at the code to `sub config`, it just iterates over each config
+and if it contains a section named like the basename of the repository,
+prints its config.
+
+To fix it, it seems that it would need to pay attention to where it's
+run. This would be a behavior change, and there's some chance it might
+break something.
+--[[Joey]]

more
diff --git a/doc/todo/patches_from_pabs.mdwn b/doc/todo/patches_from_pabs.mdwn
index 1e63289..71dae59 100644
--- a/doc/todo/patches_from_pabs.mdwn
+++ b/doc/todo/patches_from_pabs.mdwn
@@ -6,6 +6,7 @@ https://anonscm.debian.org/cgit/users/pabs/myrepos.git/
 
 ```
 $ git log --oneline
+a0c46bd Fix home directory handling
 6afdd95 vis: pass arguments to the commands
 145454d webcheckout: consider https URLs to be anonymous too
 4154b26 Switch URLs from http to https where possible

Switch URLs from http to https where possible
https URLs are more secure.
diff --git a/README b/README
index 750186d..707f7c3 100644
--- a/README
+++ b/README
@@ -9,7 +9,7 @@ control repositories.
 It supports git, svn, mercurial, bzr, darcs, cvs, fossil and veracity.
 
 Author: Joey Hess
-Homepage: http://myrepos.branchable.com/
+Homepage: https://myrepos.branchable.com/
 
 The mr command is intended to be very self-contained, since it might be
 useful to check it into ~/bin when keeping your home in version control. It
@@ -30,4 +30,4 @@ each, run "mr commit". To check the status of each, you could run
 "mr status".
 
 For further details, and lots of configuration options, see the mr(1) man
-page or the website, http://myrepos.branchable.com/
+page or the website, https://myrepos.branchable.com/
diff --git a/debian/changelog b/debian/changelog
index e6a0df5..0df78b6 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -461,7 +461,7 @@ mr (0.37) unstable; urgency=low
 
 mr (0.36) unstable; urgency=low
 
-  * Add webcheckout command. See <http://kitenet.net/~joey/rfc/rel-vcs/>
+  * Add webcheckout command. See <https://joeyh.name/rfc/rel-vcs/>
   * Fix display of repos configured at absolute path locations.
 
  -- Joey Hess <joeyh@debian.org>  Sat, 10 Jan 2009 16:42:07 -0500
diff --git a/debian/control b/debian/control
index 0e6818d..feb4b58 100644
--- a/debian/control
+++ b/debian/control
@@ -6,7 +6,7 @@ Build-Depends:
  dpkg-dev (>= 1.9.0)
 Maintainer: Richard Hartmann <richih@debian.org>
 Standards-Version: 3.9.6
-Homepage: http://myrepos.branchable.com/
+Homepage: https://myrepos.branchable.com/
 Vcs-Git: git://myrepos.branchable.com/
 
 Package: myrepos
diff --git a/debian/copyright b/debian/copyright
index 9c2279e..d9abd9b 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -1,4 +1,4 @@
-Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
 
 Files: *
 Copyright: (c) 2007-2011 Joey Hess <joeyh@debian.org>
diff --git a/doc/index.mdwn b/doc/index.mdwn
index e0b28bf..a4cafc1 100644
--- a/doc/index.mdwn
+++ b/doc/index.mdwn
@@ -74,7 +74,7 @@ Some more examples of things it can do include:
   with its own top-level `.mrconfig` file that lists them and can be
   chain loaded from `~/.mrconfig`.
 * Manage your whole home directory in version control.
-  (See [VCS-Home](http://vcs-home.branchable.com/))
+  (See [VCS-Home](https://vcs-home.branchable.com/))
 
 ## news
 
diff --git a/doc/news/version_1.20141024.mdwn b/doc/news/version_1.20141024.mdwn
index 2de1be9..6aba492 100644
--- a/doc/news/version_1.20141024.mdwn
+++ b/doc/news/version_1.20141024.mdwn
@@ -1,3 +1,3 @@
 myrepos 1.20141024 released with [[!toggle text="these changes"]]
 [[!toggleable text="""
-   * Fix name for vcsh\_clean. Closes: #[766655](http://bugs.debian.org/766655)"""]]
\ No newline at end of file
+   * Fix name for vcsh\_clean. Closes: #[766655](https://bugs.debian.org/766655)"""]]
diff --git a/doc/todo/comments_are_not_displayed_on_todo_list_items.mdwn b/doc/todo/comments_are_not_displayed_on_todo_list_items.mdwn
index 0b704cb..b86579e 100644
--- a/doc/todo/comments_are_not_displayed_on_todo_list_items.mdwn
+++ b/doc/todo/comments_are_not_displayed_on_todo_list_items.mdwn
@@ -1,3 +1,3 @@
-When a new todo item is created on the myrepos "todo" list (here on branchable), none of the comments are viewable. I only noticed you commented on my [post](http://myrepos.branchable.com/todo/config___39__order__39___is_ignored_when___39__jobs__39_____62__1/) when I saw a [new commit](https://github.com/joeyh/myrepos/commits/master). I wasn't able to add another comment there, either (I edited my original comment to try to let you know, but I'm guessing you weren't notified). I'm not the only one who has seen this issue--please see the statement in the last line of this [item](http://myrepos.branchable.com/todo/add-all-git-remotes/).
+When a new todo item is created on the myrepos "todo" list (here on branchable), none of the comments are viewable. I only noticed you commented on my [post](https://myrepos.branchable.com/todo/config___39__order__39___is_ignored_when___39__jobs__39_____62__1/) when I saw a [new commit](https://github.com/joeyh/myrepos/commits/master). I wasn't able to add another comment there, either (I edited my original comment to try to let you know, but I'm guessing you weren't notified). I'm not the only one who has seen this issue--please see the statement in the last line of this [item](https://myrepos.branchable.com/todo/add-all-git-remotes/).
 
 [[done]]
diff --git a/lib/repo b/lib/repo
index 3a4fafd..92c8f21 100644
--- a/lib/repo
+++ b/lib/repo
@@ -1,5 +1,5 @@
 # Adds support for repo repositories.
-# http://source.android.com/source/version-control.html
+# https://source.android.com/source/developing
 
 # To make mr use this file, add a line like this inside the [DEFAULT]
 # section of your ~/.mrconfig
diff --git a/mr b/mr
index 087fbb8..984991f 100755
--- a/mr
+++ b/mr
@@ -578,7 +578,7 @@ Copyright 2007-2011 Joey Hess <joey@kitenet.net>
 
 Licensed under the GNU GPL version 2 or higher.
 
-http://myrepos.branchable.com/
+https://myrepos.branchable.com/
 
 =cut
 
diff --git a/webcheckout b/webcheckout
index e48d9de..1c953db 100755
--- a/webcheckout
+++ b/webcheckout
@@ -17,7 +17,7 @@ appropriate for that repository (git, svn, etc).
 
 The information about the repositories is embedded in the web page using
 the rel=vcs-* microformat, which is documented at
-<http://kitenet.net/~joey/rfc/rel-vcs/>.
+<https://joeyh.name/rfc/rel-vcs/>.
 
 If the optional destdir parameter is specified, VCS programs will be asked
 to check out repositories into that directory. If there are multiple
@@ -61,7 +61,7 @@ Copyright 2009 Joey Hess <joey@kitenet.net>
 
 Licensed under the GNU GPL version 2 or higher.
 
-This program is included in myrepos <http://myrepos.branchable.com/>
+This program is included in myrepos <https://myrepos.branchable.com/>
 
 =cut
 

Update list of distro install commands
Add more distros.
Switch Debian to apt.
Remove some trailing whitespace.
diff --git a/doc/install.mdwn b/doc/install.mdwn
index edfb05d..2278b86 100644
--- a/doc/install.mdwn
+++ b/doc/install.mdwn
@@ -2,7 +2,12 @@
 
 It's a simple perl script, which can be copied anywhere to install.
 
-Debian: `apt-get install myrepos`  
-Homebrew: `brew install mr`  
-FreeBSD: `pkg install myrepos`  
+Debian: `apt install myrepos`
+Ubuntu: `apt install myrepos`
+Fedora: `dnf install myrepos`
 Gentoo: `emerge dev-vcs/mr`
+Arch: `pacman -S myrepos`
+FreeBSD: `pkg install myrepos`
+NetBSD: `pkg_add mr`
+Homebrew: `brew install mr`
+MacPorts: `port install myrepos`

Replace Debian BTS link with myrepos/mr pages for many distros.
diff --git a/doc/todo.mdwn b/doc/todo.mdwn
index 417d7c2..1bbd5df 100644
--- a/doc/todo.mdwn
+++ b/doc/todo.mdwn
@@ -1,6 +1,14 @@
 This is myrepos's todo list. Link items to [[todo/done]] when done.
 
-See also: [Debian BTS](http://bugs.debian.org/mr).
+See also:
+[Debian](https://tracker.debian.org/pkg/myrepos),
+[Ubuntu](https://launchpad.net/ubuntu/+source/myrepos),
+[Fedora](https://apps.fedoraproject.org/packages/myrepos/),
+[Gentoo](https://packages.gentoo.org/package/dev-vcs/mr),
+[AUR](https://aur.archlinux.org/packages/myrepos/)
+([git](https://aur.archlinux.org/packages/myrepos/)),
+[FreeBSD](https://www.freebsd.org/cgi/ports.cgi?stype=all&query=myrepos),
+[NetBSD](http://pkgsrc.se/devel/mr).
 
 [[!inline pages="./todo/* and !./todo/done and !link(done)
 and !*/Discussion" actions=yes postform=yes show=0 archive=yes]]