예제 #1
0
파일: project.go 프로젝트: e8vm/shanhu
func (p *project) build() {
	p.lock.Lock()
	defer p.lock.Unlock()
	p.clear()

	// clear the saving slots
	pkgs, e := goload.ListPkgs(p.path)
	if p.err(e) {
		log.Printf("error: %s", e)
		return
	}
	pkgDep := p.buildPkgDep(pkgs)

	var fileDeps map[string]interface{}
	var files map[string]*repodb.File

	prog, e := goload.Pkgs(pkgs)
	if !p.err(e) {
		fileDeps = p.buildFileDeps(prog)

		var es []error
		files, es = goview.Files(prog)
		p.err(es...)
	}

	p.setPage("INDEX", p.jsonObj(pkgDep))
	for pkg, dep := range fileDeps {
		pkg, e = p.trimPath(pkg)
		if p.err(e) {
			continue
		}
		p.setPage(pkg, p.jsonObj(dep))
	}

	for path, f := range files {
		path, e := p.trimPath(path)
		if p.err(e) {
			continue
		}
		p.setPage(path, f.HTML)
	}

	for _, e := range p.errs {
		log.Printf("error: %s", e)
	}
}
예제 #2
0
파일: repo.go 프로젝트: e8vm/shanhu
// Build builds a repo into a repodb build.
func Build(path string) (*repodb.Build, []error) {
	// this will also check if it is in a git repo
	buildHash, err := GitCommitHash(path)
	if err != nil {
		return nil, []error{err}
	}

	r, err := newRepo(path)
	if err != nil {
		return nil, []error{err}
	}

	deps := new(repodb.Deps)

	deps.Pkgs, err = r.pkgDeps()
	if err != nil {
		return nil, []error{err}
	}

	var errs []error
	deps.Files, errs = r.fileDeps()
	if len(errs) > 0 {
		return nil, errs
	}

	files, errs := goview.Files(r.prog)
	if len(errs) > 0 {
		return nil, errs
	}

	return &repodb.Build{
		Name:  path,
		Build: buildHash,
		Lang:  "go",
		Deps:  deps,
		Files: files,
	}, nil
}