This file is indexed.

/usr/share/gocode/src/github.com/constabulary/gb/internal/vendor/depset.go is in golang-github-constabulary-gb-dev 0.4.4-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package vendor

import (
	"go/build"
	"os"
	"path/filepath"
	"strings"

	"github.com/pkg/errors"
)

// Pkg describes a Go package.
type Pkg struct {
	*Depset
	*build.Package
}

// Depset describes a set of related Go packages.
type Depset struct {
	Root   string
	Prefix string
	Pkgs   map[string]*Pkg
}

// LoadPaths returns a map of paths to Depsets.
func LoadPaths(paths ...struct{ Root, Prefix string }) (map[string]*Depset, error) {
	m := make(map[string]*Depset)
	for _, p := range paths {
		set, err := LoadTree(p.Root, p.Prefix)
		if err != nil {
			return nil, err
		}
		m[set.Root] = set
	}
	return m, nil
}

// LoadTree parses a tree of source files into a map of *pkgs.
func LoadTree(root string, prefix string) (*Depset, error) {
	d := Depset{
		Root:   root,
		Prefix: prefix,
		Pkgs:   make(map[string]*Pkg),
	}
	fn := func(dir string, fi os.FileInfo) error {
		importpath := filepath.Join(prefix, dir[len(root)+1:])

		// if we're at the root of a tree, skip it
		if importpath == "" {
			return nil
		}

		p, err := loadPackage(&d, dir)
		if err != nil {
			if _, ok := err.(*build.NoGoError); ok {
				return nil
			}
			return errors.Wrapf(err, "loadPackage(%q, %q)", dir, importpath)
		}
		p.ImportPath = filepath.ToSlash(importpath)
		if p != nil {
			d.Pkgs[p.ImportPath] = p
		}
		return nil
	}

	// handle root of the tree
	fi, err := os.Stat(root)
	if err != nil {
		// some paths may not exist, for example $GOROOT/src/vendor on Go < 1.6
		if os.IsNotExist(err) {
			return &d, nil
		}
		return nil, err
	}
	if err := fn(root+string(filepath.Separator), fi); err != nil {
		return nil, err
	}

	// walk sub directories
	err = eachDir(root, fn)
	return &d, err
}

func loadPackage(d *Depset, dir string) (*Pkg, error) {
	p := Pkg{
		Depset: d,
	}
	var err error

	// expolit local import logic
	p.Package, err = build.ImportDir(dir, build.ImportComment)
	return &p, err
}

func eachDir(dir string, fn func(string, os.FileInfo) error) error {
	f, err := os.Open(dir)
	if err != nil {
		return err
	}
	defer f.Close()
	files, err := f.Readdir(-1)
	for _, fi := range files {
		if !fi.IsDir() {
			continue
		}
		if strings.HasPrefix(fi.Name(), "_") || strings.HasPrefix(fi.Name(), ".") || fi.Name() == "testdata" {
			continue
		}
		path := filepath.Join(dir, fi.Name())
		if err := fn(path, fi); err != nil {
			return err
		}
		if err := eachDir(path, fn); err != nil {
			return err
		}
	}
	return nil
}