public void Log(string[] paths, Revision start, Revision end,
		                int limit, bool discoverChangePaths, bool strictNodeHistory,
		                Action<LogMessage> logMessageReceiver)
		{
			Debug("SVN: Log({" + string.Join(",", paths) + "}, " + start + ", " + end +
			      ", " + limit + ", " + discoverChangePaths + ", " + strictNodeHistory + ")");
			BeforeOperation("log");
			try {
				client.Log(
					paths,
					new SvnLogArgs {
						Start = start,
						End = end,
						Limit = limit,
						RetrieveChangedPaths = discoverChangePaths,
						StrictNodeHistory = strictNodeHistory
					},
					delegate (object sender, SvnLogEventArgs e) {
						try {
							Debug("SVN: Log: Got revision " + e.Revision);
							LogMessage msg = new LogMessage() {
								Revision = e.Revision,
								Author = e.Author,
								Date = e.Time,
								Message = e.LogMessage
							};
							if (discoverChangePaths) {
								msg.ChangedPaths = new List<ChangedPath>();
								foreach (var entry in e.ChangedPaths) {
									msg.ChangedPaths.Add(new ChangedPath {
									                     	Path = entry.Path,
									                     	CopyFromPath = entry.CopyFromPath,
									                     	CopyFromRevision = entry.CopyFromRevision,
									                     	Action = entry.Action
									                     });
								}
							}
							logMessageReceiver(msg);
						} catch (Exception ex) {
							MessageService.ShowError(ex);
						}
					}
				);
				Debug("SVN: Log finished");
			} catch (SvnOperationCanceledException) {
				// allow cancel without exception
			} catch (SvnException ex) {
				throw new SvnClientException(ex);
			} finally {
				AfterOperation();
			}
		}
		void ShowDiff()
		{
			Disable();
			
			if (leftListView.SelectedItems.Count == 0 || rightListView.SelectedItems.Count == 0 ) {
				return;
			}
			
			fromRevision = leftListView.SelectedItems[0].Tag as Revision;
			toRevision   = rightListView.SelectedItems[0].Tag as Revision;
			fileName     = Path.GetFullPath(viewContent.PrimaryFileName);
			
			if (fromRevision.ToString() == toRevision.ToString()) {
				output = "";
			} else {
				//SvnClient.Instance.OperationStart("Diff", DoDiffOperation);
			}
		}