branch: elpa/vc-fossil
commit 5089a965e03e7cae11aba9b8a9d13b4564ec1d02
Author: pdo <pdo>
Commit: pdo <pdo>
Enhanced vc-fossil-dir-extra-headers function.
---
vc/el/vc-fossil.el | 71 +++++++++++++++++++++++++++++++++++++++---------------
1 file changed, 52 insertions(+), 19 deletions(-)
diff --git a/vc/el/vc-fossil.el b/vc/el/vc-fossil.el
index 1941a0e..9ff9442 100644
--- a/vc/el/vc-fossil.el
+++ b/vc/el/vc-fossil.el
@@ -74,6 +74,12 @@ If nil, use the value of `vc-diff-switches'. If t, use no
switches."
(repeat :tag "Argument List" :value ("") string))
:group 'vc-fossil)
+(defcustom vc-fossil-extra-header-fields (list :checkout :tags)
+ "A list of keywords denoting extra header fields to show in the vc-dir
buffer."
+ :type '(set (const :repository) (const :remote-url) (const :synchro)
+ (const :checkout) (const :comment) (const :tags))
+ :group 'vc-fossil)
+
;;; BACKEND PROPERTIES
@@ -165,8 +171,7 @@ If nil, use the value of `vc-diff-switches'. If t, use no
switches."
(eq 'up-to-date (vc-fossil-state file)))
;; TODO: mode-line-string
-;; TODO: dir-printer / dir-extra-headers
-
+;; TODO: dir-printer
(defun vc-fossil-dir-status (dir update-function)
"Get fossil status for all files in a directory"
@@ -212,25 +217,53 @@ If `files` is nil return the status for all files."
(defun vc-fossil-dir-status-files (dir files update-function)
(vc-fossil-dir-status-files-i dir files update-function))
(defun vc-fossil-dir-status-files (dir files default-state update-function)
- (vc-fossil-dir-status-files-i dir files update-function)))
-
-(defun vc-fossil-checkout-model (files) 'implicit)
+ (vc-fossil-dir-status-files-i dir files update-function)))
(defun vc-fossil-dir-extra-headers (dir)
- (let* ((info (vc-fossil--run "info"))
- (posco (string-match "checkout: *\\([0-9a-fA-F]+\\) \\([-0-9: ]+
UTC\\)" info))
- (coid (substring (match-string 1 info) 0 9))
- (cots (format-time-string "%Y-%m-%d %H:%M:%S %Z"
- (safe-date-to-time (match-string 2 info))))
- (postag (string-match "tags: *\\(.*\\)" info))
- (tags (match-string 1 info))
- )
- (concat
- (propertize "Checkout : " 'face 'font-lock-type-face)
- (propertize (concat coid " " cots) 'face 'font-lock-variable-name-face)
- "\n"
- (propertize "Tags : " 'face 'font-lock-type-face)
- (propertize tags 'face 'font-lock-variable-name-face))))
+ (let ((info (vc-fossil--run "info"))
+ (settings (vc-fossil--run "settings"))
+ (lines nil))
+ (dolist (field vc-fossil-extra-header-fields)
+ (unless (null lines)
+ (push "\n" lines))
+ (cond ((eql field :repository)
+ (string-match "repository: *\\(.*\\)$" info)
+ (let ((repo (match-string 1 info)))
+ (push (propertize "Repository : " 'face 'font-lock-type-face)
lines)
+ (push (propertize repo 'face 'font-lock-variable-name-face)
lines)))
+ ((eql field :remote-url)
+ (let ((remote-url (car (split-string (vc-fossil--run
"remote-url")))))
+ (push (propertize "Remote URL : " 'face 'font-lock-type-face)
lines)
+ (push (propertize remote-url 'face
'font-lock-variable-name-face) lines)))
+ ((eql field :synchro)
+ (let* ((as-match (string-match "^autosync.+\\([[:digit:]]\\)$"
settings))
+ (autosync (if as-match (match-string 1 settings) "0"))
+ (dp-match (string-match "^dont-push.+\\([[:digit:]]\\)$"
settings))
+ (dontpush (if dp-match (match-string 1 settings) "0")))
+ (push (propertize "Synchro : " 'face 'font-lock-type-face)
lines)
+ (push (propertize (concat "autosync=" autosync) 'face
'font-lock-variable-name-face) lines)
+ (push (propertize (concat " dont-push=" dontpush) 'face
'font-lock-variable-name-face) lines)))
+ ((eql field :checkout)
+ (let* ((posco (string-match "checkout: *\\([0-9a-fA-F]+\\)
\\([-0-9: ]+ UTC\\)" info))
+ (coid (substring (match-string 1 info) 0 10))
+ (cots (format-time-string "%Y-%m-%d %H:%M:%S %Z"
+ (safe-date-to-time (match-string
2 info))))
+ (child-match (string-match "child: *\\(.*\\)$" info))
+ (leaf (if child-match "NON-LEAF" "leaf")))
+ (push (propertize "Checkout : " 'face 'font-lock-type-face)
lines)
+ (push (propertize (concat coid " " cots) 'face
'font-lock-variable-name-face) lines)
+ (push (propertize (concat " (" leaf ")") 'face
'font-lock-variable-name-face) lines)))
+ ((eql field :comment)
+ (string-match "comment: *\\(.*\\)$" info)
+ (let ((msg (match-string 1 info)))
+ (push (propertize "Comment : " 'face 'font-lock-type-face)
lines)
+ (push (propertize msg 'face 'font-lock-variable-name-face)
lines)))
+ ((eql field :tags)
+ (string-match "tags: *\\(.*\\)" info)
+ (let ((tags (match-string 1 info)))
+ (push (propertize "Tags : " 'face 'font-lock-type-face)
lines)
+ (push (propertize tags 'face 'font-lock-variable-name-face)
lines)))))
+ (apply #'concat (nreverse lines))))
;;; STATE-CHANGING FUNCTIONS