Skip to content

Commit

Permalink
Trying out an abstract class for the shared parts of the Tfs plugin.
Browse files Browse the repository at this point in the history
  • Loading branch information
Matt Burke committed Jan 28, 2011
1 parent c073f53 commit d4d0cf1
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 44 deletions.
45 changes: 27 additions & 18 deletions GitTfs.Vs2008/TfsHelper.Vs2008.cs
Original file line number Diff line number Diff line change
@@ -1,45 +1,54 @@
using System;
using System.Collections.Generic;
using System.IO;
using Microsoft.TeamFoundation.Client;
using Sep.Git.Tfs.Core.TfsInterop;
using Sep.Git.Tfs.VsCommon;
using StructureMap;

namespace Sep.Git.Tfs.VsCommon
namespace Sep.Git.Tfs.Vs2008
{
public partial class TfsHelper : ITfsHelper
public class TfsHelper : TfsHelperBase
{
private TeamFoundationServer server;
private TeamFoundationServer _server;

public string TfsClientLibraryVersion
public TfsHelper(TextWriter stdout, TfsApiBridge bridge, IContainer container) : base(stdout, bridge, container)
{
get { return typeof(TeamFoundationServer).Assembly.GetName().Version.ToString() + " (MS)"; }
}

public bool CanShowCheckinDialog { get { return false; } }

public long ShowCheckinDialog(IWorkspace workspace, IPendingChange[] pendingChanges, IEnumerable<IWorkItemCheckedInfo> checkedInfos, string checkinComment)
public override string TfsClientLibraryVersion
{
throw new NotImplementedException();
get { return "" + typeof(TeamFoundationServer).Assembly.GetName().Version + " (MS)"; }
}

private void UpdateServer()
protected override void UpdateServer()
{
if (string.IsNullOrEmpty(Url))
{
server = null;
_server = null;
}
else
{
server = new TeamFoundationServer(Url, new UICredentialsProvider());
server.EnsureAuthenticated();
_server = new TeamFoundationServer(Url, new UICredentialsProvider());
_server.EnsureAuthenticated();
}
}

private TeamFoundationServer Server
protected override T GetService<T>()
{
get
{
return server;
}
return (T) _server.GetService(typeof (T));
}

protected override string GetAuthenticatedUser()
{
return VersionControl.AuthenticatedUser;
}

public override bool CanShowCheckinDialog { get { return false; } }

public override long ShowCheckinDialog(IWorkspace workspace, IPendingChange[] pendingChanges, IEnumerable<IWorkItemCheckedInfo> checkedInfos, string checkinComment)
{
throw new NotImplementedException();
}
}
}
43 changes: 26 additions & 17 deletions GitTfs.Vs2010/TfsHelper.Vs2010.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,43 +8,52 @@
using Microsoft.Win32;
using Sep.Git.Tfs.Core.TfsInterop;
using Sep.Git.Tfs.Util;
using Sep.Git.Tfs.Vs2010;
using Sep.Git.Tfs.VsCommon;
using StructureMap;

