public SourceControlRepository(udcEntities db)
        {
            date    = DateTime.UtcNow;
            commits = (from c in db.Commits
                       select new SourceControlCommit {
                Id = c.Id,
                Hash = c.Hash,
                Date = c.CommitDate
            }).ToDictionary(c => c.Id);

            foreach (var rel in db.CommitRelations)
            {
                SourceControlCommit parent = commits[rel.ParentCommit];
                SourceControlCommit child  = commits[rel.ChildCommit];
                parent.Children.Add(child);
                child.Parents.Add(parent);
            }
        }
        public HashSet <SourceControlCommit> GetDescendants()
        {
            HashSet <SourceControlCommit> set   = new HashSet <SourceControlCommit>();
            Queue <SourceControlCommit>   queue = new Queue <SourceControlCommit>();

            queue.Enqueue(this);
            while (queue.Count > 0)
            {
                SourceControlCommit c = queue.Dequeue();
                if (set.Add(c))
                {
                    foreach (var child in c.Children)
                    {
                        queue.Enqueue(child);
                    }
                }
            }
            return(set);
        }
        public HashSet <SourceControlCommit> GetAncestors()
        {
            HashSet <SourceControlCommit> set   = new HashSet <SourceControlCommit>();
            Queue <SourceControlCommit>   queue = new Queue <SourceControlCommit>();

            queue.Enqueue(this);
            while (queue.Count > 0)
            {
                SourceControlCommit c = queue.Dequeue();
                if (set.Add(c))
                {
                    foreach (var parent in c.Parents)
                    {
                        queue.Enqueue(parent);
                    }
                }
            }
            return(set);
        }