| @@ -1,6 +1,6 @@ | |||||
| ;;; emacs.el --- 10sr emacs initialization | ;;; emacs.el --- 10sr emacs initialization | ||||
| ;; Time-stamp: <2018-10-17 18:45:09 JST 10sr> | |||||
| ;; Time-stamp: <2018-10-18 14:20:26 JST 10sr> | |||||
| ;;; Code: | ;;; Code: | ||||
| @@ -2329,6 +2329,7 @@ TYPE is target object type." | |||||
| (defun git-walktree--open-treeish (commitish path treeish) | (defun git-walktree--open-treeish (commitish path treeish) | ||||
| "Open git tree buffer of TREEISH." | "Open git tree buffer of TREEISH." | ||||
| (cl-assert path) | (cl-assert path) | ||||
| (cl-assert treeish) | |||||
| (let* (point-tree-start | (let* (point-tree-start | ||||
| (type (git-walktree--git-plumbing "cat-file" | (type (git-walktree--git-plumbing "cat-file" | ||||
| "-t" | "-t" | ||||
| @@ -2338,55 +2339,57 @@ TYPE is target object type." | |||||
| (cl-assert (member type | (cl-assert (member type | ||||
| '("commit" "tree"))) | '("commit" "tree"))) | ||||
| (with-current-buffer buf | (with-current-buffer buf | ||||
| (buffer-disable-undo) | |||||
| ;; For running git command go back to repository root | |||||
| (cd git-walktree-repository-root) | |||||
| (save-excursion | |||||
| (let ((inhibit-read-only t)) | |||||
| (with-temp-buffer | |||||
| (if commitish | |||||
| ;; TODO: Somehow color will be diasbled | |||||
| ;; TODO: branch info after commit sha1 (like (HEAD -> master)) | |||||
| ;; not appear | |||||
| (progn (git-walktree--call-process nil | |||||
| "-c" | |||||
| "color.ui=always" | |||||
| "show" | |||||
| "--no-patch" | |||||
| "--color=always" | |||||
| "--pretty=short" | |||||
| commitish) | |||||
| (ansi-color-apply-on-region (point-min) | |||||
| (point)) | |||||
| (insert "\n") | |||||
| (insert (format "Contents of '%s:%s':\n" | |||||
| (git-walktree--commitish-fordisplay commitish) | |||||
| path))) | |||||
| (unless (string= treeish | |||||
| git-walktree-object-id) | |||||
| (buffer-disable-undo) | |||||
| ;; For running git command go back to repository root | |||||
| (cd git-walktree-repository-root) | |||||
| (save-excursion | |||||
| (let ((inhibit-read-only t)) | |||||
| (with-temp-buffer | |||||
| (if commitish | |||||
| ;; TODO: Somehow color will be diasbled | |||||
| ;; TODO: branch info after commit sha1 (like (HEAD -> master)) | |||||
| ;; not appear | |||||
| (progn (git-walktree--call-process nil | |||||
| "-c" | |||||
| "color.ui=always" | |||||
| "show" | |||||
| "--no-patch" | |||||
| "--color=always" | |||||
| "--pretty=short" | |||||
| commitish) | |||||
| (ansi-color-apply-on-region (point-min) | |||||
| (point)) | |||||
| (insert "\n") | |||||
| (insert (format "Contents of '%s:%s':\n" | |||||
| (git-walktree--commitish-fordisplay commitish) | |||||
| path))) | |||||
| (insert (format "Contents of treeish object '%s:\n" | (insert (format "Contents of treeish object '%s:\n" | ||||
| treeish))) | treeish))) | ||||
| (setq point-tree-start (point)) | |||||
| (git-walktree--call-process nil | |||||
| "ls-tree" | |||||
| ;; "-r" | |||||
| "--abbrev" | |||||
| treeish) | |||||
| (git-walktree--replace-into buf)))) | |||||
| (git-walktree-mode) | |||||
| (set-buffer-modified-p nil) | |||||
| (setq git-walktree-current-commitish commitish) | |||||
| (setq git-walktree-current-path path) | |||||
| (setq git-walktree-object-id treeish) | |||||
| (let ((dir (expand-file-name path git-walktree-repository-root))) | |||||
| (when (and git-walktree-try-cd | |||||
| (file-directory-p dir)) | |||||
| (cd dir))) | |||||
| (when (= (point) (point-min)) | |||||
| (goto-char point-tree-start) | |||||
| (git-walktree-mode--goto-file) | |||||
| ) | |||||
| ) | |||||
| (setq point-tree-start (point)) | |||||
| (git-walktree--call-process nil | |||||
| "ls-tree" | |||||
| ;; "-r" | |||||
| "--abbrev" | |||||
| treeish) | |||||
| (git-walktree--replace-into buf)))) | |||||
| (git-walktree-mode) | |||||
| (set-buffer-modified-p nil) | |||||
| (setq git-walktree-current-commitish commitish) | |||||
| (setq git-walktree-current-path path) | |||||
| (setq git-walktree-object-id treeish) | |||||
| (let ((dir (expand-file-name path git-walktree-repository-root))) | |||||
| (when (and git-walktree-try-cd | |||||
| (file-directory-p dir)) | |||||
| (cd dir))) | |||||
| (when (= (point) (point-min)) | |||||
| (goto-char point-tree-start) | |||||
| (git-walktree-mode--goto-file) | |||||
| ) | |||||
| )) | |||||
| buf)) | buf)) | ||||
| (defun git-walktree--call-process (&optional infile &rest args) | (defun git-walktree--call-process (&optional infile &rest args) | ||||
| @@ -2406,48 +2409,52 @@ Result will be inserted into current buffer." | |||||
| ?w | ?w | ||||
| (defun git-walktree--open-blob (commitish path blob) | (defun git-walktree--open-blob (commitish path blob) | ||||
| "Open BLOB object." | "Open BLOB object." | ||||
| (cl-assert commitish) | |||||
| (cl-assert path) | |||||
| (cl-assert blob) | |||||
| (let* ((type (git-walktree--git-plumbing "cat-file" | (let* ((type (git-walktree--git-plumbing "cat-file" | ||||
| "-t" | "-t" | ||||
| blob)) | blob)) | ||||
| (buf (git-walktree--create-buffer commitish path type))) | (buf (git-walktree--create-buffer commitish path type))) | ||||
| (cl-assert (string= type "blob")) | (cl-assert (string= type "blob")) | ||||
| (with-current-buffer buf | (with-current-buffer buf | ||||
| ;; TODO: Do nothing when blob already loaded | |||||
| ;; For running git command go back to repository root | |||||
| (cd git-walktree-repository-root) | |||||
| (let ((inhibit-read-only t)) | |||||
| (with-temp-buffer | |||||
| (git-walktree--call-process nil | |||||
| "cat-file" | |||||
| "-p" | |||||
| blob) | |||||
| (git-walktree--replace-into buf))) | |||||
| (setq git-walktree-buffer-file-name | |||||
| (concat (git-walktree--git-plumbing "rev-parse" | |||||
| "--show-toplevel") | |||||
| "/git@" | |||||
| commitish | |||||
| ":" | |||||
| path)) | |||||
| (setq buffer-file-name | |||||
| git-walktree-buffer-file-name) | |||||
| (normal-mode t) | |||||
| ;; For asking filename when C-xC-s | |||||
| (setq buffer-file-name nil) | |||||
| (set-buffer-modified-p t) | |||||
| (setq git-walktree-current-commitish commitish) | |||||
| (setq git-walktree-current-path path) | |||||
| (setq git-walktree-object-id blob) | |||||
| (let ((dir (expand-file-name (or (file-name-directory path) | |||||
| ".") | |||||
| git-walktree-repository-root))) | |||||
| (when (and git-walktree-try-cd | |||||
| (file-directory-p dir)) | |||||
| (cd dir))) | |||||
| (view-mode 1) | |||||
| ) | |||||
| (unless (string= blob | |||||
| git-walktree-object-id) | |||||
| ;; For running git command go back to repository root | |||||
| (cd git-walktree-repository-root) | |||||
| (let ((inhibit-read-only t)) | |||||
| (with-temp-buffer | |||||
| (git-walktree--call-process nil | |||||
| "cat-file" | |||||
| "-p" | |||||
| blob) | |||||
| (git-walktree--replace-into buf))) | |||||
| (setq git-walktree-buffer-file-name | |||||
| (concat (git-walktree--git-plumbing "rev-parse" | |||||
| "--show-toplevel") | |||||
| "/git@" | |||||
| commitish | |||||
| ":" | |||||
| path)) | |||||
| (setq buffer-file-name | |||||
| git-walktree-buffer-file-name) | |||||
| (normal-mode t) | |||||
| ;; For asking filename when C-xC-s | |||||
| (setq buffer-file-name nil) | |||||
| (set-buffer-modified-p t) | |||||
| (setq git-walktree-current-commitish commitish) | |||||
| (setq git-walktree-current-path path) | |||||
| (setq git-walktree-object-id blob) | |||||
| (let ((dir (expand-file-name (or (file-name-directory path) | |||||
| ".") | |||||
| git-walktree-repository-root))) | |||||
| (when (and git-walktree-try-cd | |||||
| (file-directory-p dir)) | |||||
| (cd dir))) | |||||
| (view-mode 1) | |||||
| )) | |||||
| buf)) | buf)) | ||||
| ;; TODO: Store view history | ;; TODO: Store view history | ||||
| @@ -2457,6 +2464,7 @@ Result will be inserted into current buffer." | |||||
| When PATH was given and non-nil open that, otherwise open root tree. | When PATH was given and non-nil open that, otherwise open root tree. | ||||
| When OBJECT was given and non-nil, assume that is the object of COMMITISH:PATH | When OBJECT was given and non-nil, assume that is the object of COMMITISH:PATH | ||||
| without checking it." | without checking it." | ||||
| (cl-assert commitish) | |||||
| (let ((type (git-walktree--git-plumbing "cat-file" | (let ((type (git-walktree--git-plumbing "cat-file" | ||||
| "-t" | "-t" | ||||
| commitish))) | commitish))) | ||||
| @@ -2485,7 +2493,8 @@ without checking it." | |||||
| (defun git-walktree--resolve-object (commitish path) | (defun git-walktree--resolve-object (commitish path) | ||||
| "Return object id of COMMITISIH:PATH. | "Return object id of COMMITISIH:PATH. | ||||
| If path is equal to \".\" return COMMITISH's tree object" | |||||
| If path is equal to \".\" return COMMITISH's tree object | |||||
| PATH will be always treated as relative to repository root." | |||||
| ;; TODO: use --full-tree | ;; TODO: use --full-tree | ||||
| (cl-assert commitish) | (cl-assert commitish) | ||||
| (cl-assert path) | (cl-assert path) | ||||