diff --git a/_testdata/not-permission/.gitkeep b/_testdata/not-permission/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/cmd/gitbase/command/server.go b/cmd/gitbase/command/server.go index a0f2ddb35..e49f6b810 100644 --- a/cmd/gitbase/command/server.go +++ b/cmd/gitbase/command/server.go @@ -309,6 +309,9 @@ func (c *Server) addMatch(match string) error { initDepth := strings.Count(root, string(os.PathSeparator)) return filepath.Walk(root, func(path string, info os.FileInfo, err error) error { if err != nil { + if os.IsPermission(err) { + return filepath.SkipDir + } return err } diff --git a/cmd/gitbase/command/server_test.go b/cmd/gitbase/command/server_test.go index afbd87ab8..25dbd09f0 100644 --- a/cmd/gitbase/command/server_test.go +++ b/cmd/gitbase/command/server_test.go @@ -1,6 +1,7 @@ package command import ( + "os" "testing" "github.com/src-d/gitbase" @@ -10,12 +11,22 @@ import ( func TestAddMatch(t *testing.T) { require := require.New(t) + notPermissionDir := "../../../_testdata/not-permission/" + fi, err := os.Stat(notPermissionDir) + require.NoError(err) + + require.NoError(os.Chmod(notPermissionDir, 0)) + defer func() { + require.NoError(os.Chmod(notPermissionDir, fi.Mode())) + }() + expected := []struct { path string err func(error, ...interface{}) }{ {"../../../_testdata/repositories/", require.NoError}, {"../../../_testdata/repositories-link/", require.NoError}, + {notPermissionDir, require.NoError}, {"../../../_testdata/repositories-not-exist/", require.Error}, } c := &Server{pool: gitbase.NewRepositoryPool(0)}