Github の Notification を ON にしてなかったので気づかなかったが
最近全然触ってなかった org-redmine を久々に見たら
なんか pull request きてる!!!
いやー pull request 来たの初めてなんで嬉しいですね。
お相手はロシアの方。うむ。わからん。
簡単な修正だったためか、ボタン一発で簡単な automatically merge ができるらしい。便利な世の中や。
そんなわけで merge しました。修正はそこまで難しいものではないんですが
なんかこう、自分の作ったものを必要としてくれたって実感できますよね。そんな気がしてます。
merge してみたが...
で、merge したあとはローカルに git pull。さっそく test を書きました
(desc "org-redmine-insert-property disable insertion") (expect "\ * hoge " (with-current-buffer (exps-tmpbuf) (change-buffer-to 'org-mode) (let ((org-redmine-template-property-use nil)) (insert "* hoge\n") (org-redmine-insert-property fixture-issue) (buffer-string))))
テストの中を見てもわかるように、今回の修正は
org-redmine-template-property-use が nil なら PROPERTIES を挿入しない
というものです。で、こいつを実行すると
27 :org-redmine-insert-property template-property is empty 28 :OK 29 :org-redmine-insert-property disable insertion 30 :ERROR: (no-catch --cl-block-org-redmine-insert-property-- nil) 31 :org-redmine-get-issue to blank buffer 32 :OK
なんとエラーが出てしまいました。no-catch ?わからん。
調べてみよう
実際に修正されたコードを見るとこんな感じ
(defun org-redmine-insert-property (issue) "" + (unless org-redmine-template-property-use + (return-from org-redmine-insert-property)) (let* ((properties (or org-redmine-template-property (nth 1 org-redmine-template-set) '()))
ふむふむ。コードから見るに、nil であれば return する。特におかしくはない。
というか、おかしくないと思ったから merge したんですけど。しかし少し違った。
return-from は、実は初めてみたもので、名前から動作を勝手に想像してたんですが
もうすこし調べてみようということで M-x describe-function return-from
This is compatible with Common Lisp, but note that `defun' and `defmacro' do not create implicit blocks as they do in Common Lisp
ということでした。Common Lisp であれば上の書き方でも問題ないが、elisp の場合は
- defun が暗黙的に block とならない
- つまり return-from を捕まえる catch が必要
ということで、前述の「no-catch」エラーが出たというわけか。ほほー。
修正
そんなわけで、catch 書いてもいいんだけどそれだと面白くないので、
暗黙的に block で囲んでくれる「defun*」を使いました
-(defun org-redmine-insert-property (issue) +(defun* org-redmine-insert-property (issue)
これでテストを通すと、見事 pass しました。おめでとうございます。
まとめ
- pull request ありがとうございました
- テストいいね!
最近触ってなかったんですが、これをきっかけに開発再開しようかなー。
POST できればかっこいいんだけど、そこまでいるかなー