Init-Files/site-lisp/phabricator.el
2019-03-14 10:08:40 -07:00

61 lines
2.7 KiB
EmacsLisp

;;; phabricator.el --- utils for jumping/navigating to phabricator
(require 'tbgX) ;; fb-find-repo-root
(require 'dired)
;;;###autoload
;; You need to ssh to your devbox with tunneling so that your ssh
;; session can run commands on your local machine i.e.:
;; `ssh -R12345:localhost:22 {your sandbox}`
(defvar phabricator-ssh-port "12345"
"default ssh port for calling into 'open' with the uri")
(defvar phabricator-diffusion-repo-alist
'(("admin" . "E/browse/admin/")
("dataswarm-hg" . "E/browse/projects/data/dataswarm/")
("dataswarm-git" . "E/browse/projects/data/dataswarm/")
("www" . "E/browse/tfb/trunk/www/")
("www-git" . "E/browse/tfb/trunk/www/")
("www-hg" . "E/browse/tfb/trunk/www/")
("configerator" . "CF/browse/master/")
("configerator-hg" . "CF/browse/master/")
("configerator-dsi" . "CFDSI/browse/master/")
("fbcode" . "FBCODE/browse/master/")
("fbobjc" . "FBOBJC/browse/master/")
("fbsource" . "FBS/browse/master/")
("opsfiles" . "O/browse/opsfiles/branches/PROD/")
("opsfiles-git" . "O/browse/opsfiles/branches/PROD/")
("fbandroid" . "FA/browse/master/")
("si_sigma" . "SIGMA/browse/master/"))
"repo-alist for determining the appropriate path to phabricator")
(defun phabricator-diffusion-url (beg end)
"Retrieves the corresponding diffusion (browse) URL for the current file,
prints it in the minibuffer (via message), and puts the URL on the
clipboard."
(interactive (if (use-region-p)
(list (region-beginning) (region-end))
(list nil nil)))
(flet ((line-num (pt)
(save-excursion
(goto-char pt)
(beginning-of-line)
(number-to-string (1+ (count-lines 1 (point)))))))
(let* ((file-name (file-truename
(or (buffer-file-name) (dired-file-name-at-point))))
(repo-path (directory-file-name (fb-find-repo-root file-name)))
(repo-name (file-name-nondirectory repo-path))
(rel-path (substring file-name (1+ (length repo-path))))
(diffusion-prefix "https://phabricator.fb.com/diffusion/")
(lines (if beg (concat "$" (line-num beg) "-" (line-num end)) ""))
(url (concat (concat diffusion-prefix
(cdr (assoc repo-name phabricator-diffusion-repo-alist))
rel-path lines))))
(with-temp-buffer
(message url)
(insert url)
(clipboard-kill-ring-save (point-min) (point-max))))))
(provide 'phabricator)
;;; phabricator.el ends here