Example #1
0
        public static IEnumerable<string> Update(Repo[] repos, Ref[] allNewRefs)
        {
            Dictionary<Repo, Ref[]> updates = new Dictionary<Repo, Ref[]>();
            var oldRefs = repos.SelectMany(r => r.Refs).ToArray();

            foreach (var repo in repos)
            {
                var newRefs = allNewRefs.Where(r => r.Alias == repo.Alias).ToArray();
                updates[repo] = newRefs;

                foreach (var r in newRefs)
                {
                    /* determine what happened */
                    var existingRef = repo.Refs.FirstOrDefault(q => q.Name == r.Name);
                    if (existingRef != null && existingRef.Sha == r.Sha)
                        continue;

                    yield return CharacterizeChange(existingRef, r, oldRefs);
                }

                foreach (var q in repo.Refs)
                    if (!newRefs.Any(r => r.Name == q.Name))
                        yield return CharacterizeChange(q, null, oldRefs);
            }

            foreach (var repo in repos)
                repo.Refs = updates[repo];
        }