コード例 #1
0
        public void LargeMp3FileIsNotAllowed()
        {
            using (var bob = new RepositorySetup("bob"))
            {
                const string fileName         = "whopper.Mp3";
                var          megabyteLongData = "long" + Environment.NewLine;
                while (megabyteLongData.Length < LargeFileFilter.Megabyte)
                {
                    megabyteLongData += megabyteLongData;
                }
                bob.ChangeFile(fileName, megabyteLongData);
                var fullPathname = Path.Combine(bob.ProjectFolderConfig.FolderPath, fileName);
                var pathToRepo   = bob.Repository.PathToRepo + Path.DirectorySeparatorChar;
                bob.Repository.TestOnlyAddSansCommit(fileName);
                var config = bob.ProjectFolderConfig;
                config.ExcludePatterns.Clear();
                config.IncludePatterns.Clear();
                LiftFolder.AddLiftFileInfoToFolderConfiguration(config);

                var result = LargeFileFilter.FilterFiles(
                    bob.Repository,
                    config,
                    ChorusFileTypeHandlerCollection.CreateWithInstalledHandlers());
                Assert.IsFalse(string.IsNullOrEmpty(result));
                var shortpath = fullPathname.Replace(pathToRepo, "");
                Assert.IsTrue(config.ExcludePatterns.Contains(shortpath));
                Assert.IsFalse(config.IncludePatterns.Contains(shortpath));
            }
        }
コード例 #2
0
        public void LongModifiedFileIsfilteredOut()
        {
            // File is in repo in its shorter version, but now it has grown too large.
            using (var bob = new RepositorySetup("bob"))
            {
                const string fileName = "test.chorusTest";
                bob.ChangeFile(fileName, _goodData);
                var fullPathname = Path.Combine(bob.ProjectFolderConfig.FolderPath, fileName);
                var pathToRepo   = bob.Repository.PathToRepo + Path.DirectorySeparatorChar;
                bob.Repository.AddAndCheckinFile(fullPathname);
                bob.AssertLocalRevisionNumber(0);
                bob.AssertFileContents(fullPathname, _goodData);

                bob.ChangeFile(fileName, _longData);

                var config = bob.ProjectFolderConfig;
                config.ExcludePatterns.Clear();
                config.IncludePatterns.Clear();
                config.IncludePatterns.Add("**.chorusTest");

                var result = LargeFileFilter.FilterFiles(
                    bob.Repository,
                    config,
                    _handlersColl);
                bob.Repository.Commit(false, "test");
                bob.AssertLocalRevisionNumber(1);                 // 'forget' marks it as deleted in the repo.
                bob.AssertFileContents(fullPathname, _longData);

                Assert.IsFalse(string.IsNullOrEmpty(result));
                var shortpath = fullPathname.Replace(pathToRepo, "");
                Assert.IsTrue(config.ExcludePatterns.Contains(shortpath));
                Assert.IsFalse(config.IncludePatterns.Contains(shortpath));
            }
        }
コード例 #3
0
        public void ExplicitlyExcludedNonexistantFileNotFiltered()
        {
            using (var bob = new RepositorySetup("bob"))
            {
                const string largeDictionaryFilename = "ghost.dic";
                var          largeDictionaryPathname = Path.Combine("nestedFolder", largeDictionaryFilename);
                var          fullDictionaryPathname  = Path.Combine(bob.ProjectFolderConfig.FolderPath, largeDictionaryPathname);
                var          pathToRepo = bob.Repository.PathToRepo + Path.DirectorySeparatorChar;
                const string randomFile = "random.txt";
                bob.ChangeFile(randomFile, "Some text.");
                var fullRandomPathname = Path.Combine(bob.ProjectFolderConfig.FolderPath, randomFile);
                bob.Repository.TestOnlyAddSansCommit(fullRandomPathname);

                var config = bob.ProjectFolderConfig;
                config.ExcludePatterns.Clear();
                config.ExcludePatterns.Add(Path.Combine("nestedFolder", "ghost.dic"));
                config.IncludePatterns.Clear();
                config.IncludePatterns.Add("**.*");

                var result = LargeFileFilter.FilterFiles(
                    bob.Repository,
                    config,
                    ChorusFileTypeHandlerCollection.CreateWithInstalledHandlers());
                Assert.IsTrue(string.IsNullOrEmpty(result));
                var shortpath = fullDictionaryPathname.Replace(pathToRepo, "");
                Assert.IsTrue(config.ExcludePatterns.Contains(shortpath));
                Assert.IsFalse(config.IncludePatterns.Contains(shortpath));

                shortpath = fullRandomPathname.Replace(pathToRepo, "");
                Assert.IsFalse(config.ExcludePatterns.Contains(shortpath));
                Assert.IsFalse(config.IncludePatterns.Contains(shortpath));
            }
        }
