"strings"
"syscall"
- "git.curoverse.com/arvados.git/lib/cmd"
+ "git.arvados.org/arvados.git/lib/cmd"
)
var (
Copy = externalCmd{"arv-copy"}
Tag = externalCmd{"arv-tag"}
Ws = externalCmd{"arv-ws"}
- Run = externalCmd{"arv-run"}
Keep = cmd.Multi(map[string]cmd.Handler{
"get": externalCmd{"arv-get"},
"normalize": externalCmd{"arv-normalize"},
"docker": externalCmd{"arv-keepdocker"},
})
- Pipeline = cmd.Multi(map[string]cmd.Handler{
- "run": externalCmd{"arv-run-pipeline-instance"},
- })
// user, group, container, specimen, etc.
APICall = apiCallCmd{}
)
return 2
}
model := split[len(split)-1]
- return externalCmd{"arv"}.RunCommand("arv", legacyFlagsToFront(model, args), stdin, stdout, stderr)
+ return rubyArvCmd{model}.RunCommand(prog, args, stdin, stdout, stderr)
}
type rubyArvCmd struct {
}
func (rc rubyArvCmd) RunCommand(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer) int {
- return externalCmd{"arv"}.RunCommand("arv", legacyFlagsToFront(rc.subcommand, args), stdin, stdout, stderr)
+ wrapprog := "arv-ruby"
+ if _, err := exec.LookPath(wrapprog); err != nil && !strings.Contains(prog, "arv ") {
+ // arv-ruby isn't in PATH (i.e., installation method
+ // wasn't a recent "arvados-server install", which
+ // symlinks /usr/bin/arv-ruby ->
+ // /var/lib/arvados/bin/arv), so fall back to looking
+ // for the arvados-cli program as "arv". (But don't do
+ // this if we are being run as "arv" -- that would
+ // probably cause a recursive fork bomb.)
+ wrapprog = "arv"
+ }
+ return externalCmd{wrapprog}.RunCommand(wrapprog, legacyFlagsToFront(rc.subcommand, args), stdin, stdout, stderr)
}
type externalCmd struct {
}
fmt.Fprintf(stderr, "%s failed: %s\n", ec.prog, err)
return 1
+ case *exec.Error:
+ fmt.Fprintln(stderr, err)
+ if ec.prog == "arv" || ec.prog == "arv-ruby" {
+ fmt.Fprint(stderr, rubyInstallHints)
+ } else if strings.HasPrefix(ec.prog, "arv-") {
+ fmt.Fprint(stderr, pythonInstallHints)
+ }
+ return 1
default:
fmt.Fprintf(stderr, "error running %s: %s\n", ec.prog, err)
return 1
}
}
+
+var (
+ rubyInstallHints = `
+Note: This subcommand uses the arvados-cli Ruby gem. If that is not
+installed, try "gem install arvados-cli", or see
+https://doc.arvados.org/install for more details.
+
+`
+ pythonInstallHints = `
+Note: This subcommand uses the "arvados" Python module. If that is
+not installed, try:
+* "pip install arvados" (either as root or in a virtualenv), or
+* "sudo apt-get install python3-arvados-python-client", or
+* see https://doc.arvados.org/install for more details.
+
+`
+)