githelper.git/
githelper.pike
Branch:
Tag:
Non-build tags
All tags
No tags
2010-10-03
2010-10-03 11:51:23 by Marcus Comstedt <marcus@mc.pp.se>
bdb97892f5803c4d1e8948d12a381a40a1b13fb8 (
40
lines) (+
40
/-
0
)
[
Show
|
Annotate
]
Branch:
master
Check encoding of commit messages.
112:
return 0; }
+
int is_encoding_utf8(string name)
+
{
+
return (!name) || (<"utf-8", "utf8">)[lower_case(name)];
+
}
+
+
string check_encoding(string data, string|void encoding)
+
{
+
if(is_encoding_utf8(encoding))
+
encoding = "UTF-8";
+
mixed err = catch {
+
Locale.Charset.Decoder decoder = Locale.Charset.decoder(encoding);
+
if(search(decoder->feed(data)->drain(), "\ufffd")>=0)
+
return "Undefinied character detected\n";
+
};
+
return err && err[0];
+
}
+
+
string check_commit_msg(string commit)
+
{
+
string message = run_git("cat-file", "commit", commit);
+
string encoding = 0;
+
string headers = (message/"\n\n")[0];
+
foreach(headers/"\n", string headerline) {
+
if(has_prefix(headerline, "encoding "))
+
encoding = headerline[9..];
+
}
+
return check_encoding(message, encoding);
+
}
+
class GitAttributes { enum {
445:
write("Invalid timestamps: %s\n", ts_test); return 1; }
+
string cm_test = check_commit_msg(sha);
+
if (cm_test) {
+
write("Commit message encoding problem:\n%s", cm_test);
+
return 1;
+
}
return check_blocker_attributes() || check_gitattributes_files(); }
538:
write("NOTICE: Your commit has invalid timestamps: %s\n", ts_test); write("Please amend it before pushing.\n"); }
+
string cm_test = check_commit_msg("HEAD");
+
if (cm_test) {
+
write("NOTICE: Your commit message has an encoding problem:\n%s", cm_test);
+
write("Please ament it before pushing.\n");
+
}
return 0; } }