コード例 #4
0
        public void LongAddedFileIsfilteredOut()
        {
            using (var bob = new RepositorySetup("bob"))
            {
                const string fileName = "test.chorusTest";
                bob.ChangeFile(fileName, _longData);
                var fullPathname = Path.Combine(bob.ProjectFolderConfig.FolderPath, fileName);
                var pathToRepo   = bob.Repository.PathToRepo + Path.DirectorySeparatorChar;
                bob.Repository.TestOnlyAddSansCommit(fullPathname);

                var config = bob.ProjectFolderConfig;
                config.ExcludePatterns.Clear();
                config.IncludePatterns.Clear();
                config.IncludePatterns.Add("**.chorusTest");

                var result = LargeFileFilter.FilterFiles(
                    bob.Repository,
                    config,
                    _handlersColl);
                Assert.IsFalse(string.IsNullOrEmpty(result));
                var shortpath = fullPathname.Replace(pathToRepo, "");
                Assert.IsTrue(config.ExcludePatterns.Contains(shortpath));
                Assert.IsFalse(config.IncludePatterns.Contains(shortpath));
            }
        }
コード例 #5
0
        public void LongWavFileIsFilteredOutAndNotInRepo()
        {
            using (var bob = new RepositorySetup("bob"))
            {
                var megabyteLongData = "long" + Environment.NewLine;
                while (megabyteLongData.Length < LargeFileFilter.Megabyte)
                {
                    megabyteLongData += megabyteLongData;
                }

                const string fileName = "big.wav";
                bob.ChangeFile(fileName, megabyteLongData);
                var fullPathname = Path.Combine(bob.ProjectFolderConfig.FolderPath, fileName);
                var pathToRepo   = bob.Repository.PathToRepo + Path.DirectorySeparatorChar;
                bob.Repository.TestOnlyAddSansCommit(fullPathname);
                var config = bob.ProjectFolderConfig;
                config.ExcludePatterns.Clear();
                config.IncludePatterns.Clear();
                config.IncludePatterns.Add("**.wav");

                var result = LargeFileFilter.FilterFiles(
                    bob.Repository,
                    config,
                    ChorusFileTypeHandlerCollection.CreateWithInstalledHandlers());
                Assert.IsFalse(string.IsNullOrEmpty(result));
                var shortpath = fullPathname.Replace(pathToRepo, "");
                Assert.IsTrue(config.ExcludePatterns.Contains(shortpath));
                Assert.IsFalse(config.IncludePatterns.Contains(shortpath));
                bob.Repository.AddAndCheckinFiles(config.IncludePatterns, config.ExcludePatterns, "Some commit");
                bob.AssertFileDoesNotExistInRepository("big.wav");
            }
        }
