Only show branches with changes by default

Unless `show-unchanged-branches?' has been set to `#t' in the user's
configuration only branches with pushable or pullable commits are shown.
This commit is contained in:
Tom Willemse 2013-06-07 22:34:27 +02:00
parent a936e985a4
commit b1a2359036
2 changed files with 21 additions and 5 deletions

View file

@ -339,6 +339,13 @@ A plain list of repository names to skip when merging configurations and
installing hooks. installing hooks.
@end defopt @end defopt
@defopt show-unchanged-branches?
A boolean. If @code{#t} all branches will be shown no matter their
state, if @code{#f} (the default) only those branches that either have
commits to push or commits to pull will be shown in the output of the
@samp{list} command.
@end defopt
@node Copying This Manual, Index, Configuration, Top @node Copying This Manual, Index, Configuration, Top
@appendix Copying This Manual @appendix Copying This Manual

View file

@ -22,6 +22,7 @@
#:use-module (ice-9 popen) #:use-module (ice-9 popen)
#:use-module (ice-9 rdelim) #:use-module (ice-9 rdelim)
#:use-module (oop goops) #:use-module (oop goops)
#:use-module (srfi srfi-1)
#:export (<branch> #:export (<branch>
<repository> <repository>
@ -37,6 +38,8 @@
repo-name repo-name
same-repository?)) same-repository?))
(define show-unchanged-branches? #f)
(define-generic print) (define-generic print)
(define-generic same-repository?) (define-generic same-repository?)
@ -136,9 +139,14 @@ sub-directory."
(git-branches dir)))))) (git-branches dir))))))
(define-method (print (branch <branch>)) (define-method (print (branch <branch>))
(format #t " ~a:~15t~d to push and ~d to pull. Last update: ~a~%" (let ((pushable (branch-pushable branch))
(branch-name branch) (branch-pushable branch) (pullable (branch-pullable branch)))
(branch-pullable branch) (branch-updated branch))) (if (or show-unchanged-branches?
(> (+ pushable pullable) 0))
(format #t " ~a:~15t~d to push and ~d to pull. Last update: ~a~%"
(branch-name branch) pushable pullable
(branch-updated branch))
#f)))
(define (repo-state-description repo) (define (repo-state-description repo)
"Return the state of REPO as either clean or dirty. "Return the state of REPO as either clean or dirty.
@ -151,8 +159,9 @@ REPO should be of type `<repository>' and the result is a string."
(begin (begin
(format #t "~a: Worktree is ~a~%" (repo-name repo) (format #t "~a: Worktree is ~a~%" (repo-name repo)
(repo-state-description repo)) (repo-state-description repo))
(for-each print (repo-branches repo)) (when (any identity (map-in-order print (repo-branches repo)))
(newline)) (newline))
#t)
(format #t "~a:~15tnot found at ~s\n" (format #t "~a:~15tnot found at ~s\n"
(repo-name repo) (repo-location repo)))) (repo-name repo) (repo-location repo))))