blob: 71481e27ddad1fdab865929e4a8d2920ff28be78 [file] [log] [blame]
// Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Package proxydatasource implements an internal.DataSource backed solely by a
// proxy instance.
package proxydatasource
import (
"context"
"golang.org/x/pkgsite/internal"
"golang.org/x/pkgsite/internal/derrors"
"golang.org/x/pkgsite/internal/proxy"
)
// GetUnit returns information about a directory at a path.
func (ds *DataSource) GetUnit(ctx context.Context, um *internal.UnitMeta, field internal.FieldSet, bc internal.BuildContext) (_ *internal.Unit, err error) {
defer derrors.Wrap(&err, "GetUnit(%q, %q, %q)", um.Path, um.ModulePath, um.Version)
return ds.getUnit(ctx, um.Path, um.ModulePath, um.Version, bc)
}
// GetModuleInfo returns the ModuleInfo as fetched from the proxy for module
// version specified by modulePath and version.
func (ds *DataSource) GetModuleInfo(ctx context.Context, modulePath, version string) (_ *internal.ModuleInfo, err error) {
defer derrors.Wrap(&err, "GetModuleInfo(%q, %q)", modulePath, version)
m, err := ds.getModule(ctx, modulePath, version, internal.BuildContext{})
if err != nil {
return nil, err
}
return &m.ModuleInfo, nil
}
// GetUnitMeta returns information about the given path.
func (ds *DataSource) GetUnitMeta(ctx context.Context, path, inModulePath, inVersion string) (_ *internal.UnitMeta, err error) {
defer derrors.Wrap(&err, "GetUnitMeta(%q, %q, %q)", path, inModulePath, inVersion)
var info *proxy.VersionInfo
if inModulePath == internal.UnknownModulePath {
inModulePath, info, err = ds.findModule(ctx, path, inVersion)
if err != nil {
return nil, err
}
inVersion = info.Version
}
m, err := ds.getModule(ctx, inModulePath, inVersion, internal.BuildContext{})
if err != nil {
return nil, err
}
um := &internal.UnitMeta{
Path: path,
ModuleInfo: internal.ModuleInfo{
ModulePath: inModulePath,
Version: inVersion,
IsRedistributable: m.IsRedistributable,
},
}
for _, d := range m.Units {
if d.Path == path {
um.Name = d.Name
um.IsRedistributable = d.IsRedistributable
break
}
}
return um, nil
}
// GetExperiments is unimplemented.
func (*DataSource) GetExperiments(ctx context.Context) ([]*internal.Experiment, error) {
return nil, nil
}
// GetNestedModules will return an empty slice since it is not implemented in proxy mode.
func (ds *DataSource) GetNestedModules(ctx context.Context, modulePath string) (_ []*internal.ModuleInfo, err error) {
return nil, nil
}
// GetModuleReadme is unimplemented.
func (ds *DataSource) GetModuleReadme(ctx context.Context, modulePath, resolvedVersion string) (*internal.Readme, error) {
return nil, nil
}