Merge pull request #586 from pmiossec/detect_rename_changeset

Detect rename changeset
This commit is contained in:
Matt Burke
2014-04-30 15:59:10 -04:00
2 changed files with 90 additions and 2 deletions
+24 -1
View File
@@ -60,13 +60,16 @@ namespace Sep.Git.Tfs.Util
c.Change.Item.ItemType == TfsItemType.Folder
&& c.GitPath == string.Empty
&& c.Change.ChangeType.IncludesOneOf(TfsChangeType.Delete, TfsChangeType.Rename));
}
}
return _renameBranchCommmit.Value;
}
}
public IEnumerable<IChange> GetChangesToFetch()
{
if (DeletesProject)
return Enumerable.Empty<IChange>();
if (RenameBranchCommmit)
return new List<IChange>();
@@ -75,6 +78,9 @@ namespace Sep.Git.Tfs.Util
public IEnumerable<ApplicableChange> GetChangesToApply()
{
if (DeletesProject)
return Enumerable.Empty<ApplicableChange>();
if (RenameBranchCommmit)
return new List<ApplicableChange>();
@@ -114,6 +120,23 @@ namespace Sep.Git.Tfs.Util
return compartments.Deleted.Concat(compartments.Updated);
}
bool? _deletesProject;
private bool DeletesProject
{
get
{
if (!_deletesProject.HasValue)
{
_deletesProject =
NamedChanges.Any(change =>
change.Change.Item.ItemType == TfsItemType.Folder
&& change.GitPath == string.Empty
&& change.Change.ChangeType.IncludesOneOf(TfsChangeType.Delete));
}
return _deletesProject.Value;
}
}
class NamedChange
{
public GitObject Info { get; set; }
+66 -1
View File
@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using Sep.Git.Tfs.Core;
@@ -148,6 +148,11 @@ namespace Sep.Git.Tfs.Test.Core
return new FakeChange(TfsChangeType.Merge | TfsChangeType.Branch, TfsItemType.File, serverItem);
}
public static IChange DeleteDir(string serverItem)
{
return new FakeChange(TfsChangeType.Delete, TfsItemType.Folder, serverItem);
}
const int ChangesetId = 10;
TfsChangeType _tfsChangeType;
@@ -570,5 +575,65 @@ namespace Sep.Git.Tfs.Test.Core
ApplicableChange.Update("file10.txt"));
}
}
public class WithDeleteMainFolderBranchAndSubItems : Base<WithDeleteMainFolderBranchAndSubItems.Fixture>
{
public class Fixture : BaseFixture
{
public Fixture()
{
Changeset.Changes = new IChange[] {
FakeChange.Delete("$/Project/file1.txt"),
FakeChange.Delete("$/Project/file2.txt"),
FakeChange.Delete("$/Project/file3.txt"),
FakeChange.DeleteDir("$/Project/"),
FakeChange.Delete("$/Project/file4.txt"),
FakeChange.Delete("$/Project/file5.txt"),
};
}
}
[Fact]
public void WhenMainBranchFolderIsDeleted_ThenKeepFileInGitCommitByDoingNothing()
{
Assert.Equal(0, Subject.GetChangesToApply().Count());
}
[Fact]
public void DoNotFetch()
{
// Because we're not going to apply changes, don't waste time fetching any.
Assert.Equal(0, Subject.GetChangesToFetch().Count());
}
}
public class WithDeleteOtherFolder : Base<WithDeleteOtherFolder.Fixture>
{
public class Fixture : BaseFixture
{
public Fixture()
{
Changeset.Changes = new IChange[] {
FakeChange.Edit("$/Project/file1.txt"),
FakeChange.DeleteDir("$/Projec"),
FakeChange.Delete("$/Projec/file.txt"),
FakeChange.DeleteDir("$/Project2"),
FakeChange.Delete("$/Project2/file.txt"),
};
}
}
[Fact]
public void IncludesChangesInThisProject()
{
AssertChanges(Subject.GetChangesToApply(),
ApplicableChange.Update("file1.txt"));
}
[Fact]
public void FetchesChangesInThisProject()
{
Assert.Equal(new string[] { "$/Project/file1.txt" }, Subject.GetChangesToFetch().Select(c => c.Item.ServerItem));
}
}
}
}