svnのフォルダのタイムスタンプを擬似的に合わせてみる

SVNをチェックアウトしたらフォルダのタイムスタンプが全部現在時刻だったので。
ちょっと調べてわかんなかったのでなんちゃって補正してみた。

static void Main( string[] args ) {
	if (args.Length != 1) {
		Console.WriteLine( "usage: cfp.exe <folder path>" );
		return;
	}

	CorrectDirectoryTimeStamp( args[0] );
	foreach ( var directoryName in Directory.GetDirectories( args[0] ) ) {
		if ( Path.GetFileName( directoryName ) == ".svn" ) {
			continue;
		}
		CorrectDirectoryTimeStamp( directoryName );
	}
}

private static void CorrectDirectoryTimeStamp( string directory ) {
	DateTime lastupdate = DateTime.MinValue;

	foreach ( var fileName in Directory.GetFiles( directory ) ) {
		var writeTime = File.GetLastWriteTime( fileName );
		if ( lastupdate < writeTime ) {
			lastupdate = writeTime;
		}
	}

	foreach ( var directoryName in Directory.GetDirectories( directory ) ) {
		if ( Path.GetFileName( directoryName ) == ".svn" ) {
			continue;
		}

		CorrectDirectoryTimeStamp( directoryName );

		var writeTime = File.GetLastWriteTime( directoryName );
		if ( lastupdate < writeTime ) {
			lastupdate = writeTime;
		}
	}

	if ( lastupdate == DateTime.MinValue ) {
		var t = File.ReadAllLines( directory + "\\.svn\\entries" )[9];
		lastupdate = DateTime.Parse( t );
	}

	if ( lastupdate != DateTime.MinValue ) {
		try {
			Directory.SetLastWriteTime( directory, lastupdate );
		} catch ( IOException e ) {
			Console.WriteLine( e.Message );
		}
	}
}