maaash.jp

what I create

Eagleの回路図にgitのコミットハッシュを埋め込む

Eagleを使って回路設計、基板設計などをしはじめています。
*.sch, *.brd, *.lbr を git レポジトリに追加して開発していると、
pdfにしたり誰かに渡すときに、いつのバージョンのファイルを渡そうとしているのか、
ファイルに記録したい場合があります。

そんな時に、gitのコミットハッシュを埋め込めるといいんじゃないかと思いました。
具体的には git rev-parse --short HEAD の結果。

Eagleには User Language Program という仕組みがあり、

The EAGLE User Language can be used to access the EAGLE data structures and to create a wide variety of output files.

C言語ライクな書式で、回路図内のオブジェクトをいじれたりします。

以下のようなファイルを git-revision.ulp というファイル名で
/Application/EAGLE-6.4.0/ulp/git-revision.ulp に保存します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
string cmd, s, version;
int count = 0;
string git_dir       = argv[ 1 ];
string stdout        = "debug.log";
string revision_file = "git-revision.log";

string GitRevision () {
    if ( version ) {
        return version;
    }

    string git_cmd = "git --git-dir=";
    git_cmd        += git_dir;
    git_cmd        += " rev-parse --short HEAD > ";
    git_cmd        += revision_file;

    int result = system( git_cmd );
    if ( result ) {
        dlgMessageBox( "git rev-parse failed" );
        exit( -1 );
    }
    fileread( version, revision_file );

    return version;
}

if ( ! git_dir ) {
    dlgMessageBox( "provide .git directory as an argument", "OK" );
    exit( -1 );
}

output( stdout, "wt" ) {
    if (schematic) {
        schematic(S) {
            S.parts( P) {
                if ( P.device && P.device.name && ! strstr(P.device.name, "GIT-REVISION") ) {
                    sprintf( s, "VALUE %s %s\n", P.name, GitRevision() );
                    cmd += s;
                    count ++;
                }
            }
        }
    }
}

if ( ! count ) {
    dlgMessageBox( "device named \"GIT-REVISION\" not found", "OK" );
    exit( -1 );
}
exit( cmd );

また、nameが GIT-REVISION であるような部品をつくり、frame の右下の方に置きます。
以下のライブラリに入れています。
git-revision.lbr

置くとこんなふうに見えるでしょう。
スクリーンショット 2013-04-22 19.55.48

ここで git-revision.ulp を実行します。
.gitへのパスを指定してください(今見ている回路図のファイルパスを取れる方法があればよかったんだけど、、多分できないんじゃないか)

1
RUN git-revision path/to/.git

結果はこんな。

スクリーンショット 2013-04-23 9.36.26

よいと思ったら scr ファイルを使うとキーボードショートカットを割り当てられるようなので
そこまでやってもいいかも

Comments