// implementation
        /// <summary>
        ///		Enumerate child data folders in a parent data folder
        /// </summary>
        /// <param name="parentFolder">
        ///		A folder in a tree whose children to enumerate.
        /// </param>
        /// <param name="level">
        ///		The level number of folders being enumerated, according to the current depth (not an index in <see cref="_levelTraits"/>)
        /// </param>
        /// <returns></returns>
        private List <IRepoFileContainerDescriptor> EnumerateChildren(IRepoFileContainerDescriptor parentFolder, int level)
        {
            Check.Require(level >= Constants.DataFolderLevelLeaf && level < LevelCount);

            ICalendarHistoricalFolderTraits traits = GetLevelTraits(level);

            string parentAbsolutePath = GetAbsolutePath(parentFolder);

            IEnumerable <string> allDirPaths           = DirectoryProvider.EnumerateDirectories(parentAbsolutePath, traits.NameMask);
            List <IRepoFileContainerDescriptor> retval = new List <IRepoFileContainerDescriptor>();

            foreach (string name in allDirPaths.Select((p) => DirectoryProvider.GetLastPathComponent(p)))
            {
                CalendarHistoricalFolderInternalDescriptor internalDesc = traits.GetDescriptor(parentFolder, name);
                if (null != internalDesc)
                {
                    IRepoFileContainerDescriptor descr = GetDescriptor(parentFolder, internalDesc);
                    retval.Add(descr);
                }
                else
                {
                    _log.WarnFormat("Data folder name {0}/{1} is malformed, ignoring", parentFolder == null ? "" : parentFolder.RelativePath, name);
                }
            }

            return(retval);
        }