git's emacs mode automatically finds the root of the worktree, so that
the user doesn't have to. Teach StGit's emacs mode the same trick by
borrowing the git-get-top-dir function from git.
The borrowed code was written by Alexandre Julliard <julliard@winehq.org>.
Signed-off-by: Karl Hasselström <kha@treskal.com>
(defun stgit (dir)
"Manage stgit patches"
(interactive "DDirectory: \n")
(defun stgit (dir)
"Manage stgit patches"
(interactive "DDirectory: \n")
- (switch-to-stgit-buffer dir)
+ (switch-to-stgit-buffer (git-get-top-dir dir))
+(defun git-get-top-dir (dir)
+ "Retrieve the top-level directory of a git tree."
+ (let ((cdup (with-output-to-string
+ (with-current-buffer standard-output
+ (cd dir)
+ (unless (eq 0 (call-process "git" nil t nil
+ "rev-parse" "--show-cdup"))
+ (error "cannot find top-level git tree for %s." dir))))))
+ (expand-file-name (concat (file-name-as-directory dir)
+ (car (split-string cdup "\n"))))))
+
(defun switch-to-stgit-buffer (dir)
"Switch to a (possibly new) buffer displaying StGit patches for DIR"
(setq dir (file-name-as-directory dir))
(defun switch-to-stgit-buffer (dir)
"Switch to a (possibly new) buffer displaying StGit patches for DIR"
(setq dir (file-name-as-directory dir))