コード例 #6
0
        public void NormallyExcludedNestedFileIsNotAddedByLargeFileFilter()
        {
            using (var bob = new RepositorySetup("bob"))
            {
                var megabyteLongData = "long" + Environment.NewLine;
                while (megabyteLongData.Length < LargeFileFilter.Megabyte)
                {
                    megabyteLongData += megabyteLongData;
                }

                var pathToRepo   = bob.Repository.PathToRepo + Path.DirectorySeparatorChar;
                var nestedFolder = Path.Combine(bob.Repository.PathToRepo, "nestedFolder");
                Directory.CreateDirectory(nestedFolder);
                const string largeVideoFilename = "whopper.mov";
                var          largeVideoPathname = Path.Combine("nestedFolder", largeVideoFilename);
                bob.ChangeFile(largeVideoPathname, megabyteLongData);
                bob.Repository.TestOnlyAddSansCommit(largeVideoPathname);

                var config = bob.ProjectFolderConfig;
                config.ExcludePatterns.Clear();
                config.ExcludePatterns.Add("**.mov");
                config.IncludePatterns.Clear();
                config.IncludePatterns.Add("**.*");

                var result = LargeFileFilter.FilterFiles(
                    bob.Repository,
                    config,
                    ChorusFileTypeHandlerCollection.CreateWithInstalledHandlers());
                Assert.IsTrue(string.IsNullOrEmpty(result));

                var shortpath = largeVideoPathname.Replace(pathToRepo, "");
                Assert.IsFalse(config.ExcludePatterns.Contains(shortpath));
                Assert.IsFalse(config.IncludePatterns.Contains(shortpath));
            }
        }
コード例 #7
0
        public void NormallyExcludedFwdataFileIsNotAddedByLargeFileFilter()
        {
            using (var bob = new RepositorySetup("bob"))
            {
                var megabyteLongData = "long" + Environment.NewLine;
                while (megabyteLongData.Length < LargeFileFilter.Megabyte)
                {
                    megabyteLongData += megabyteLongData;
                }

                var          pathToRepo          = bob.Repository.PathToRepo + Path.DirectorySeparatorChar;
                const string largeFwdataFilename = "whopper.fwdata";
                var          largeFwdataPathname = Path.Combine(pathToRepo, largeFwdataFilename);
                bob.ChangeFile(largeFwdataPathname, megabyteLongData);
                bob.Repository.TestOnlyAddSansCommit(largeFwdataPathname);

                var config = bob.ProjectFolderConfig;
                config.ExcludePatterns.Clear();
                config.ExcludePatterns.Add("*.fwdata");
                config.IncludePatterns.Clear();
                config.IncludePatterns.Add("*.*");

                var result = LargeFileFilter.FilterFiles(
                    bob.Repository,
                    config,
                    ChorusFileTypeHandlerCollection.CreateWithInstalledHandlers());
                Assert.That(result, Is.Null.Or.Empty);

                var shortpath = largeFwdataPathname.Replace(pathToRepo, "");
                Assert.That(config.ExcludePatterns, Does.Not.Contain(shortpath));
                Assert.That(config.IncludePatterns, Does.Not.Contain(shortpath));
            }
        }
