bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#13069: 24.3.50; vc-dir: Unify git stashing and bzr shelving


From: Jambunathan K
Subject: bug#13069: 24.3.50; vc-dir: Unify git stashing and bzr shelving
Date: Mon, 03 Dec 2012 20:31:56 +0530

"Works-for-me" changes in my .emacs to uniformly shelf/unshelve changes
in git and bzr backends.

You can install the following changes and in a *vc-dir* (git/bzr) buffer
you can do

f s => stash
f S => snapshot
f p => pop

The patch uses `vc-call-backend' for each of the above operations.
There is also a `vc-stash-name' function to get the latest stash name.

The changes for "works-for-me".  It would be good to have
"works-for-all" equivalent of this functionality in vanilla Emacs.

----------------------------------------------------------------------

;; Unify git stashing and bzr shelving

;; Put stash related operations on a `f' prefix.
(defvar vc-dir-stash-map
  (let ((map (make-sparse-keymap)))
    (define-key map "s" 'vc-stash)
    (define-key map "S" 'vc-stash-snapshot)
    (define-key map "p" 'vc-stash-pop)
    map))

(fset 'vc-dir-stash-map vc-dir-stash-map)

(add-hook 'vc-dir-mode-hook
          (lambda ()
            (define-key vc-dir-mode-map "f" 'vc-dir-stash-map)))

;; Generic vc-stash callbacks.
(require 'vc)
(defun vc-stash (name)
  "Stash current working tree."
  (interactive "sName: ")
  (let* ((vc-fileset (vc-deduce-fileset t)) ;FIXME: Why t? --Stef
         (backend (car vc-fileset))
         (files (cadr vc-fileset)))
    (vc-call-backend backend 'stash name)))

(defun vc-stash-snapshot ()
  "Take a snapshot of working tree."
  (interactive)
  (let* ((vc-fileset (vc-deduce-fileset t)) ;FIXME: Why t? --Stef
         (backend (car vc-fileset))
         (files (cadr vc-fileset)))
    (vc-call-backend backend 'stash-snapshot)))

(defun vc-stash-pop ()
  "Pop newest stash."
  (interactive)
  (let* ((vc-fileset (vc-deduce-fileset t)) ;FIXME: Why t? --Stef
         (backend (car vc-fileset))
         (files (cadr vc-fileset))
         (name (vc-stash-name)))
    (when name
      (vc-call-backend backend 'stash-pop name))))

(defun vc-stash-name ()
  "Name of the stash on top."
  (let* ((vc-fileset (vc-deduce-fileset t)) ;FIXME: Why t? --Stef
         (backend (car vc-fileset))
         (files (cadr vc-fileset)))
    (vc-call-backend backend 'stash-name)))

;; Bzr vc-stash callbacks.
(defalias 'vc-bzr-stash 'vc-bzr-shelve)
(defalias 'vc-bzr-stash-snapshot 'vc-bzr-shelve-snapshot)
(defalias 'vc-bzr-stash-apply 'vc-bzr-shelve-apply)

(defun vc-bzr-stash-name ()
  (let* ((name (car (vc-bzr-shelve-list)))
         (id (when (and name (string-match "^ +\\([0-9]+\\):" name))
               (match-string 1 name))))
    id))

(defun vc-bzr-stash-pop (name)
  (interactive)
  (vc-bzr-shelve-apply name))

;; Git vc-stash callbacks.
(defun vc-git-stash-name ()
  (let* ((name (car (vc-git-stash-list)))
         (id (when (and name (string-match "^ +\\({[0-9]+}\\):" name))
               (match-string 1 name))))
    (format "stash@%s" id)))


In GNU Emacs 24.3.50.8 (i686-pc-linux-gnu, X toolkit, Xaw3d scroll bars)
 of 2012-12-03 on debian-6.05
Bzr revision: 111072 cyd@gnu.org-20121203062306-87uj2za1hu2dynaj
Windowing system distributor `The X.Org Foundation', version 11.0.10707000
Important settings:
  value of $LANG: en_IN
  locale-coding-system: iso-latin-1-unix
  default enable-multibyte-characters: t






reply via email to

[Prev in Thread] Current Thread [Next in Thread]