aboutsummaryrefslogtreecommitdiff
path: root/buildbot-revision.el
diff options
context:
space:
mode:
Diffstat (limited to 'buildbot-revision.el')
-rw-r--r--buildbot-revision.el73
1 files changed, 30 insertions, 43 deletions
diff --git a/buildbot-revision.el b/buildbot-revision.el
index 08ba7b1..78703ea 100644
--- a/buildbot-revision.el
+++ b/buildbot-revision.el
@@ -1,15 +1,13 @@
;; -*- lexical-binding: t; -*-
(require 'buildbot-client)
+(require 'buildbot-view)
(defvar-local buildbot-revision-revision-id nil)
(defvar-local buildbot-revision-info nil)
-(defvar buildbot-revision-header-regex "^\\[.*\\]$")
-(define-derived-mode buildbot-revision-mode special-mode "Buildbot revision"
+(define-derived-mode buildbot-revision-mode buildbot-view-mode "Buildbot revision"
"Buildbot view for a revision")
-(define-key buildbot-revision-mode-map "g" 'buildbot-revision-reload)
-
(defun buildbot-revision-buffer-name (revision)
(concat "*buildbot revision " revision "*"))
@@ -41,57 +39,46 @@
(defun buildbot-revision-reload ()
(interactive)
(buildbot-revision-update))
+(define-key buildbot-revision-mode-map "g" 'buildbot-revision-reload)
(defun buildbot-revision-format (revision-info builds)
(concat
- (buildbot-revision-format-info revision-info)
+ (buildbot-view-format-revision-info revision-info)
"\n"
(string-join
- (mapcar 'buildbot-revision-format-build builds)
+ (mapcar 'buildbot-view-format-build builds)
"\n")))
(defun buildbot-revision-get-info (change)
(list (cons 'revision (alist-get 'revision change))
(cons 'author (alist-get 'author change))
(cons 'created-at (buildbot-format-epoch-time
- (alist-get 'created_at
- (alist-get 'sourcestamp change))))
- (cons 'comments (alist-get 'comments change))))
+ (alist-get 'created_at
+ (alist-get 'sourcestamp change))))
+ (cons 'comments (alist-get 'comments change))
+ (cons 'build-stats (buildbot-revision-get-build-stats
+ (alist-get 'builds change)))))
-(defun buildbot-revision-format-info (info)
- (format
- "commit %s\nAuthor: %s\nDate: %s\n\n%s"
- (alist-get 'revision info)
- (alist-get 'author info)
- (alist-get 'created-at info)
- (alist-get 'comments info)))
+(defun buildbot-revision-get-build-stats (builds)
+ (let ((results '((success . 0)
+ (failure . 0)
+ (pending . 0)))
+ status)
+ (seq-do
+ (lambda (build)
+ (setq status (buildbot-build-status build))
+ (setf (alist-get status results)
+ (1+ (alist-get status results))))
+ builds)
+ results))
-(defun buildbot-revision-next-header (n)
- (interactive "p")
- (dotimes (_ n)
- (end-of-line 1)
- (re-search-forward buildbot-revision-header-regex)
- (beginning-of-line 1)))
-(define-key buildbot-revision-mode-map "n" 'buildbot-revision-next-header)
-
-(defun buildbot-revision-previous-header (n)
- (interactive "p")
- (beginning-of-line 1)
- (unless (looking-at buildbot-revision-header-regex)
- (re-search-backward buildbot-revision-header-regex))
- (dotimes (_ n)
- (re-search-backward buildbot-revision-header-regex)))
-(define-key buildbot-revision-mode-map "p" 'buildbot-revision-previous-header)
-
-(defun buildbot-revision-format-build (build)
- (propertize
- (format "\n[%s %s]\n%s"
- (buildbot-get-builder-name-by-id (alist-get 'builderid build))
- (alist-get 'state_string build)
- (string-join
- (mapcar (lambda (test) (alist-get 'test_name test))
- (alist-get 'failed_tests build))
- "\n"))
- 'buildid (alist-get 'id build)))
+(defun buildbot-revision-open-build ()
+ (interactive)
+ (let ((build (get-text-property (point) 'build)))
+ (unless build
+ (error "Not at a build"))
+ (buildbot-build-load build buildbot-revision-info)))
+(define-key buildbot-revision-mode-map (kbd "<return>")
+ 'buildbot-revision-open-build)
(provide 'buildbot-revision)