コード例 #8
0
        public void SmallFileInNonExcludedFolderNotFilteredByExclusionAtDeeperNesting()
        {
            //Put a small file in [repo]\Cache and a large file in [repo]\foo\SomeLayer\Cache
            //exclude \foo\**\Cache, make sure that [repo]\Cache\smallFile was not filtered out.
            // Make sure that [repo]\foo\SomeLayer\Cache\largfile was not reported as being a large file.
            using (var bob = new RepositorySetup("bob"))
            {
                var smallData = "small" + Environment.NewLine;
                while (smallData.Length < LargeFileFilter.Megabyte / 3)
                {
                    smallData += smallData;
                }
                var pathToRepo  = bob.Repository.PathToRepo + Path.DirectorySeparatorChar;
                var cacheAtRoot = Path.Combine(bob.Repository.PathToRepo, "Cache");
                Directory.CreateDirectory(cacheAtRoot);
                const string smallVideoFilename       = "dinky.mov";
                var          smallNestedVideoPathname = Path.Combine(cacheAtRoot, smallVideoFilename);
                bob.ChangeFile(smallNestedVideoPathname, smallData);
                bob.Repository.TestOnlyAddSansCommit(smallNestedVideoPathname);

                var megabyteLongData = "long" + Environment.NewLine;
                while (megabyteLongData.Length < LargeFileFilter.Megabyte)
                {
                    megabyteLongData += megabyteLongData;
                }
                var fooAtRoot = Path.Combine(bob.Repository.PathToRepo, "foo");
                Directory.CreateDirectory(fooAtRoot);
                var firstLayerBelowFoo = Path.Combine(fooAtRoot, "SomeLayer");
                Directory.CreateDirectory(firstLayerBelowFoo);
                var nestedCacheFolder = Path.Combine(firstLayerBelowFoo, "Cache");
                Directory.CreateDirectory(nestedCacheFolder);
                const string largeVideoFilename       = "whopper.mov";
                var          largeNestedVideoPathname = Path.Combine(nestedCacheFolder, largeVideoFilename);
                bob.ChangeFile(largeNestedVideoPathname, megabyteLongData);
                bob.Repository.TestOnlyAddSansCommit(largeNestedVideoPathname);

                var config = bob.ProjectFolderConfig;
                config.ExcludePatterns.Clear();
                config.ExcludePatterns.Add(Path.Combine("foo", Path.Combine("**", "Cache")));
                config.IncludePatterns.Clear();
                config.IncludePatterns.Add("**.*");

                var result = LargeFileFilter.FilterFiles(
                    bob.Repository,
                    config,
                    ChorusFileTypeHandlerCollection.CreateWithInstalledHandlers());
                Assert.True(string.IsNullOrEmpty(result), @"Cache folder at root was improperly filtered by foo\**\Cache");

                var shortpath = largeNestedVideoPathname.Replace(pathToRepo, null);
                Assert.IsFalse(config.ExcludePatterns.Contains(shortpath));
                Assert.IsFalse(config.IncludePatterns.Contains(shortpath));

                shortpath = smallNestedVideoPathname.Replace(pathToRepo, null);
                Assert.IsFalse(config.ExcludePatterns.Contains(shortpath));
                Assert.IsFalse(config.IncludePatterns.Contains(shortpath));
            }
        }
コード例 #9
0
        public void LargeFileInNonExcludedFolderFiltered()
        {
            //Put a large file in [repo]\Cache and in [repo]\foo\SomeLayer\Cache
            //exclude \foo\**\Cache, make sure that [repo]\Cache\largeFile was filtered out.
            using (var bob = new RepositorySetup("bob"))
            {
                var megabyteLongData = "long" + Environment.NewLine;
                while (megabyteLongData.Length < LargeFileFilter.Megabyte)
                {
                    megabyteLongData += megabyteLongData;
                }
                var pathToRepo  = bob.Repository.PathToRepo + Path.DirectorySeparatorChar;
                var cacheAtRoot = Path.Combine(bob.Repository.PathToRepo, "Cache");
                Directory.CreateDirectory(cacheAtRoot);
                const string biggieNonexcludedFileName            = "biggie.mov";
                var          biggieNestedNonExcludedVideoPathname = Path.Combine(cacheAtRoot, biggieNonexcludedFileName);
                bob.ChangeFile(biggieNestedNonExcludedVideoPathname, megabyteLongData);
                bob.Repository.TestOnlyAddSansCommit(biggieNestedNonExcludedVideoPathname);

                var fooAtRoot = Path.Combine(bob.Repository.PathToRepo, "foo");
                Directory.CreateDirectory(fooAtRoot);
                var firstLayerBelowFoo = Path.Combine(fooAtRoot, "SomeLayer");
                Directory.CreateDirectory(firstLayerBelowFoo);
                var nestedCacheFolder = Path.Combine(firstLayerBelowFoo, "Cache");
                Directory.CreateDirectory(nestedCacheFolder);
                const string largeVideoFilename       = "whopper.mov";
                var          largeNestedVideoPathname = Path.Combine(nestedCacheFolder, largeVideoFilename);
                bob.ChangeFile(largeNestedVideoPathname, megabyteLongData);
                bob.Repository.TestOnlyAddSansCommit(largeNestedVideoPathname);

                var config = bob.ProjectFolderConfig;
                config.ExcludePatterns.Clear();
                config.ExcludePatterns.Add(Path.Combine("foo", Path.Combine("**", "Cache")));
                config.IncludePatterns.Clear();
                config.IncludePatterns.Add("**.*");

                var result = LargeFileFilter.FilterFiles(
                    bob.Repository,
                    config,
                    ChorusFileTypeHandlerCollection.CreateWithInstalledHandlers());
                Assert.That(result, Is.Not.Null.And.Not.Empty, @"Cache folder at root wasn't properly filtered by large file filer in [repo]\Cache\biggie.mov");
                var shortpath = largeNestedVideoPathname.Replace(pathToRepo, null);
                Assert.That(config.ExcludePatterns, Does.Not.Contain(shortpath));
                Assert.That(config.IncludePatterns, Does.Not.Contain(shortpath));

                shortpath = biggieNestedNonExcludedVideoPathname.Replace(pathToRepo, null);
                Assert.That(config.ExcludePatterns, Does.Contain(shortpath));
                Assert.That(config.IncludePatterns, Does.Not.Contain(shortpath));
            }
        }
