ほげにっき このページをアンテナに追加

2009-01-23 TracのTicketをExcelやCSVからインポートするプラグイン

TracのTicketをExcelやCSVからインポートするプラグイン

| 10:42 | TracのTicketをExcelやCSVからインポートするプラグインを含むブックマーク

TicketImportPlugin ? Trac Hacks - Plugins Macros etc.

巷でちょっと話題になっている。ちょうどまとめて大量にTicketを登録する必要があったので試してみた。


Trac Lightningの最新(ベータ版?)には含まれている様だが、自分の環境は純Trac(0.11) on Linuxだったのでpluginを手動でインストールする。


Machine-wide installation(サーバpython環境にインストール)はカンタン。

(for Trac0.10)
easy_install http://trac-hacks.org/svn/ticketimportplugin/0.10
(for Trac0.11)
easy_install http://trac-hacks.org/svn/ticketimportplugin/0.11

Trac環境(インスタンス)毎にインストールしたい場合は TicketImportPlugin ? Trac Hacks - Plugins Macros etc. からeggをダウンロードして、Trac Adminから登録すればよろし。


Excelファイルを扱いたい場合は、別途xlrdというライブラリが必要とのこと。

http://pypi.python.org/packages/source/x/xlrd/xlrd-0.6.1.zip(バージョンは最新ではないかもしれないので注意)をダウンロード、解凍し、xlrdディレクトリをpythonのsite-packagesディレクトリにコピーする。python -c 'import xlrd'を実行してエラーが出なければOK。


Tracを再起動。Trac ADMIN UIのManage Pluginsページより、TicketImportを有効にする。

f:id:digo:20090123085857p:image

これで上部メニューにImportが追加される。

f:id:digo:20090123090356p:image


使用方法はインストールしたTicketImportのページに書かれている。

ざっと要約。


ワークシートは以下を含む必要がある

  • 最初の行にimportするフィールド名
  • 以降の行にimportするデータ

フィールド名として指定できるのは・・・

The fields must be Trac fields. The valid fields for this Trac instance are: ticket or id, summary, reporter, owner, description, type, status, priority, milestone, component, version, resolution, keywords, cc, estimate, billed, remain, and..

おおっ!estimate, billed, remainてのは別pluginで追加したカスタムフィールドなんだが、対応している!

カスタムフィールド対応も嬉しいけど、静的ページだと思っていたヘルプが、カスタムフィールドを見て動的に表示されていたことに、ちょびっと感動(^_^)

使用できるフィールド名

  • ticket or id
  • summary
  • reporter
  • owner
  • description
  • type
  • status
  • priority
  • milestone
  • component
  • version
  • resolution
  • keywords
  • cc
  • 各カスタムフィールド

フィールド名は、大文字小文字は同一視される。


必須フィールドはticketまたはsummary。これがキーになるのだな。

  • summaryをキーにする場合・・・同じsummaryのticketが存在すればフィールドの更新、存在しなければ新規ticketの追加。
  • ticket(id)をキーにする場合・・・同じticket idが存在すればフィールドの更新、ticket idが空ならば新規追加。存在しないticket idが指定された場合はエラー。

summaryをキーにすると、同じsummaryのticketを管理出来ない。自分の環境では重複summaryが存在するのでticketフィールドを使用しなければだわ。。

カスタムレポートをCSVでエクスポート→編集→インポートの流れで大量ticketの更新も簡単に出来てイイ!(^_^)b


では、さっそく試してみよう。

↓みたいなエクセルを作成

f:id:digo:20090123102040p:image

ユーザーにメールアドレスが入っているので黒く塗りつぶしてます。

ちょっとした事情でsummaryに重複した値が入ってるので、ticket列が必要。新規追加なのでticket列は空。このファイルを[File to import:]で選択して、[Upload file and preview import]ボタンを押下!


↓みたいなpreviewが表示される。

f:id:digo:20090123101758p:image

指定されていないフィールドは、Tracで設定されているデフォルト値が設定されるらしい。デフォルト値はTrac Admin UIで指定可能。


previewみてOKならば[Execute import]ボタンを押下!

あっさり成功!(^o^)/


こりゃ便利だ。。

ちなみにチケット更新時にはticket_changeテーブルもちゃんと更新されているみたい。Change Historyにも「Batch update from file <file name>」のコメントでちゃんと追加されていた。今つくっているScrumもどきpluginではticket_changeが重要な情報になるので、これは嬉しい。


採用!(^o^)b

西暦0年

| 01:15 | 西暦0年を含むブックマーク

しっとるけ?シリーズ!!


日付を入力するテキストフィールドに「0000/01/01」を入力したらエラーになりました!とのbug報告が。


これはエラーになってOKなんだな。西暦0年てのは存在しないんだって。西暦は1年から始まって、その前の年は紀元前1年らしい。


試しにJavaで以下のコードを実行すると・・・

public static void main(String[] args) throws ParseException {
    DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
    df.setLenient(false);
    df.parse("0000/01/01");
}

ちゃんとエラーになります。

Exception in thread "main" java.text.ParseException: Unparseable date: "0000/01/01"

ちなみにsetLenient(true)だと・・・0001年扱いになる。何か腑に落ちない?

トラックバック - http://d.hatena.ne.jp/digo/20090123