利用TortoiseSVN钩子脚本实现SVN提交消息自动记录
作者:songerzhou 发布时间:October 28, 2011 分类:技术相关 No Comments
顾名思义,这个用Wscript实现的TortoiseSVN钩子脚本就是自动记录SVN的提交消息(Commit Message)。虽然我们很容易通过查看SVN日志并搜索来查询自己最近的操作记录,但使用过就会知道操作麻烦、需要网络连接、不能导出等一些问题令人十分不爽,于是一个自动记录提交消息的想法就诞生了。TortoiseSVN钩子脚本可以用其他语言实现,Bat、WSH、Python、甚至是PHP都是可以的。这个工具我现在一直在用,尤其是在写每周的工作周报时查看上周工作记录很方便。
这里是源代码:
02
03 objArgs = WScript.Arguments;
04 num = objArgs.length;
05 if (num != 6)
06 {
07 WScript.Echo("发生内部错误!");
08 WScript.Quit(1);
09 }
10
11 var fso = new ActiveXObject('Scripting.FileSystemObject');
12
13 if (fso.FileExists(objArgs(0)))
14 {
15 // 这里是保存日志TXT的目录,需手动创建
16 var logPath = "E:\\work\\log";
17 var logFile = logPath + "\\" + getTime(1) + "\\" + getTime(2) + ".txt";
18
19 var a = new ActiveXObject('Adodb.Stream');
20 a.Mode = 3; // read/write
21 a.Type = 2; // text
22 a.Charset = 'utf-8';
23 a.Open();
24 a.Position = 0;
25 a.LoadFromFile(objArgs(2));
26
27 var b = new ActiveXObject('Adodb.Stream');
28 b.Mode = 3; // read/write
29 b.Type = 2; // text
30 b.Charset = 'utf-8';
31 b.Open();
32 b.Position = 0;
33
34 if (fso.FileExists(logFile)) {
35 b.LoadFromFile(logFile);
36 b.ReadText();
37 }
38
39 if (!fso.FolderExists(logPath + "\\" + getTime(1))) {
40 fso.CreateFolder(logPath + "\\" + getTime(1));
41 }
42
43 b.WriteText("日期: " + getTime(3) + "\r\n");
44
45 // 写提交消息
46 b.WriteText("信息:\r\n" );
47 b.WriteText(a.ReadText() + "\r\n\r\n");
48 b.WriteText("----------\r\n");
49
50 a.LoadFromFile(objArgs(0));
51
52 b.WriteText(a.ReadText() + "\r\n");
53 b.WriteText("--------------------------------------------------\r\n\r\n");
54
55 if (fso.FileExists(logFile)) {
56 b.SaveToFile(logFile, 2);
57 } else {
58 b.SaveToFile(logFile);
59 }
60
61 a.Close();
62 b.Close();
63 }
64
65 function getTime(type) {
66 var s,d = new Date();
67 if (type > 0) {
68 s = d.getYear() + "-";
69 s += (d.getMonth() + 1);
70 if (type > 1) {
71 s += "-" + d.getDate();
72 if (type > 2) {
73 s += " " + d.getHours() + ":";
74 s += d.getMinutes() + ":";
75 s += d.getSeconds();
76 }
77 }
78 }
79 return s;
80 }
