Git Pluginの文字化け

Hudson の Git Plugin を使うと文字化けする問題とその解決方法 (不完全) に書かれているとおり、Windows上のHudsonでGit Pluginを使用すると変更履歴の文字化けが発生します。


要点だけ書くと、変更履歴に表示される履歴は"git log"の出力を取り込むのですが、デフォルトではUTF-8で出力されるログをWindowsのデフォルトエンコーディングであるWindows-31Jとして扱ってしまうのが問題のようです。

GitSCM.javaの714行目に、

	private String putChangelogDiffsIntoFile(IGitAPI git, String branchName, String revFrom,
			String revTo) throws IOException {
		ByteArrayOutputStream fos = new ByteArrayOutputStream();
		String changeset = "Changes in branch " + branchName + ", between " + revFrom + " and " + revTo + "\n";
		fos.write(changeset.getBytes());
		git.changelog(revFrom, revTo, fos);
		fos.close();
		return fos.toString();
	}

最後のreturn文でgit logの出力をfosに出力してfos.toString()していますが、ここをfos.toString("UTF-8")とすれば文字化けしていない変更履歴を取得することができます。Hudsonのユーザでi18n.logoutputencodingを変更してたら、そのエンコーディングにしないといけないかも。

ちなみに、changelog.xmlファイルを出力しているのはGitSCM.javaの391行目あたりですが、XMLではないようにみえるのは気のせいか。