Skip to content

Commit 63fcb86

Browse files
committed
Merge pull request git-tfs#253 from kgybels/unshelve
Download correct files for unshelve
2 parents 1ebd818 + 2ad9bd4 commit 63fcb86

File tree

6 files changed

+49
-12
lines changed

6 files changed

+49
-12
lines changed

GitTfs.VsCommon/TfsHelper.Common.cs

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ public ITfsChangeset GetShelvesetData(IGitTfsRemote remote, string shelvesetOwne
223223
var wrapperForVersionControlServer =
224224
_bridge.Wrap<WrapperForVersionControlServer, VersionControlServer>(VersionControl);
225225
// TODO - containerify this (no `new`)!
226-
var fakeChangeset = new FakeChangeset(shelveset, change, wrapperForVersionControlServer, _bridge);
226+
var fakeChangeset = new Unshelveable(shelveset, change, wrapperForVersionControlServer, _bridge);
227227
var tfsChangeset = new TfsChangeset(remote.Tfs, fakeChangeset, _stdout, null) { Summary = new TfsChangesetInfo { Remote = remote } };
228228
return tfsChangeset;
229229
}
@@ -298,21 +298,21 @@ private void WriteShelvesetsToStdoutDetailed(IEnumerable<Shelveset> shelvesets)
298298

299299
#region Fake classes for unshelve
300300

301-
private class FakeChangeset : IChangeset
301+
private class Unshelveable : IChangeset
302302
{
303303
private readonly Shelveset _shelveset;
304304
private readonly PendingSet _pendingSet;
305305
private readonly IVersionControlServer _versionControlServer;
306306
private readonly TfsApiBridge _bridge;
307307
private readonly IChange[] _changes;
308308

309-
public FakeChangeset(Shelveset shelveset, PendingSet pendingSet, IVersionControlServer versionControlServer, TfsApiBridge bridge)
309+
public Unshelveable(Shelveset shelveset, PendingSet pendingSet, IVersionControlServer versionControlServer, TfsApiBridge bridge)
310310
{
311311
_shelveset = shelveset;
312312
_versionControlServer = versionControlServer;
313313
_bridge = bridge;
314314
_pendingSet = pendingSet;
315-
_changes = _pendingSet.PendingChanges.Select(x => new FakeChange(x, _bridge, versionControlServer)).Cast<IChange>().ToArray();
315+
_changes = _pendingSet.PendingChanges.Select(x => new UnshelveChange(x, _bridge, versionControlServer)).Cast<IChange>().ToArray();
316316
}
317317

318318
public IChange[] Changes
@@ -344,19 +344,28 @@ public IVersionControlServer VersionControlServer
344344
{
345345
get { return _versionControlServer; }
346346
}
347+
348+
public void Get(IWorkspace workspace)
349+
{
350+
foreach (var change in _changes)
351+
{
352+
var item = (UnshelveItem)change.Item;
353+
item.Get(workspace);
354+
}
355+
}
347356
}
348357

349-
private class FakeChange : IChange
358+
private class UnshelveChange : IChange
350359
{
351360
private readonly PendingChange _pendingChange;
352361
private readonly TfsApiBridge _bridge;
353-
private readonly FakeItem _fakeItem;
362+
private readonly UnshelveItem _fakeItem;
354363

355-
public FakeChange(PendingChange pendingChange, TfsApiBridge bridge, IVersionControlServer versionControlServer)
364+
public UnshelveChange(PendingChange pendingChange, TfsApiBridge bridge, IVersionControlServer versionControlServer)
356365
{
357366
_pendingChange = pendingChange;
358367
_bridge = bridge;
359-
_fakeItem = new FakeItem(_pendingChange, _bridge, versionControlServer);
368+
_fakeItem = new UnshelveItem(_pendingChange, _bridge, versionControlServer);
360369
}
361370

362371
public TfsChangeType ChangeType
@@ -370,14 +379,14 @@ public IItem Item
370379
}
371380
}
372381

