public Func GetArchiveFilesAction()

in src/CTA.Rules.Actions/ProjectLevelActions.cs [17:59]


        public Func<string, ProjectType, string> GetArchiveFilesAction(string archiveFiles)
        {
            string func(string projectDir, ProjectType projectType)
            {
                List<string> archived = new List<string>();
                List<string> deleted = new List<string>();

                projectDir = Directory.GetParent(projectDir).FullName;

                List<string> result = new List<string>();
                var filesToArchive = archiveFiles.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);

                foreach (var fileToArchive in filesToArchive)
                {
                    IEnumerable<string> files = Directory.EnumerateFiles(projectDir, fileToArchive, SearchOption.AllDirectories);
                    if (files != null && files.Count() > 0)
                    {
                        result.AddRange(files);
                    }
                }

                foreach (string s in result)
                {
                    if (!s.EndsWith(".bak"))
                    {
                        string backupFile = string.Concat(s, ".bak");
                        if (File.Exists(backupFile))
                        {
                            File.Delete(backupFile);
                            deleted.Add(backupFile);
                        }
                        File.Move(s, string.Concat(s, ".bak"));
                        archived.Add(s);
                    }
                }

                return string.Concat(
                    deleted.Count > 0 ? string.Concat("Deleted: ", string.Join(",", deleted)) : string.Empty,
                    archived.Count > 0 ? string.Concat("Archived: ", string.Join(",", archived)) : string.Empty);
            }

            return func;
        }