Merge pull request #586 from pmiossec/detect_rename_changeset
Detect rename changeset
This commit is contained in:
@@ -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; }
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user