373-
private class FakeItem : IItem
382+
private class UnshelveItem : IItem
374383
{
375384
private readonly PendingChange _pendingChange;
376385
private readonly TfsApiBridge _bridge;
377386
private readonly IVersionControlServer _versionControlServer;
378387
private long _contentLength = -1;
379388

380-
public FakeItem(PendingChange pendingChange, TfsApiBridge bridge, IVersionControlServer versionControlServer)
389+
public UnshelveItem(PendingChange pendingChange, TfsApiBridge bridge, IVersionControlServer versionControlServer)
381390
{
382391
_pendingChange = pendingChange;
383392
_bridge = bridge;
@@ -445,6 +454,12 @@ public TemporaryFile DownloadFile()
445454
_contentLength = new FileInfo(temp).Length;
446455
return temp;
447456
}
457+
458+
public void Get(IWorkspace workspace)
459+
{
460+
_pendingChange.DownloadShelvedFile(workspace.GetLocalItemForServerItem(_pendingChange.ServerItem));
461+
}
462+
448463
}
449464

450465
#endregion

GitTfs.VsCommon/Wrappers.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,11 @@ public IVersionControlServer VersionControlServer
105105
{
106106
get { return _bridge.Wrap<WrapperForVersionControlServer, VersionControlServer>(_changeset.VersionControlServer); }
107107
}
108+
109+
public void Get(IWorkspace workspace)
110+
{
111+
workspace.GetSpecificVersion(this);
112+
}
108113
}
109114

110115
public class WrapperForChange : WrapperFor<Change>, IChange
@@ -459,10 +464,15 @@ public void GetSpecificVersion(int changeset)
459464
public void GetSpecificVersion(IChangeset changeset)
460465
{
461466
var requests = from change in changeset.Changes
462-
select new GetRequest(new ItemSpec(change.Item.ServerItem, RecursionType.None, change.Item.DeletionId), changeset.ChangesetId == -1 ? change.Item.ChangesetId : changeset.ChangesetId);
467+
select new GetRequest(new ItemSpec(change.Item.ServerItem, RecursionType.None, change.Item.DeletionId), changeset.ChangesetId);
463468
_workspace.Get(requests.ToArray(), GetOptions.Overwrite);
464469
}
465470

471+
public string GetLocalItemForServerItem(string serverItem)
472+
{
473+
return _workspace.GetLocalItemForServerItem(serverItem);
474+
}
475+
466476
public string OwnerName
467477
{
468478
get { return _workspace.OwnerName; }

GitTfs.VsFake/TfsHelper.VsFake.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,11 @@ public IVersionControlServer VersionControlServer
103103
{
104104
get { throw new NotImplementedException(); }
105105
}
106+
107+
public void Get(IWorkspace workspace)
108+
{
109+
workspace.GetSpecificVersion(this);
110+
}
106111
}
107112

108113
class Change : IChange, IItem
@@ -265,6 +270,11 @@ public void GetSpecificVersion(int changeset)
265270
throw new NotImplementedException();
266271
}
267272

273+
public string GetLocalItemForServerItem(string serverItem)
274+
{
275+
throw new NotImplementedException();
276+
}
277+
268278
public string OwnerName
269279
{
270280
get { throw new NotImplementedException(); }

GitTfs/Core/TfsInterop/IChangeset.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,6 @@ public interface IChangeset
1010
string Comment { get; }
1111
int ChangesetId { get; }
1212
IVersionControlServer VersionControlServer { get; }
13+
void Get(IWorkspace workspace);
1314
}
1415
}

GitTfs/Core/TfsInterop/IWorkspace.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public interface IWorkspace
1515
void ForceGetFile(string path, int changeset);
1616
void GetSpecificVersion(int changeset);
1717
void GetSpecificVersion(IChangeset changeset);
18+
string GetLocalItemForServerItem(string serverItem);
1819
string OwnerName { get; }
1920
}
2021
}

GitTfs/Core/TfsWorkspace.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ public void Get(int changesetId)
170170

171171
public void Get(IChangeset changeset)
172172
{
173-
_workspace.GetSpecificVersion(changeset);
173+
changeset.Get(_workspace);
174174
}
175175

176176
private IEnumerable<IWorkItemCheckinInfo> GetWorkItemInfos(CheckinOptions options = null)

0 commit comments

Comments
 (0)