using System; using System.Collections.Generic; using System.IO; using System.Runtime.Serialization.Formatters.Binary; using Sep.Git.Tfs.Core; using Sep.Git.Tfs.Core.TfsInterop; namespace Sep.Git.Tfs.VsFake { public class Script { public const string EnvVar = "GIT_TFS_VSFAKE_SCRIPT"; public static Script Load(string path) { return new Script().Tap(script => Load(path, script)); } private static void Load(string path, Script script) { var formatter = new BinaryFormatter(); using (var stream = File.OpenRead(path)) { script.RootBranches.AddRange((List)formatter.Deserialize(stream)); script.Changesets.AddRange((List)formatter.Deserialize(stream)); } } public void Save(string path) { var formatter = new BinaryFormatter(); using (var stream = File.Create(path)) { formatter.Serialize(stream, RootBranches); formatter.Serialize(stream, Changesets); } } List _changesets = new List(); public List Changesets { get { return _changesets; } } List _rootBranches = new List(); public List RootBranches { get { return _rootBranches; } } } [Serializable] public class ScriptedChangeset { public int Id { get; set; } public string Comment { get; set; } public DateTime CheckinDate { get; set; } public List Changes { get { return _changes; } } public bool IsBranchChangeset { get; set; } public BranchChangesetDatas BranchChangesetDatas { get; set; } public bool IsMergeChangeset { get; set; } public MergeChangesetDatas MergeChangesetDatas { get; set; } List _changes = new List(); } [Serializable] public class ScriptedChange { public TfsChangeType ChangeType { get; set; } public TfsItemType ItemType { get; set; } public string RepositoryPath { get; set; } public string Content { get; set; } public int? ItemId { get; set; } } [Serializable] public class BranchChangesetDatas { public int RootChangesetId { get; set; } public string BranchPath { get; set; } public string ParentBranch { get; set; } } [Serializable] public class MergeChangesetDatas { public int BeforeMergeChangesetId { get; set; } public string BranchPath { get; set; } public string MergeIntoBranch { get; set; } } [Serializable] public class ScriptedRootBranch { public string BranchPath { get; set; } } }