Skip to content

Commit a3ea874

Browse files
committed
Return error when importing git submodule.
1 parent 64ebaea commit a3ea874

File tree

2 files changed

+48
-4
lines changed

2 files changed

+48
-4
lines changed

git/git.go

+9-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@ package git
33

44
import (
55
"context"
6+
"errors"
67
"io/ioutil"
78
"path"
9+
"path/filepath"
810

911
"github.com/go-git/go-git/v5"
1012
"github.com/go-git/go-git/v5/plumbing"
@@ -35,7 +37,9 @@ type importer struct {
3537

3638
// ImportFromFS is a helper to import a git repo from a directory.
3739
func ImportFromFS(ctx context.Context, dag ipld.DAGService, name, dir string) (cid.Cid, error) {
38-
repo, err := git.PlainOpen(dir)
40+
dot := filepath.Join(dir, ".git")
41+
42+
repo, err := git.PlainOpen(dot)
3943
if err != nil {
4044
return cid.Cid{}, err
4145
}
@@ -209,8 +213,11 @@ func (i *importer) AddTree(hash plumbing.Hash) (ipld.Node, error) {
209213

210214
// AddTreeEntry adds the tree entry with the given hash to the dag.
211215
func (i *importer) AddTreeEntry(entry object.TreeEntry) (ipld.Node, error) {
212-
if entry.Mode == filemode.Dir {
216+
switch entry.Mode {
217+
case filemode.Dir:
213218
return i.AddTree(entry.Hash)
219+
case filemode.Submodule:
220+
return nil, errors.New("submodules not supported")
214221
}
215222

216223
blob, err := i.repo.BlobObject(entry.Hash)

git/git_test.go

+39-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@ package git
22

33
import (
44
"context"
5+
"io/ioutil"
6+
"os"
57
"testing"
68

9+
"github.com/go-git/go-git/v5"
710
"github.com/ipfs/go-merkledag/dagutils"
811
"github.com/multiverse-vcs/go-multiverse/data"
912
)
@@ -12,7 +15,7 @@ func TestImportFromURL(t *testing.T) {
1215
ctx := context.Background()
1316
dag := dagutils.NewMemoryDagService()
1417

15-
id, err := ImportFromURL(ctx, dag, "go-multiverse", "https://github.com/multiverse-vcs/go-multiverse")
18+
id, err := ImportFromURL(ctx, dag, "test", "https://github.com/multiverse-vcs/go-multiverse")
1619
if err != nil {
1720
t.Fatal("failed to import git repo")
1821
}
@@ -22,7 +25,41 @@ func TestImportFromURL(t *testing.T) {
2225
t.Fatal("failed to get repo")
2326
}
2427

25-
if repo.Name != "go-multiverse" {
28+
if repo.Name != "test" {
2629
t.Error("unexpected repo name")
2730
}
2831
}
32+
33+
func TestImportFromFS(t *testing.T) {
34+
ctx := context.Background()
35+
dag := dagutils.NewMemoryDagService()
36+
37+
dir, err := ioutil.TempDir("", "*")
38+
if err != nil {
39+
t.Fatal(err)
40+
}
41+
defer os.RemoveAll(dir)
42+
43+
opts := git.CloneOptions{
44+
URL: "https://github.com/multiverse-vcs/go-multiverse",
45+
}
46+
47+
_, err = git.PlainClone(dir, false, &opts)
48+
if err != nil {
49+
t.Fatal("failed to clone repo")
50+
}
51+
52+
id, err := ImportFromFS(ctx, dag, "test", dir)
53+
if err != nil {
54+
t.Fatalf("failed to import git repo %s", err)
55+
}
56+
57+
repo, err := data.GetRepository(ctx, dag, id)
58+
if err != nil {
59+
t.Fatal("failed to get repo")
60+
}
61+
62+
if repo.Name != "test" {
63+
t.Error("unexpected repo name")
64+
}
65+
}

0 commit comments

Comments
 (0)