Revision | 4740 (tree) |
---|---|
Time | 2011-11-21 20:34:50 |
Author | (del#1144) |
SVNリビジョンのチェック方法を変更
@@ -9,43 +9,27 @@ | ||
9 | 9 | |
10 | 10 | using namespace std; |
11 | 11 | |
12 | -// Get revision fron "entries" file. | |
13 | -int get_svn_revision(char *path) { | |
14 | - BOOL ret; | |
15 | - CStdioFile csf; | |
16 | - CString cs, filename; | |
17 | - int format = -1; | |
12 | +int get_svn_revision(char *svnversion, char *path) { | |
13 | + FILE *fp; | |
14 | + char command[MAX_PATH*2]; | |
15 | + char result[32]; | |
18 | 16 | int revision = -1; |
19 | 17 | |
20 | - filename = path; | |
21 | - if (filename.Right(1) != "\\") { | |
22 | - filename += "\\"; | |
23 | - } | |
24 | - filename += ".svn\\entries"; // [top of source tree]\.svn\entries | |
25 | - | |
26 | - ret = csf.Open(filename, CFile::modeRead); | |
27 | - if (ret == FALSE) { | |
18 | + // subversion 1.7 から .svn\entries のフォーマットが変わったため、 | |
19 | + // .svn\entries を直接読み込むのをやめ、 | |
20 | + // svnversion.exe コマンドを呼び出した結果を返す | |
21 | + _snprintf_s(command, sizeof(command), _TRUNCATE, "%s -n %s", svnversion, path); | |
22 | + if ((fp = _popen(command, "rt")) == NULL ) { | |
28 | 23 | return -1; |
29 | 24 | } |
30 | 25 | |
31 | - csf.SeekToBegin(); | |
32 | - | |
33 | - // line 1 | |
34 | - csf.ReadString(cs); | |
35 | - format = atoi(cs); | |
36 | - | |
37 | - if (format == 8 || format == 9 || format == 10) { | |
38 | - // skip line 2 name, 3 kind | |
39 | - csf.ReadString(cs); | |
40 | - csf.ReadString(cs); | |
41 | - | |
42 | - // line 4 revision | |
43 | - csf.ReadString(cs); | |
44 | - revision = atoi(cs); | |
26 | + while(!feof(fp)){ | |
27 | + fgets(result, sizeof(result), fp); | |
28 | + revision = atoi(result); | |
29 | + break; | |
45 | 30 | } |
31 | + _pclose(fp); | |
46 | 32 | |
47 | - csf.Close(); | |
48 | - | |
49 | 33 | return revision; |
50 | 34 | } |
51 | 35 |
@@ -105,16 +89,17 @@ | ||
105 | 89 | int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) |
106 | 90 | { |
107 | 91 | int revision = -1; |
108 | - char *input, *output; | |
92 | + char *svnversion, *input, *output; | |
109 | 93 | |
110 | - if (argc != 3) { | |
111 | - printf("USAGE: %s path output\n", argv[0]); | |
94 | + if (argc != 4) { | |
95 | + printf("USAGE: %s svnversion path output\n", argv[0]); | |
112 | 96 | return -1; |
113 | 97 | } |
114 | 98 | |
115 | - input = argv[1]; | |
116 | - output = argv[2]; | |
117 | - revision = get_svn_revision(input); | |
99 | + svnversion = argv[1]; // svnversion.exe | |
100 | + input = argv[2]; // top of source tree | |
101 | + output = argv[3]; // output to | |
102 | + revision = get_svn_revision(svnversion, input); | |
118 | 103 | |
119 | 104 | if (!write_svn_revesion(output, revision)) { |
120 | 105 | return 1; |
@@ -16,6 +16,8 @@ | ||
16 | 16 | Cygwin 1.5.x (1.7.x は Windows 9x をサポートしていないので不可) |
17 | 17 | ActivePerl 5.8 以上 |
18 | 18 | OpenSSL のコンパイル、ドキュメントファイルの文字コード・改行コード変換に必要です。 |
19 | + Subversion for Windows (http://sourceforge.net/projects/win32svn/) | |
20 | + ソースのチェックアウトに使った svn と互換性のあるバージョン | |
19 | 21 | |
20 | 22 | |
21 | 23 | ■ ライブラリ |