Browse Source

Add the test for .gitmodules blob

Vadim Markovtsev 7 years ago
parent
commit
badffab666
2 changed files with 43 additions and 6 deletions
  1. 8 6
      blob_cache.go
  2. 35 0
      blob_cache_test.go

+ 8 - 6
blob_cache.go

@@ -45,12 +45,12 @@ func (self *BlobCache) Consume(deps map[string]interface{}) (map[string]interfac
 		}
 		}
 		switch action {
 		switch action {
 		case merkletrie.Insert:
 		case merkletrie.Insert:
-			cache[change.To.TreeEntry.Hash], err = self.getBlob(&change.To, commit)
+			cache[change.To.TreeEntry.Hash], err = self.getBlob(&change.To, commit.File)
 			if err != nil {
 			if err != nil {
 				fmt.Fprintf(os.Stderr, "file to %s %s\n", change.To.Name, change.To.TreeEntry.Hash)
 				fmt.Fprintf(os.Stderr, "file to %s %s\n", change.To.Name, change.To.TreeEntry.Hash)
 			}
 			}
 		case merkletrie.Delete:
 		case merkletrie.Delete:
-			cache[change.From.TreeEntry.Hash], err = self.getBlob(&change.From, commit)
+			cache[change.From.TreeEntry.Hash], err = self.getBlob(&change.From, commit.File)
 			if err != nil {
 			if err != nil {
 				if err.Error() != plumbing.ErrObjectNotFound.Error() {
 				if err.Error() != plumbing.ErrObjectNotFound.Error() {
 					fmt.Fprintf(os.Stderr, "file from %s %s\n", change.From.Name, change.From.TreeEntry.Hash)
 					fmt.Fprintf(os.Stderr, "file from %s %s\n", change.From.Name, change.From.TreeEntry.Hash)
@@ -60,11 +60,11 @@ func (self *BlobCache) Consume(deps map[string]interface{}) (map[string]interfac
 				}
 				}
 			}
 			}
 		case merkletrie.Modify:
 		case merkletrie.Modify:
-			cache[change.To.TreeEntry.Hash], err = self.getBlob(&change.To, commit)
+			cache[change.To.TreeEntry.Hash], err = self.getBlob(&change.To, commit.File)
 			if err != nil {
 			if err != nil {
 				fmt.Fprintf(os.Stderr, "file to %s\n", change.To.Name)
 				fmt.Fprintf(os.Stderr, "file to %s\n", change.To.Name)
 			}
 			}
-			cache[change.From.TreeEntry.Hash], err = self.getBlob(&change.From, commit)
+			cache[change.From.TreeEntry.Hash], err = self.getBlob(&change.From, commit.File)
 			if err != nil {
 			if err != nil {
 				fmt.Fprintf(os.Stderr, "file from %s\n", change.From.Name)
 				fmt.Fprintf(os.Stderr, "file from %s\n", change.From.Name)
 			}
 			}
@@ -82,7 +82,9 @@ func (cache *BlobCache) Finalize() interface{} {
 	return nil
 	return nil
 }
 }
 
 
-func (cache *BlobCache) getBlob(entry *object.ChangeEntry, commit *object.Commit) (
+type FileGetter func(path string) (*object.File, error)
+
+func (cache *BlobCache) getBlob(entry *object.ChangeEntry, fileGetter FileGetter) (
 	*object.Blob, error) {
 	*object.Blob, error) {
 	blob, err := cache.repository.BlobObject(entry.TreeEntry.Hash)
 	blob, err := cache.repository.BlobObject(entry.TreeEntry.Hash)
 	if err != nil {
 	if err != nil {
@@ -90,7 +92,7 @@ func (cache *BlobCache) getBlob(entry *object.ChangeEntry, commit *object.Commit
 			fmt.Fprintf(os.Stderr, "getBlob(%s)\n", entry.TreeEntry.Hash.String())
 			fmt.Fprintf(os.Stderr, "getBlob(%s)\n", entry.TreeEntry.Hash.String())
 			return nil, err
 			return nil, err
 		}
 		}
-		file, err_modules := commit.File(".gitmodules")
+		file, err_modules := fileGetter(".gitmodules")
 		if err_modules != nil {
 		if err_modules != nil {
 			return nil, err
 			return nil, err
 		}
 		}

+ 35 - 0
blob_cache_test.go

@@ -179,3 +179,38 @@ func TestBlobCacheFinalize(t *testing.T) {
 	outcome := fixtureBlobCache().Finalize()
 	outcome := fixtureBlobCache().Finalize()
 	assert.Nil(t, outcome)
 	assert.Nil(t, outcome)
 }
 }
+
+func TestBlobCacheGetBlob(t *testing.T) {
+	cache := fixtureBlobCache()
+	treeFrom, _ := testRepository.TreeObject(plumbing.NewHash(
+		"80fe25955b8e725feee25c08ea5759d74f8b670d"))
+	entry := object.ChangeEntry{
+		Name: "labours.py",
+		Tree: treeFrom,
+		TreeEntry: object.TreeEntry{
+			Name: "labours.py",
+			Mode: 0100644,
+			Hash: plumbing.NewHash("80fe25955b8e725feee25c08ea5759d74f8b670d"),
+		},
+	}
+	getter := func(path string) (*object.File, error) {
+		assert.Equal(t, path, ".gitmodules")
+    commit, _ := testRepository.CommitObject(plumbing.NewHash(
+		  "13272b66c55e1ba1237a34104f30b84d7f6e4082"))
+		return commit.File("test_data/gitmodules")
+	}
+	blob, err := cache.getBlob(&entry, getter)
+	assert.Nil(t, blob)
+	assert.NotNil(t, err)
+	assert.Equal(t, err.Error(), plumbing.ErrObjectNotFound.Error())
+	getter = func(path string) (*object.File, error) {
+		assert.Equal(t, path, ".gitmodules")
+    commit, _ := testRepository.CommitObject(plumbing.NewHash(
+		  "13272b66c55e1ba1237a34104f30b84d7f6e4082"))
+		return commit.File("test_data/gitmodules_empty")
+	}
+	blob, err = cache.getBlob(&entry, getter)
+	assert.Nil(t, blob)
+	assert.NotNil(t, err)
+	assert.Equal(t, err.Error(), plumbing.ErrObjectNotFound.Error())
+}