Thanks Driven Life

日々是感謝

初めて Pull Request が来た & しかしエラーが出るので修正

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 の場合は

  1. defun が暗黙的に block とならない
  2. つまり return-from を捕まえる catch が必要

ということで、前述の「no-catch」エラーが出たというわけか。ほほー。

修正

そんなわけで、catch 書いてもいいんだけどそれだと面白くないので、
暗黙的に block で囲んでくれる「defun*」を使いました

-(defun org-redmine-insert-property (issue)
+(defun* org-redmine-insert-property (issue)

これでテストを通すと、見事 pass しました。おめでとうございます。

まとめ

  • pull request ありがとうございました
  • テストいいね!

最近触ってなかったんですが、これをきっかけに開発再開しようかなー。
POST できればかっこいいんだけど、そこまでいるかなー