示例#1
0
        public void SimpleStoreTest()
        {
            CreateFile("a.txt", "some content");
            CreateFile("b.txt", "other content");

            Blob blobA = CreateBlob("a.txt");
            Blob blobB = CreateBlob("b.txt");

            HashKey keyBlobA = ObjectDatabase.Store(blobA);
            HashKey keyBlobB = ObjectDatabase.Store(blobB);

            TreeBuilder treeBuilder = TreeBuilder.CreateRootTreeBuilder();

            treeBuilder.AddBlobToTreeHierarchy(blobA);
            treeBuilder.AddBlobToTreeHierarchy(blobB);

            HashKey keyTreeBuilder = ObjectDatabase.Store(treeBuilder);

            Tree retrievedTree = ObjectDatabase.RetrieveTree(keyTreeBuilder);

            Assert.Equal(treeBuilder.GetChecksum(), retrievedTree.GetChecksum());
        }
示例#2
0
        public void SkipDirTest()
        {
            CreateFile("a.txt", "some content");
            Directory.CreateDirectory("dir/subdir");
            CreateFile("dir/subdir/b.txt", "other content");

            Blob blobA = CreateBlob("a.txt");
            Blob blobB = CreateBlob("dir/subdir/b.txt");

            TreeBuilder treeBuilder = TreeBuilder.CreateRootTreeBuilder();

            treeBuilder.AddBlobToTreeHierarchy(blobA);
            treeBuilder.AddBlobToTreeHierarchy(blobB);

            List <Blob>        allBlobs = new List <Blob>();
            List <TreeBuilder> allTrees = new List <TreeBuilder>();

            treeBuilder.GetAllBlobsAndSubTrees(allBlobs, allTrees);

            Assert.Equal(allBlobs.Count, 2);
            Assert.Equal(allTrees.Count, 3);
        }
示例#3
0
        /// Beware of deleted files - do not load blobs for them
        private void AddAllStagedFilesToTree(TreeBuilder treeBuilder, List <string> stagedFiles)
        {
            foreach (string stagedFile in stagedFiles)
            {
                RelativePath stagedFilePath = new RelativePath(stagedFile);

                if (Index.ResolveFileStatus(stagedFilePath) == FileStatus.Deleted)
                {
                    Index.RemoveFile(stagedFilePath);
                    continue;
                }
                Blob blob = GetStagedFileBlob(stagedFile);
                treeBuilder.AddBlobToTreeHierarchy(blob);
                Index.CommitFile(stagedFilePath);
            }
        }
示例#4
0
        private void AddRestOfTrackedFilesToTree(TreeBuilder treeBuilder, List <string> stagedFiles)
        {
            ISet <string> restOfTrackedFiles = new HashSet <string>(Index.GetAllTrackedFiles());

            restOfTrackedFiles.ExceptWith(stagedFiles);

            foreach (string file in restOfTrackedFiles)
            {
                string repoKeyStr = Index.GetRepoFileContentKey(new RelativePath(file));
                Debug.Assert(repoKeyStr != null, "never commited files should not exist now");
                HashKey repoKey = HashKey.ParseFromString(repoKeyStr);

                Blob blob = ObjectDatabase.RetrieveBlob(repoKey);
                treeBuilder.AddBlobToTreeHierarchy(blob);
            }
        }
示例#5
0
        private HashKey CreateAndStoreSimpleCommit(Blob[] blobs)
        {
            HashKey[] blobKeys = new HashKey[blobs.Length];

            // blobs are normaly stored in AddCommand
            for (int i = 0; i < blobKeys.Length; i++)
            {
                blobKeys[i] = ObjectDatabase.Store(blobs[i]);
            }

            // this is done in CommitCommand
            TreeBuilder treeBuilder = TreeBuilder.CreateRootTreeBuilder();

            foreach (Blob blob in blobs)
            {
                treeBuilder.AddBlobToTreeHierarchy(blob);
            }

            Commit commit = new Commit(null, treeBuilder.GetChecksum(), "Some commit message");

            return(ObjectDatabase.StoreCommitWithTreeHierarchy(commit, treeBuilder));
        }