Selaa lähdekoodia

Survive submodule removal

Vadim Markovtsev 8 vuotta sitten
vanhempi
commit
d4ad0b076c
2 muutettua tiedostoa jossa 16 lisäystä ja 7 poistoa
  1. 14 5
      analyser.go
  2. 2 2
      cmd/hercules/main.go

+ 14 - 5
analyser.go

@@ -13,10 +13,10 @@ import (
 
 	"github.com/sergi/go-diff/diffmatchpatch"
 	"gopkg.in/src-d/go-git.v4"
+	"gopkg.in/src-d/go-git.v4/config"
 	"gopkg.in/src-d/go-git.v4/plumbing"
 	"gopkg.in/src-d/go-git.v4/plumbing/object"
 	"gopkg.in/src-d/go-git.v4/utils/merkletrie"
-	"gopkg.in/src-d/go-git.v4/config"
 )
 
 type Analyser struct {
@@ -107,6 +107,10 @@ func (obj DummyEncodedObject) Writer() (io.WriteCloser, error) {
 	return DummyIO{}, nil
 }
 
+func createDummyBlob(hash *plumbing.Hash) (*object.Blob, error) {
+	return object.DecodeBlob(DummyEncodedObject{*hash})
+}
+
 func (analyser *Analyser) handleInsertion(
 	change *object.Change, day int, status map[int]int64, files map[string]*File,
 	cache *map[plumbing.Hash]*object.Blob) {
@@ -375,7 +379,7 @@ func (analyser *Analyser) blobsAreClose(
 }
 
 func (analyser *Analyser) getBlob(entry *object.ChangeEntry, commit *object.Commit) (
-		*object.Blob, error) {
+	*object.Blob, error) {
 	blob, err := analyser.Repository.BlobObject(entry.TreeEntry.Hash)
 	if err != nil {
 		if err.Error() != git.ErrObjectNotFound.Error() {
@@ -398,7 +402,7 @@ func (analyser *Analyser) getBlob(entry *object.ChangeEntry, commit *object.Comm
 		_, exists := modules.Submodules[entry.Name]
 		if exists {
 			// we found that this is a submodule
-			return object.DecodeBlob(DummyEncodedObject{entry.TreeEntry.Hash})
+			return createDummyBlob(&entry.TreeEntry.Hash)
 		}
 		return nil, err
 	}
@@ -406,7 +410,7 @@ func (analyser *Analyser) getBlob(entry *object.ChangeEntry, commit *object.Comm
 }
 
 func (analyser *Analyser) cacheBlobs(changes *object.Changes, commit *object.Commit) (
-		*map[plumbing.Hash]*object.Blob, error) {
+	*map[plumbing.Hash]*object.Blob, error) {
 	cache := make(map[plumbing.Hash]*object.Blob)
 	for _, change := range *changes {
 		action, err := change.Action()
@@ -422,7 +426,12 @@ func (analyser *Analyser) cacheBlobs(changes *object.Changes, commit *object.Com
 		case merkletrie.Delete:
 			cache[change.From.TreeEntry.Hash], err = analyser.getBlob(&change.From, commit)
 			if err != nil {
-				fmt.Fprintf(os.Stderr, "file from %s\n", change.From.Name)
+				if err.Error() != git.ErrObjectNotFound.Error() {
+					fmt.Fprintf(os.Stderr, "file from %s\n", change.From.Name)
+				} else {
+					cache[change.From.TreeEntry.Hash], err = createDummyBlob(
+						&change.From.TreeEntry.Hash)
+				}
 			}
 		case merkletrie.Modify:
 			cache[change.To.TreeEntry.Hash], err = analyser.getBlob(&change.To, commit)

+ 2 - 2
cmd/hercules/main.go

@@ -5,12 +5,12 @@ import (
 	"flag"
 	"fmt"
 	"io"
+	"net/http"
+	_ "net/http/pprof"
 	"os"
 	"runtime/pprof"
 	"strconv"
 	"strings"
-	"net/http"
-	_ "net/http/pprof"
 
 	"gopkg.in/src-d/go-billy.v2/osfs"
 	"gopkg.in/src-d/go-git.v4"