示例#1
0
        void Sync(SyncGroupConfig syncGroup)
        {
            //throw new NotImplementedException("Sync action unimplemented");

            if (syncGroup.Members.Count == 0)
            {
                Console.WriteLine("Sync group has no members; nothing to sync! Aborting.");
                return;
            }

            if (syncGroup.Members.Count == 1)
            {
                Console.WriteLine("Sync group has only one member; nothing to sync! Aborting.");
                return;
            }

            for (int i = 0; i < syncGroup.Members.Count; i++)
            {
                SyncGroupConfigMember member = syncGroup.Members[i];

                if (member.Host != null
                        && !Environment.MachineName.Equals(member.Host, StringComparison.OrdinalIgnoreCase))
                {
                    syncGroup.Members.RemoveAt(i);
                    i--;
                }
            }

            Dictionary<SyncGroupConfigMember, FooTree> trees = GetTrees(syncGroup);
            Dictionary<SyncGroupConfigMember, RepositoryStateCollection> states = GetStates(syncGroup, trees);
        }
示例#2
0
        private Dictionary<SyncGroupConfigMember, RepositoryStateCollection> GetStates(SyncGroupConfig syncGroup, Dictionary<SyncGroupConfigMember, FooTree> trees)
        {
            Dictionary<SyncGroupConfigMember, RepositoryStateCollection> states = new Dictionary<SyncGroupConfigMember, RepositoryStateCollection>();

            foreach (SyncGroupConfigMember member in syncGroup.Members)
            {
                RepositoryStateCollection state = null;

                if (member.Url.IsLocal)
                {
                    try
                    {
                        state = new RepositoryStateCollection(Path.Combine(member.Url.LocalPath, FooSyncEngine.RepoStateFileName));
                    }
                    catch (FileNotFoundException)
                    {
                        state = new RepositoryStateCollection();
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Unexpected {0} trying to read repository state: {1}",
                            ex.GetType().Name,
                            ex.Message);
                        continue;
                    }
                }
                else
                {
                    NetClient nc = new NetClient(
                        Foo,
                        member.Url.Host,
                        member.Url.Port,
                        member.Auth == null ? string.Empty : member.Auth.User,
                        member.Auth == null ? string.Empty : member.Auth.Password,
                        member.Url.AbsolutePath.Substring(1)
                        );

                    state = nc.GetState();
                }

                if (state.Repository == null)
                {
                    state.AddRepository(trees[member], state.RepositoryID);
                }

                foreach (var otherPair in states)
                {
                    SyncGroupConfigMember otherMember = otherPair.Key;
                    RepositoryStateCollection otherState = otherPair.Value;

                    if (!state.Repositories.ContainsKey(otherState.RepositoryID))
                    {
                        state.AddRepository(trees[otherMember], otherState.RepositoryID);
                    }

                    if (!otherState.Repositories.ContainsKey(state.RepositoryID))
                    {
                        otherState.AddRepository(trees[member], state.RepositoryID);
                    }
                }

                states.Add(member, state);
            }

            foreach (var pair in states)
            {
                SyncGroupConfigMember member = pair.Key;
                RepositoryStateCollection state = pair.Value;

                if (member.Url.IsLocal)
                {
                    state.Write(Path.Combine(member.Url.LocalPath, FooSyncEngine.RepoStateFileName));
                }
                else
                {
                    //TODO
                }
            }

            return states;
        }
示例#3
0
        private Dictionary<SyncGroupConfigMember, FooTree> GetTrees(SyncGroupConfig syncGroup)
        {
            Dictionary<SyncGroupConfigMember, FooTree> trees = new Dictionary<SyncGroupConfigMember, FooTree>();
            ICollection<string> exceptions = FooSyncEngine.PrepareExceptions(syncGroup.IgnorePatterns);
            Progress enumCallback = new Progress((current, total, name) =>
            {
                Console.Write("\r{0} items...", current);
            });

            foreach (SyncGroupConfigMember member in syncGroup.Members)
            {
                Console.Write("Enumerating files in ");

                FooTree tree = null;
                if (member.Url.IsLocal)
                {
                    Console.WriteLine(member.Url.LocalPath);

                    try
                    {
                        tree = new FooTree(Foo, member.Url.LocalPath, exceptions, enumCallback);
                        Console.WriteLine("\r{0} items.  ", tree.Files.Count);
                    }
                    catch (DirectoryNotFoundException)
                    {
                        Console.WriteLine("Directory {1} not found.", member.Url.LocalPath);
                        continue;
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("{0} reading directory {1}: {2}",
                            ex.GetType().Name,
                            member.Url.LocalPath,
                            ex.Message);
                        continue;
                    }
                }
                else
                {
                    Console.WriteLine(member.UrlString);

                    NetClient nc = new NetClient(
                        Foo,
                        member.Url.Host,
                        member.Url.Port,
                        member.Auth == null ? string.Empty : member.Auth.User,
                        member.Auth == null ? string.Empty : member.Auth.Password,
                        member.Url.AbsolutePath.Substring(1)
                        );

                    tree = nc.GetTree(enumCallback);
                    Console.WriteLine("\r{0} items.  ", tree.Files.Count);
                }

                trees.Add(member, tree);
            }

            return trees;
        }
示例#4
0
        void CreateSyncGroup(string name, string filename)
        {
            SyncGroupConfig config = new SyncGroupConfig();
            config.Version = 1;
            config.Name = name;
            config.IgnorePatterns = new IgnorePattern[] { };

            XmlConfigLoader.Write(config, filename);
        }