|
|
@@ -1,6 +1,6 @@ |
|
|
|
;;; emacs.el --- 10sr emacs initialization |
|
|
|
|
|
|
|
;; Time-stamp: <2018-10-17 14:19:04 JST 10sr> |
|
|
|
;; Time-stamp: <2018-10-17 15:16:49 JST 10sr> |
|
|
|
|
|
|
|
;;; Code: |
|
|
|
|
|
|
@@ -2283,6 +2283,7 @@ use for the buffer. It defaults to \"*recetf-show*\"." |
|
|
|
(defun git-walktree--create-buffer (commitish name type) |
|
|
|
"Create and return buffer for COMMITISH:NAME. |
|
|
|
TYPE is target object type." |
|
|
|
;; TODO: Give buffer name as an argument |
|
|
|
(let* ((root (git-walktree--git-plumbing "rev-parse" |
|
|
|
"--show-toplevel")) |
|
|
|
(commitish-display (git-walktree--commitish-fordisplay commitish)) |
|
|
@@ -2676,13 +2677,24 @@ This function do nothing when current line is not ls-tree output." |
|
|
|
(defvar git-walktree-tree-face 'git-walktree-tree-face |
|
|
|
"Face used for tree objects.") |
|
|
|
|
|
|
|
;; TODO: Store as global hash object |
|
|
|
(defvar git-walktree-known-child-revisions '() |
|
|
|
"List of already known child reivions of currnet buffer in sha1 string.") |
|
|
|
(make-variable-buffer-local 'git-walktree-known-child-revisions) |
|
|
|
(put 'git-walktree-known-child-revisions |
|
|
|
'permanent-local |
|
|
|
t) |
|
|
|
(defvar git-walktree-known-child-revisions (make-hash-table :test 'equal) |
|
|
|
"Hash of already known pair of commitid -> list of child commitid.") |
|
|
|
|
|
|
|
(defun git-walktree--put-child (parent child) |
|
|
|
"Register PARENT and CHILD relationship. |
|
|
|
PARENT should be a full SHA-1 object name." |
|
|
|
;; Any way to check if PARENT is a full SHA-1 object name? |
|
|
|
(let ((current (gethash parent git-walktree-known-child-revisions))) |
|
|
|
(unless (member child current) |
|
|
|
(puthash parent |
|
|
|
(cons child |
|
|
|
current) |
|
|
|
git-walktree-known-child-revisions)))) |
|
|
|
|
|
|
|
(defun git-walktree--get-children (parent) |
|
|
|
"Get known children list of PARENT commit. |
|
|
|
PARENT should be a full SHA-1 object name." |
|
|
|
(gethash parent git-walktree-known-child-revisions)) |
|
|
|
|
|
|
|
;; Delete this function |
|
|
|
(defun git-walktree--parent-revision-1 (revision) |
|
|
@@ -2708,8 +2720,8 @@ This function does the following things: |
|
|
|
(with-current-buffer (switch-to-buffer (git-walktree--open-noselect revision |
|
|
|
path |
|
|
|
obj)) |
|
|
|
(add-to-list 'git-walktree-known-child-revisions |
|
|
|
child-revision)))) |
|
|
|
(git-walktree--put-child revision |
|
|
|
child-revision)))) |
|
|
|
|
|
|
|
(defun git-walktree--completing-read-commitish (prompt-format collection) |
|
|
|
"Emit PROMPT-FORMAT and ask user to which commitish of COLLECTION to use. |
|
|
@@ -2764,23 +2776,26 @@ If current path was not found in the parent revision try to go up path." |
|
|
|
(defun git-walktree-known-child-revision () |
|
|
|
"Open known revision of current path." |
|
|
|
(interactive) |
|
|
|
(message "%S" git-walktree-known-child-revisions) |
|
|
|
(if (< (length git-walktree-known-child-revisions) |
|
|
|
1) |
|
|
|
(message "There are no known child revision") |
|
|
|
(let* ((child (git-walktree--completing-read-commitish "There are multiple known childrens. Which to open? (%s)" |
|
|
|
git-walktree-known-child-revisions)) |
|
|
|
(path git-walktree-current-path) |
|
|
|
(obj (git-walktree--resolve-object child path))) |
|
|
|
(cl-assert path) |
|
|
|
(while (not obj) |
|
|
|
(setq path |
|
|
|
(git-walktree--parent-directory path)) |
|
|
|
(setq obj |
|
|
|
(git-walktree--resolve-object child path))) |
|
|
|
(switch-to-buffer (git-walktree--open-noselect child |
|
|
|
path |
|
|
|
obj))))) |
|
|
|
(let* ((commitid (git-walktree--git-plumbing "rev-parse" |
|
|
|
git-walktree-current-commitish)) |
|
|
|
(children (git-walktree--get-children commitid))) |
|
|
|
(message "%S" children) |
|
|
|
(if (< (length children) |
|
|
|
1) |
|
|
|
(message "There are no known child revision") |
|
|
|
(let* ((child (git-walktree--completing-read-commitish "There are multiple known childrens. Which to open? (%s)" |
|
|
|
children)) |
|
|
|
(path git-walktree-current-path) |
|
|
|
(obj (git-walktree--resolve-object child path))) |
|
|
|
(cl-assert path) |
|
|
|
(while (not obj) |
|
|
|
(setq path |
|
|
|
(git-walktree--parent-directory path)) |
|
|
|
(setq obj |
|
|
|
(git-walktree--resolve-object child path))) |
|
|
|
(switch-to-buffer (git-walktree--open-noselect child |
|
|
|
path |
|
|
|
obj)))))) |
|
|
|
|
|
|
|
(defvar git-walktree-mode-map |
|
|
|
(let ((map (make-sparse-keymap))) |
|
|
|