/// <summary>
        /// Updates the tree definition.
        /// </summary>
        /// <param name="repository">The repository.</param>
        /// <param name="definition">The definition.</param>
        internal void UpdateTreeDefinition(IRepository repository, TreeDefinition definition)
        {
            if (repository == null)
            {
                throw new ArgumentNullException(nameof(repository));
            }
            if (definition == null)
            {
                throw new ArgumentNullException(nameof(definition));
            }

            var buffer = new StringBuilder();

            foreach (var change in Modified.Concat(Added))
            {
                change.New.ToJson(buffer);
                definition.Add(change.Path, repository.CreateBlob(buffer), Mode.NonExecutableFile);
            }
            foreach (var deleted in Deleted)
            {
                definition.Remove(deleted.Path);
            }
        }