Example #1
0
        private IEnumerable <FileInfo> GetInventory(
            FileInfo file,
            Func <IEnumerable <FileInfo> > beforeAction,
            Action action)
        {
            var inventory = Enumerable.Empty <FileInfo>();

            IEnumerable <FileInfo> preInventory;

            if (beforeAction == null)
            {
                preInventory = new List <FileInfo>();
            }
            else
            {
                preInventory = beforeAction();
            }

            ExclusiveFolderAccess.Do(_dataDirectory, (folder) => {
                file.Refresh();
                if (file.Exists)
                {
                    inventory = folder.LoadInventory(file);
                }
                else
                {
                    action();

                    inventory = GetFileList().Where(i => !preInventory.Select(p => p.FullName).Contains(i.FullName));

                    folder.SaveInventory(file, inventory);
                }
            });

            return(inventory);
        }
Example #2
0
        private void ThrowIfAssetSourcesHaveChanged()
        {
            if (!_dataDirectory.Exists)
            {
                return;
            }

            var dataDirectoryFiles = _dataDirectory.GetFiles("*", SearchOption.AllDirectories);

            if (!dataDirectoryFiles.Any())
            {
                return;
            }

            IEnumerable <FileInfo> trackedFiles = null;

            ExclusiveFolderAccess.Do(_dataDirectory, (folder) => {
                trackedFiles = _inventoryFiles.AllInventoryFiles.SelectMany(f => folder.LoadInventory(f));
            });

            var assetFiles = GetFileList();

            var untrackedFiles = assetFiles.Where(a => !trackedFiles.Any(t => t.FullName.Equals(a.FullName)));

            if (untrackedFiles.Any())
            {
                var message = $"TestAsset {_assetName} has untracked files. " +
                              "Consider cleaning the asset and deleting its `.tam` directory to " +
                              "recreate tracking files.\n\n" +
                              $".tam directory: {_dataDirectory.FullName}\n" +
                              "Untracked Files: \n";

                message += String.Join("\n", untrackedFiles.Select(f => $" - {f.FullName}\n"));

                throw new Exception(message);
            }

            var earliestDataDirectoryTimestamp =
                dataDirectoryFiles
                .OrderBy(f => f.LastWriteTime)
                .First()
                .LastWriteTime;

            if (earliestDataDirectoryTimestamp == null)
            {
                return;
            }

            var updatedSourceFiles = ExclusiveFolderAccess.Read(_inventoryFiles.Source)
                                     .Where(f => f.LastWriteTime > earliestDataDirectoryTimestamp);

            if (updatedSourceFiles.Any())
            {
                var message = $"TestAsset {_assetName} has updated files. " +
                              "Consider cleaning the asset and deleting its `.tam` directory to " +
                              "recreate tracking files.\n\n" +
                              $".tam directory: {_dataDirectory.FullName}\n" +
                              "Updated Files: \n";

                message += String.Join("\n", updatedSourceFiles.Select(f => $" - {f.FullName}\n"));

                throw new GracefulException(message);
            }
        }