Branch: Tag:

2010-10-03

2010-10-03 11:51:23 by Marcus Comstedt <marcus@mc.pp.se>

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;    }   }