はじめに
本記事では、SharpSVNを使ってリポジトリとリポジトリ内のファイルのリビジョンを取得する際に困ったので、備忘録としてその方法をまとめます。
SharpSVNとは
SubversionをC#から簡単に操作するためのライブラリです。
Subversionで管理するリポジトリやファイルの情報の取得などSubversionのクライアントとしての機能をいくつか提供しています。
詳細はこちらのGitHubリポジトリを参照ください。
SharpSVNを使ってリポジトリのリビジョンを取得する
リポジトリのリビジョンを取得する方法に関しては、こちらの記事などでも紹介されていて検索しても引っかかることが多いです。
以下にコードを示しますが、SVNから情報をとってくるクライアントを作ったのちにGetLogメソッドでログを取得します。このログの1つ1つがリビジョンの情報を持っています。
/// <summary>
/// リポジトリのリビジョン情報を表示する
/// </summary>
public void ShowRepositoryRivisions()
{
// クライアントの作成
var client = GetSvnClient();
// 認証情報の設定
client.Authentication.Clear();
client.Authentication.DefaultCredentials = new NetworkCredential(ユーザー名,パスワード);
var repositoryUrl = リビジョンを取得したいリポジトリのURL;
var repositoryUri = new Uri(repositoryUrl);
// リビジョン取得用の引数を作成
var svnLogArgs = new SvnLogArgs();
// 取得し始めるリビジョン番号を指定
// 以下の場合は、100番以下の番号を持つリビジョンのみが取得できる
svnLogArgs.Start = 100;
// 取得するリビジョンの数を指定
// この場合は20個のリビジョンが取得できる
svnLogArgs.Limit = 20;
// リビジョンを取得
Collection<SvnLogEventArgs> revisionList;
client.GetLog(repositoryUri, svnLogArgs, out revisionList);
// リビジョン内容を表示
foreach (var revision in revisionList)
{
Console.WriteLine($"リビジョン番号:{revision.Revision}");
Console.WriteLine($"コミット時のコメント:{revision.LogMessage}");
Console.WriteLine($"コミットしたユーザー名:{revision.Author}");
Console.WriteLine($"コミット日時:{revision.Time.ToString()}");
}
}
SharpSVNを使ってリポジトリ内のファイルのリビジョンを取得する
リポジトリ内のファイルを指定してリビジョンを取得する場合にもリポジトリの場合と同様にGetLogメソッドを使えばよいです。
以下にコードを示しますが、差分は利用するURLがリポジトリのURLからリポジトリ内のファイルのURLに変わることです。
/// <summary>
/// リポジトリ内のファイルのリビジョン情報を表示する
/// </summary>
public void ShowRepositoryFileRivisions()
{
// クライアントの作成
var client = GetSvnClient();
// 認証情報の設定
client.Authentication.Clear();
client.Authentication.DefaultCredentials = new NetworkCredential(ユーザー名,パスワード);
// ここでリポジトリ内のファイルのURLを使うことが差分
var fileUrl = リビジョンを取得したいリポジトリ内のファイルのURL;
var fileUri = new Uri(fileUrl);
// リビジョン取得用の引数を作成
var svnLogArgs = new SvnLogArgs();
// 取得し始めるリビジョン番号を指定
// 以下の場合は、100番以下の番号を持つリビジョンのみが取得できる
svnLogArgs.Start = 100;
// 取得するリビジョンの数を指定
// この場合は20個のリビジョンが取得できる
svnLogArgs.Limit = 20;
// リビジョンを取得
Collection<SvnLogEventArgs> revisionList;
client.GetLog(fileUri, svnLogArgs, out revisionList);
// リビジョン内容を表示
foreach (var revision in revisionList)
{
Console.WriteLine($"リビジョン番号:{revision.Revision}");
Console.WriteLine($"コミット時のコメント:{revision.LogMessage}");
Console.WriteLine($"コミットしたユーザー名:{revision.Author}");
Console.WriteLine($"コミット日時:{revision.Time.ToString()}");
}
}
さいごに
SharpSVNを使ってリポジトリとリポジトリ内のファイルのリビジョンを取得する方法をまとめました。
リポジトリであってもリポジトリ内のファイルであっても同じGetLogメソッドが利用できるようですね。