+(setq magit-repolist-columns
+ '(("Name" 16 magit-repolist-column-ident nil)
+ ("Version" 18 magit-repolist-column-version nil)
+ ("St" 2 magit-repolist-column-dirty nil)
+ ("L<U" 3 mdw-repolist-column-unpulled-from-upstream nil)
+ ("L>U" 3 mdw-repolist-column-unpushed-to-upstream nil)
+ ("Path" 32 magit-repolist-column-path nil)))
+
+(setq magit-repository-directories '(("~/etc/profile" . 0)
+ ("~/src/" . 1)))
+
+(defadvice magit-list-repos (around mdw-dirname () activate compile)
+ "Make sure the returned names are directory names.
+Otherwise child processes get started in the wrong directory and
+there is sadness."
+ (setq ad-return-value (mapcar #'file-name-as-directory ad-do-it)))
+
+(defun mdw-repolist-column-unpulled-from-upstream (_id)
+ "Insert number of upstream commits not in the current branch."
+ (let ((upstream (magit-get-upstream-branch (magit-get-current-branch) t)))
+ (and upstream
+ (let ((n (cadr (magit-rev-diff-count "HEAD" upstream))))
+ (propertize (number-to-string n) 'face
+ (if (> n 0) 'bold 'shadow))))))
+
+(defun mdw-repolist-column-unpushed-to-upstream (_id)
+ "Insert number of commits in the current branch but not its upstream."
+ (let ((upstream (magit-get-upstream-branch (magit-get-current-branch) t)))
+ (and upstream
+ (let ((n (car (magit-rev-diff-count "HEAD" upstream))))
+ (propertize (number-to-string n) 'face
+ (if (> n 0) 'bold 'shadow))))))
+