Monthly Archives: 10月 2010

TortoiseSVNでバージョン情報などを自動で埋め込む

このエントリーをはてなブックマークに追加
はてなブックマーク - TortoiseSVNでバージョン情報などを自動で埋め込む
Share on Facebook

オープンソースコード等を見ていると、リビジョン番号などがソースに記載してあることがあります。 どうやらSubversion(やCVS)で実現できるようです。

私は基本的にWindowsでTortoiseSVNを使ってリポジトリのやりとりをしているので、その設定方法をメモしておきます。

手順

1.TortoiseSVNの設定

今回は例としてPHPファイルが自動変換されるよう設定します。

  1. svn管理下のファイルを右クリック->TortoiseSVN->設定
  2. [一般]カテゴリ内の、「Subversionの設定ファイル」の横にある[編集]ボタンをクリック
  3. テキストエディタでconfigファイルが開くので、以下のように修正する
enable-auto-props = yes    ←コメントアウトを外す

[auto-props]
*.php = svn:keywords=Id Date Author Rev

2.対象ファイルにsvnキーワードを埋め込む

キーワードは「$Id$」のように、「$」で囲みます。 使用可能なキーワードは Subversion キーワードの展開 – とみぞーノート あたりを参考にしてください。

/**
 * テストクラス
 * 
 * @author  $Author$
 * @version $Id$
 */
class Uso
{
    ...
}

3.コミットしてみる

ファイルをコミットしてみて、リポジトリブラウザで参照して置換されていれば成功です。

/**
 * テストクラス
 * 
 * @author  $Author: Senda Keijiro $
 * @version $Id: uso.php 13 2010-10-27 05:33:51Z Senda Keijiro $
 */
class Uso
{
    ...
}

注意

自動置換は上記設定を行った以後に作られたファイルのみに行われます。 既存のファイルも自動反映したい場合は、ファイル毎に設定する必要があります。

  1. 既存のファイルを選択して右クリック
  2. [Subversion]タブ->[属性]ボタン
  3. 恐らく未設定なので、[新規]ボタンをクリック
  4. [属性名]に「svn:keywords」、[属性値]に「Id Author Rev Date」(1単語ずつ改行)を書いて[OK]

これで、ファイルをコミットすると自動でキーワードが置換されるようになります。

参考

tracのレポートでカラムの表示・非表示を切り替える

このエントリーをはてなブックマークに追加
はてなブックマーク - tracのレポートでカラムの表示・非表示を切り替える
Share on Facebook

業務上tracを使っています。

チケットを抽出するSQLをいじったとき、SELECTしたいカラムが画面に入らないことがよくありました。ヘルプを見てもよくわからなかったので、メモしておきます。

項目の表示・非表示を切替え方

  • SELECT句のASで指定する別名の先頭に「_ (アンダーバー)」をつけると、画面では非表示になります。
  • レポート最下部の「異なるフォーマットでダウンロード:」からRSSやCSVでダウンロードすると、中に含まれていることがわかります。

サンプル

SELECT
    p.value     AS __color__
  , version     AS __group__
  , id          AS ticket
  , summary     AS 概要
  , component   AS コンポーネント
  , milestone   AS マイルストーン
  , t.type      AS 分類
  , owner       AS 担当者
  , status      AS ステータス
  , time        AS 登録日付
  , changetime  AS 更新日付
  , description AS _説明        -- 画面には非表示
  , reporter    AS _報告者      -- 画面には非表示
FROM
    ticket t
    LEFT JOIN enum p 
    ON p.name = t.priority AND p.type = 'priority'
WHERE
    status <> 'closed'
    AND version = '2.0'
ORDER BY
    (version IS NULL)
  , version
  , CAST(p.value AS int)
  , t.type
  , time

HTML5テンプレート

このエントリーをはてなブックマークに追加
はてなブックマーク - HTML5テンプレート
Share on Facebook

遅ればせながら、HTML5の勉強を始めました。divタグだらけの(X)HTMLに比べ、意味のあるタグで構成できるようになり、可読性が上がっています。願わくばHTML5の普及後、クロスブラウザ対策という雑用から解放されますように。

さしあたり、HTML5でページを作るときの最小構成をメモしておきます。The W3C Markup Validation Serviceで問題ないことを確認しています。

<!DOCTYPE HTML>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <meta name="description" content="HTML5 Tamplate" />
    <meta name="keywords" content="HTML,HTML5,template" />
    <link rel="stylesheet" href="sample.css" type="text/css" media="all">
    <link href="favicon.png" rel="icon" type="image/png">
    <link href="favicon.ico" rel="shortcut icon" type="image/vnd.microsoft.icon">
    <title>html 5 sample</title>
    <!--[if lt IE 9]>
    <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->
</head>
<body>
    <header>header</header>
    <nav>nav</nav>
    <section>
        <article>
            <header>
                <h1>Heading 1 of article #1</h1>
            </header>
            <section>
                <p>paragraph 1</p>
            </section>
        </article>
    </section>
    <footer>footer</footer>
</body>
</html>

補足

  • HTML5の新要素をIE9未満でも認識できるよう、”html5.js”をロードしています。
  • faviconの指定が2行あるのはIE用とそれ以外用です(たぶん)

参考

PHPのDBテストに役立つツール: Phactory

このエントリーをはてなブックマークに追加
はてなブックマーク - PHPのDBテストに役立つツール: Phactory
Share on Facebook

Phactory

Phactory – A Database Factory for PHP Unit Tests

RoRにヒントを得たPHPのDBテストツールです。DBに簡単にテストデータの出し入れができるので、DB関連のテスト時に威力を発揮します。

  • O/Rマッパーを利用してオブジェクト指向的にDBとのデータ交換が可能
  • テストデータをテストコードに埋め込めることができる
  • ブループリント(blueprints)により、ダミーデータや連番のテストデータが簡単に作成できる

PHPUnit拡張のDBTestは、別ファイルでフィクスチャを用意しなければならなかったり、おまじないコードが長すぎて手動では絶対に書けないものだったりし、非常に使い勝手が悪いです。Phactoryはこうした不満の解消に役立ちそうです。

まだバージョンは 0.1.0 ということですが、これからの発展が期待されます。

Smartyテンプレート内でissetやemptyが使えない場合

このエントリーをはてなブックマークに追加
はてなブックマーク - Smartyテンプレート内でissetやemptyが使えない場合
Share on Facebook

テンプレート内のif文で「isset()」や「empty()」などのPHP関数を使いたかったのですが、エラーになってしまいました。

どうやら、テンプレートのどこかで $default_modifiers を設定すると、使えなくなってしまうようです。 私の場合はEC CUBE改造中にこの問題にぶつかりました。grepしてみたら、/data/class/SC_View.php あたりで設定してしまっている模様。

対策としては、「{if isset($var|smarty:nodefaults)}」のように修飾子を追加して、default_modifiersを無効にすると良いようです。

修飾子のルールが未だによくわかっていないので、なぜこれを追加すると動くのかも理解していません。 (この仕様はあまりSmartとは思えないです)

参考

Smartyでdefault_modifiers指定時に{debug}を使う方法 | twk @ ふらっと