Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(39)

Unified Diff: vpython/venv/venv.go

Issue 2963503003: [errors] Greatly simplify common/errors package. (Closed)
Patch Set: fix nits Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « vpython/venv/util.go ('k') | vpython/venv/venv_resources_test.go » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: vpython/venv/venv.go
diff --git a/vpython/venv/venv.go b/vpython/venv/venv.go
index 0ff764e46035106023f7ce2184829ece1ceca5b7..646c1ea68783ff183617b05bd4bc775674df0861 100644
--- a/vpython/venv/venv.go
+++ b/vpython/venv/venv.go
@@ -55,7 +55,7 @@ func blocker(c context.Context) fslock.Blocker {
func withTempDir(l logging.Logger, prefix string, fn func(string) error) error {
tdir, err := ioutil.TempDir("", prefix)
if err != nil {
- return errors.Annotate(err).Reason("failed to create temporary directory").Err()
+ return errors.Annotate(err, "failed to create temporary directory").Err()
}
defer func() {
if err := filesystem.RemoveAll(tdir); err != nil {
@@ -76,9 +76,8 @@ func withTempDir(l logging.Logger, prefix string, fn func(string) error) error {
// could have overridden it or exported their own, let's make sure.
func EnvRootFromStampPath(path string) (string, error) {
if err := filesystem.AbsPath(&path); err != nil {
- return "", errors.Annotate(err).
- Reason("failed to get absolute path for specification file path: %(path)s").
- Err()
+ return "", errors.Annotate(err,
+ "failed to get absolute path for specification file path: %(path)s", path).Err()
}
return filepath.Dir(filepath.Dir(path)), nil
}
@@ -113,10 +112,10 @@ func With(c context.Context, cfg Config, blocking bool, fn func(context.Context,
// full environment initialization.
emptyEnv, err := cfg.WithoutWheels().makeEnv(c, nil)
if err != nil {
- return errors.Annotate(err).Reason("failed to initialize empty probe environment").Err()
+ return errors.Annotate(err, "failed to initialize empty probe environment").Err()
}
if err := emptyEnv.ensure(c, blocking); err != nil {
- return errors.Annotate(err).Reason("failed to create empty probe environment").Err()
+ return errors.Annotate(err, "failed to create empty probe environment").Err()
}
usedEnvs.Add(emptyEnv.Name)
@@ -228,13 +227,13 @@ func (e *Env) ensure(c context.Context, blocking bool) (err error) {
// No complete flag. Create a new VirtualEnv here.
if err := e.createLocked(c); err != nil {
- return errors.Annotate(err).Reason("failed to create new VirtualEnv").Err()
+ return errors.Annotate(err, "failed to create new VirtualEnv").Err()
}
// Mark that this environment is complete. This MUST succeed so other
// instances know that this environment is complete.
if err := e.touchCompleteFlagLocked(); err != nil {
- return errors.Annotate(err).Reason("failed to create complete flag").Err()
+ return errors.Annotate(err, "failed to create complete flag").Err()
}
logging.Debugf(c, "Successfully created new virtual environment [%s]!", e.Name)
@@ -256,7 +255,7 @@ func (e *Env) ensure(c context.Context, blocking bool) (err error) {
"path": e.EnvironmentStampPath,
}.Debugf(c, "Lock is held, and environment is not complete.")
if !blocking {
- return errors.Annotate(err).Reason("VirtualEnv lock is currently held (non-blocking)").Err()
+ return errors.Annotate(err, "VirtualEnv lock is currently held (non-blocking)").Err()
}
// Some other process holds the lock. Sleep a little and retry.
@@ -265,7 +264,7 @@ func (e *Env) ensure(c context.Context, blocking bool) (err error) {
}
default:
- return errors.Annotate(err).Reason("failed to create VirtualEnv").Err()
+ return errors.Annotate(err, "failed to create VirtualEnv").Err()
}
}
}
@@ -330,7 +329,7 @@ func (e *Env) withImpl(c context.Context, blocking bool, used stringset.Set,
"path": e.EnvironmentStampPath,
}.Debugf(c, "Could not obtain shared usage lock.")
if !blocking {
- return errors.Annotate(err).Reason("VirtualEnv lock is currently held (non-blocking)").Err()
+ return errors.Annotate(err, "VirtualEnv lock is currently held (non-blocking)").Err()
}
// Some other process holds the lock. Sleep a little and retry.
@@ -339,7 +338,7 @@ func (e *Env) withImpl(c context.Context, blocking bool, used stringset.Set,
}
default:
- return errors.Annotate(err).Reason("failed to use VirtualEnv").Err()
+ return errors.Annotate(err, "failed to use VirtualEnv").Err()
}
}
}
@@ -384,19 +383,16 @@ func (e *Env) AssertCompleteAndLoad() error {
content, err := ioutil.ReadFile(e.EnvironmentStampPath)
if err != nil {
- return errors.Annotate(err).Reason("failed to load file from: %(path)s").
- D("path", e.EnvironmentStampPath).
- Err()
+ return errors.Annotate(err, "failed to load file from: %s", e.EnvironmentStampPath).Err()
}
var environment vpython.Environment
if err := proto.UnmarshalText(string(content), &environment); err != nil {
- return errors.Annotate(err).Reason("failed to unmarshal vpython.Env stamp from: %(path)s").
- D("path", e.EnvironmentStampPath).
- Err()
+ return errors.Annotate(err, "failed to unmarshal vpython.Env stamp from: %s",
+ e.EnvironmentStampPath).Err()
}
if err := spec.NormalizeEnvironment(&environment); err != nil {
- return errors.Annotate(err).Reason("failed to normalize stamp environment").Err()
+ return errors.Annotate(err, "failed to normalize stamp environment").Err()
}
// If we are configured with an environment, validate that it matches the
@@ -424,7 +420,7 @@ func (e *Env) assertComplete() error {
case filesystem.IsNotExist(err):
return ErrNotComplete
case err != nil:
- return errors.Annotate(err).Reason("failed to check for completion flag").Err()
+ return errors.Annotate(err, "failed to check for completion flag").Err()
default:
return nil
}
@@ -441,7 +437,7 @@ func (e *Env) createLocked(c context.Context) error {
// Make sure our environment's base directory exists.
if err := filesystem.MakeDirs(e.Root); err != nil {
- return errors.Annotate(err).Reason("failed to create environment root").Err()
+ return errors.Annotate(err, "failed to create environment root").Err()
}
logging.Infof(c, "Using virtual environment root: %s", e.Root)
@@ -460,23 +456,23 @@ func (e *Env) createLocked(c context.Context) error {
err := withTempDir(logging.Get(c), "vpython_bootstrap", func(bootstrapDir string) error {
pkgDir := filepath.Join(bootstrapDir, "packages")
if err := filesystem.MakeDirs(pkgDir); err != nil {
- return errors.Annotate(err).Reason("could not create bootstrap packages directory").Err()
+ return errors.Annotate(err, "could not create bootstrap packages directory").Err()
}
if err := e.downloadPackages(c, pkgDir, packages); err != nil {
- return errors.Annotate(err).Reason("failed to download packages").Err()
+ return errors.Annotate(err, "failed to download packages").Err()
}
// Installing base VirtualEnv.
if err := e.installVirtualEnv(c, pkgDir); err != nil {
- return errors.Annotate(err).Reason("failed to install VirtualEnv").Err()
+ return errors.Annotate(err, "failed to install VirtualEnv").Err()
}
// Load PEP425 tags, if we don't already have them.
if e.Environment.Pep425Tag == nil {
pep425Tags, err := e.getPEP425Tags(c)
if err != nil {
- return errors.Annotate(err).Reason("failed to get PEP425 tags").Err()
+ return errors.Annotate(err, "failed to get PEP425 tags").Err()
}
e.Environment.Pep425Tag = pep425Tags
}
@@ -485,7 +481,7 @@ func (e *Env) createLocked(c context.Context) error {
if len(e.Environment.Spec.Wheel) > 0 {
// Install wheels into our VirtualEnv.
if err := e.installWheels(c, bootstrapDir, pkgDir); err != nil {
- return errors.Annotate(err).Reason("failed to install wheels").Err()
+ return errors.Annotate(err, "failed to install wheels").Err()
}
}
return nil
@@ -496,15 +492,14 @@ func (e *Env) createLocked(c context.Context) error {
// Write our specification file.
if err := e.WriteEnvironmentStamp(); err != nil {
- return errors.Annotate(err).Reason("failed to write environment stamp file to: %(path)s").
- D("path", e.EnvironmentStampPath).
- Err()
+ return errors.Annotate(err, "failed to write environment stamp file to: %s",
+ e.EnvironmentStampPath).Err()
}
logging.Debugf(c, "Wrote environment stamp file to: %s", e.EnvironmentStampPath)
// Finalize our VirtualEnv for bootstrap execution.
if err := e.finalize(c); err != nil {
- return errors.Annotate(err).Reason("failed to prepare VirtualEnv").Err()
+ return errors.Annotate(err, "failed to prepare VirtualEnv").Err()
}
return nil
@@ -514,7 +509,7 @@ func (e *Env) downloadPackages(c context.Context, dst string, packages []*vpytho
// Create a wheel sub-directory underneath of root.
logging.Debugf(c, "Loading %d package(s) into: %s", len(packages), dst)
if err := e.Config.Loader.Ensure(c, dst, packages); err != nil {
- return errors.Annotate(err).Reason("failed to download packages").Err()
+ return errors.Annotate(err, "failed to download packages").Err()
}
return nil
}
@@ -523,15 +518,14 @@ func (e *Env) installVirtualEnv(c context.Context, pkgDir string) error {
// Create our VirtualEnv package staging sub-directory underneath of root.
bsDir := filepath.Join(e.Root, ".virtualenv")
if err := filesystem.MakeDirs(bsDir); err != nil {
- return errors.Annotate(err).Reason("failed to create VirtualEnv bootstrap directory").
- D("path", bsDir).
- Err()
+ return errors.Annotate(err, "failed to create VirtualEnv bootstrap directory").
+ InternalReason("path(%s)", bsDir).Err()
}
// Identify the virtualenv directory: will have "virtualenv-" prefix.
matches, err := filepath.Glob(filepath.Join(pkgDir, "virtualenv-*"))
if err != nil {
- return errors.Annotate(err).Reason("failed to glob for 'virtualenv-' directory").Err()
+ return errors.Annotate(err, "failed to glob for 'virtualenv-' directory").Err()
}
if len(matches) == 0 {
return errors.Reason("no 'virtualenv-' directory provided by package").Err()
@@ -546,7 +540,7 @@ func (e *Env) installVirtualEnv(c context.Context, pkgDir string) error {
cmd.Dir = venvDir
attachOutputForLogging(c, logging.Debug, cmd)
if err := cmd.Run(); err != nil {
- return errors.Annotate(err).Reason("failed to create VirtualEnv").Err()
+ return errors.Annotate(err, "failed to create VirtualEnv").Err()
}
logging.Debugf(c, "Making VirtualEnv relocatable at: %s", e.Root)
@@ -557,7 +551,7 @@ func (e *Env) installVirtualEnv(c context.Context, pkgDir string) error {
cmd.Dir = venvDir
attachOutputForLogging(c, logging.Debug, cmd)
if err := cmd.Run(); err != nil {
- return errors.Annotate(err).Reason("failed to create VirtualEnv").Err()
+ return errors.Annotate(err, "failed to create VirtualEnv").Err()
}
return nil
@@ -584,23 +578,19 @@ func (e *Env) getPEP425Tags(c context.Context) ([]*vpython.PEP425Tag, error) {
attachOutputForLogging(c, logging.Debug, cmd)
if err := cmd.Run(); err != nil {
- return nil, errors.Annotate(err).Reason("failed to get PEP425 tags").Err()
+ return nil, errors.Annotate(err, "failed to get PEP425 tags").Err()
}
var tagEntries []pep425TagEntry
if err := json.Unmarshal(stdout.Bytes(), &tagEntries); err != nil {
- return nil, errors.Annotate(err).Reason("failed to unmarshal PEP425 tag output: %(output)s").
- D("output", stdout.String()).
- Err()
+ return nil, errors.Annotate(err, "failed to unmarshal PEP425 tag output: %s", stdout).Err()
}
tags := make([]*vpython.PEP425Tag, len(tagEntries))
for i, te := range tagEntries {
if len(te) != 3 {
- return nil, errors.Reason("invalid PEP425 tag entry: %(entry)v").
- D("entry", te).
- D("index", i).
- Err()
+ return nil, errors.Reason("invalid PEP425 tag entry: %v", te).
+ InternalReason("index(%d)", i).Err()
}
tags[i] = &vpython.PEP425Tag{
@@ -626,14 +616,14 @@ func (e *Env) installWheels(c context.Context, bootstrapDir, pkgDir string) erro
// Identify all downloaded wheels and parse them.
wheels, err := wheel.ScanDir(pkgDir)
if err != nil {
- return errors.Annotate(err).Reason("failed to load wheels").Err()
+ return errors.Annotate(err, "failed to load wheels").Err()
}
// Build a "wheel" requirements file.
reqPath := filepath.Join(bootstrapDir, "requirements.txt")
logging.Debugf(c, "Rendering requirements file to: %s", reqPath)
if err := wheel.WriteRequirementsFile(reqPath, wheels); err != nil {
- return errors.Annotate(err).Reason("failed to render requirements file").Err()
+ return errors.Annotate(err, "failed to render requirements file").Err()
}
cmd := e.Interpreter().IsolatedCommand(c,
@@ -646,7 +636,7 @@ func (e *Env) installWheels(c context.Context, bootstrapDir, pkgDir string) erro
"--requirement", reqPath)
attachOutputForLogging(c, logging.Debug, cmd)
if err := cmd.Run(); err != nil {
- return errors.Annotate(err).Reason("failed to install wheels").Err()
+ return errors.Annotate(err, "failed to install wheels").Err()
}
return nil
}
@@ -666,7 +656,7 @@ func (e *Env) finalize(c context.Context) error {
}
})
if err != nil {
- return errors.Annotate(err).Reason("failed to mark environment read-only").Err()
+ return errors.Annotate(err, "failed to mark environment read-only").Err()
}
}
return nil
@@ -674,7 +664,7 @@ func (e *Env) finalize(c context.Context) error {
func (e *Env) touchCompleteFlagLocked() error {
if err := filesystem.Touch(e.completeFlagPath, time.Time{}, 0644); err != nil {
- return errors.Annotate(err).Err()
+ return errors.Annotate(err, "").Err()
}
return nil
}
@@ -695,7 +685,7 @@ func (e *Env) Delete(c context.Context) error {
// Delete our environment directory.
if err := filesystem.RemoveAll(e.Root); err != nil {
- return errors.Annotate(err).Reason("failed to delete environment root").Err()
+ return errors.Annotate(err, "failed to delete environment root").Err()
}
// Attempt to delete our lock. On POSIX systems, this will successfully
@@ -715,13 +705,13 @@ func (e *Env) Delete(c context.Context) error {
logging.Debugf(c, "(Delete) Released exclusive lock for: %s", e.Name)
if err != nil {
- return errors.Annotate(err).Reason("failed to delete environment").Err()
+ return errors.Annotate(err, "failed to delete environment").Err()
}
// Try and remove the lock now that we don't hold it.
if !removedLock {
if err := os.Remove(e.lockPath); err != nil {
- return errors.Annotate(err).Reason("failed to remove lock").Err()
+ return errors.Annotate(err, "failed to remove lock").Err()
}
}
return nil
@@ -745,9 +735,8 @@ func (e *Env) completionFlagTimestamp() (time.Time, error) {
return time.Time{}, nil
default:
- return time.Time{}, errors.Annotate(err).Reason("failed to stat completion flag: %(path)s").
- D("path", e.completeFlagPath).
- Err()
+ return time.Time{}, errors.Annotate(err, "failed to stat completion flag: %s",
+ e.completeFlagPath).Err()
}
}
@@ -773,7 +762,7 @@ func attachOutputForLogging(c context.Context, l logging.Level, cmd *exec.Cmd) {
func mustReleaseLock(c context.Context, lock fslock.Handle, fn func() error) error {
defer func() {
if err := lock.Unlock(); err != nil {
- errors.Log(c, errors.Annotate(err).Reason("failed to release lock").Err())
+ errors.Log(c, errors.Annotate(err, "failed to release lock").Err())
panic(err)
}
}()
« no previous file with comments | « vpython/venv/util.go ('k') | vpython/venv/venv_resources_test.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698