namespace Sep.Git.Tfs.VsCommon
namespace Sep.Git.Tfs.Vs2010
{
public partial class TfsHelper : ITfsHelper
public class TfsHelper : TfsHelperBase
{
private TfsTeamProjectCollection server;
private readonly TfsApiBridge _bridge;
private TfsTeamProjectCollection _server;

public string TfsClientLibraryVersion
public TfsHelper(TextWriter stdout, TfsApiBridge bridge, IContainer container) : base(stdout, bridge, container)
{
get { return typeof(TfsTeamProjectCollection).Assembly.GetName().Version.ToString() + " (MS)"; }
_bridge = bridge;
}

private void UpdateServer()
public override string TfsClientLibraryVersion
{
get { return typeof(TfsTeamProjectCollection).Assembly.GetName().Version + " (MS)"; }
}

protected override void UpdateServer()
{
if (string.IsNullOrEmpty(Url))
{
server = null;
_server = null;
}
else
{
server = new TfsTeamProjectCollection(new Uri(Url), new UICredentialsProvider());
server.EnsureAuthenticated();
_server = new TfsTeamProjectCollection(new Uri(Url), new UICredentialsProvider());
_server.EnsureAuthenticated();
}
}

private TfsTeamProjectCollection Server
protected override T GetService<T>()
{
get
{
return server;
}
return (T) _server.GetService(typeof (T));
}

protected override string GetAuthenticatedUser()
{
return VersionControl.AuthenticatedUser;
}

public bool CanShowCheckinDialog { get { return true; } }
public override bool CanShowCheckinDialog { get { return true; } }

public long ShowCheckinDialog(IWorkspace workspace, IPendingChange[] pendingChanges, IEnumerable<IWorkItemCheckedInfo> checkedInfos, string checkinComment)
public override long ShowCheckinDialog(IWorkspace workspace, IPendingChange[] pendingChanges, IEnumerable<IWorkItemCheckedInfo> checkedInfos, string checkinComment)
{
return ShowCheckinDialog(_bridge.Unwrap<Workspace>(workspace),
pendingChanges.Select(p => _bridge.Unwrap<PendingChange>(p)).ToArray(),
Expand Down
30 changes: 21 additions & 9 deletions GitTfs.VsCommon/TfsHelper.Common.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,38 +13,44 @@

namespace Sep.Git.Tfs.VsCommon
{
public partial class TfsHelper : ITfsHelper
public abstract class TfsHelperBase : ITfsHelper
{
private readonly TextWriter _stdout;
private string _url;
private readonly TfsApiBridge _bridge;
private readonly IContainer _container;

public TfsHelper(TextWriter stdout, TfsApiBridge bridge, IContainer container)
public TfsHelperBase(TextWriter stdout, TfsApiBridge bridge, IContainer container)
{
_stdout = stdout;
_bridge = bridge;
_container = container;
}

public abstract string TfsClientLibraryVersion { get; }

public string Url
{
get { return _url; }
set { _url = value; UpdateServer(); }
}

protected abstract void UpdateServer();

private string[] _legacyUrls;
public string[] LegacyUrls
{
get { return _legacyUrls ?? (_legacyUrls = new string[0]); }
set { _legacyUrls = value; }
}

private VersionControlServer VersionControl
protected abstract T GetService<T>();

protected VersionControlServer VersionControl
{
get
{
var versionControlServer = (VersionControlServer)Server.GetService(typeof(VersionControlServer));
var versionControlServer = GetService<VersionControlServer>();
versionControlServer.NonFatalError += NonFatalError;
return versionControlServer;
}
Expand All @@ -54,7 +60,7 @@ private WorkItemStore WorkItems
{
get
{
return (WorkItemStore) Server.GetService(typeof (WorkItemStore));
return GetService<WorkItemStore>();
}
}

Expand All @@ -67,7 +73,7 @@ private void NonFatalError(object sender, ExceptionEventArgs e)

private IGroupSecurityService GroupSecurityService
{
get { return (IGroupSecurityService) Server.GetService(typeof(IGroupSecurityService)); }
get { return GetService<IGroupSecurityService>(); }
}

public IEnumerable<ITfsChangeset> GetChangesets(string path, long startVersion, GitTfsRemote remote)
Expand Down Expand Up @@ -114,15 +120,17 @@ private Workspace GetWorkspace(string localDirectory, string repositoryPath)
}
catch (MappingConflictException e)
{
throw new GitTfsException(e.Message, new string[] { "Run 'git tfs cleanup-workspace' to remove the workspace." }, e);
throw new GitTfsException(e.Message, new[] { "Run 'git tfs cleanup-workspace' to remove the workspace." }, e);
}
}

private string GenerateWorkspaceName()
{
return "git-tfs-" + Guid.NewGuid().ToString();
return "git-tfs-" + Guid.NewGuid();
}

public abstract long ShowCheckinDialog(IWorkspace workspace, IPendingChange[] pendingChanges, IEnumerable<IWorkItemCheckedInfo> checkedInfos, string checkinComment);

public void CleanupWorkspaces(string workingDirectory)
{
Trace.WriteLine("Looking for workspaces mapped to @\"" + workingDirectory +"\"...", "cleanup-workspace");
Expand All @@ -149,10 +157,14 @@ public void CleanupWorkspaces(string workingDirectory)

public bool HasShelveset(string shelvesetName)
{
var matchingShelvesets = VersionControl.QueryShelvesets(shelvesetName, VersionControl.AuthenticatedUser);
var matchingShelvesets = VersionControl.QueryShelvesets(shelvesetName, GetAuthenticatedUser());
return matchingShelvesets != null && matchingShelvesets.Length > 0;
}

protected abstract string GetAuthenticatedUser();

public abstract bool CanShowCheckinDialog { get; }

public IShelveset CreateShelveset(IWorkspace workspace, string shelvesetName)
{
var shelveset = new Shelveset(_bridge.Unwrap<Workspace>(workspace).VersionControlServer, shelvesetName, workspace.OwnerName);
Expand Down

0 comments on commit d4d0cf1

Please sign in to comment.