コード例 #10
0
        public void LargeFileInExcludedDeeplyNestedPathIsNotFilteredOut()
        {
            using (var bob = new RepositorySetup("bob"))
            {
                var megabyteLongData = "long" + Environment.NewLine;
                while (megabyteLongData.Length < LargeFileFilter.Megabyte)
                {
                    megabyteLongData += megabyteLongData;
                }

                var pathToRepo = bob.Repository.PathToRepo + Path.DirectorySeparatorChar;
                var firstLayer = Path.Combine(bob.Repository.PathToRepo, "FirstLayer");
                Directory.CreateDirectory(firstLayer);
                var secondLayer = Path.Combine(firstLayer, "SecondLayer");
                Directory.CreateDirectory(secondLayer);
                var nestedFolder = Path.Combine(secondLayer, "Cache");
                Directory.CreateDirectory(nestedFolder);
                const string largeVideoFilename = "whopper.mov";
                var          largeVideoPathname = Path.Combine(nestedFolder, largeVideoFilename);
                bob.ChangeFile(largeVideoPathname, megabyteLongData);
                bob.Repository.TestOnlyAddSansCommit(largeVideoPathname);

                var config = bob.ProjectFolderConfig;
                config.ExcludePatterns.Clear();
                config.ExcludePatterns.Add(Path.Combine("FirstLayer", Path.Combine("**", "Cache")));
                config.IncludePatterns.Clear();
                config.IncludePatterns.Add("**.*");

                var result = LargeFileFilter.FilterFiles(
                    bob.Repository,
                    config,
                    ChorusFileTypeHandlerCollection.CreateWithInstalledHandlers());
                Assert.That(result, Is.Null.Or.Empty);

                var shortpath = largeVideoPathname.Replace(pathToRepo, "");
                Assert.That(config.ExcludePatterns, Does.Not.Contain(shortpath));
                Assert.That(config.IncludePatterns, Does.Not.Contain(shortpath));
            }
        }
コード例 #11
0
        public void ShortUnknownFileIsAllowed()
        {
            using (var bob = new RepositorySetup("bob"))
            {
                const string fileName = "test.chorusTest";
                bob.ChangeFile(fileName, _goodData);
                var fullPathname = Path.Combine(bob.ProjectFolderConfig.FolderPath, fileName);
                var pathToRepo   = bob.Repository.PathToRepo + Path.DirectorySeparatorChar;
                var config       = bob.ProjectFolderConfig;
                config.ExcludePatterns.Clear();
                config.IncludePatterns.Clear();
                config.IncludePatterns.Add("**.chorusTest");

                var result = LargeFileFilter.FilterFiles(
                    bob.Repository,
                    config,
                    _handlersColl);
                Assert.That(result, Is.Null.Or.Empty);
                var shortpath = fullPathname.Replace(pathToRepo, "");
                Assert.That(config.ExcludePatterns, Does.Not.Contain(shortpath));
                Assert.That(config.IncludePatterns, Does.Not.Contain(shortpath));
            }
        }