Mensajes de error y códigos de salida

Traducción automática provisional, sin revisar. En caso de duda, consulte la versión en inglés, que es la versión de referencia.

Los mensajes de fallo de Kent son un conjunto corto y fijo. Todos nombran el comando que los produjo, así que un mensaje le dice tanto qué salió mal como dónde. Esta página los lista todos.

Kent imprime en inglés, así que los mensajes de abajo se muestran tal cual aparecen en su terminal; la explicación de cada uno está traducida.

Códigos de salida

No hay un código distinto por tipo de fallo. En un script, compruebe el código de salida para decidir si el comando funcionó, y lea el mensaje para saber por qué no:

if ! kent info mydata.sqlite; then
    echo "could not report on the database" >&2
fi

Errores de línea de comandos

Estos vienen del análisis de la línea de comandos, antes de abrir ninguna base de datos. Cada uno va seguido del listado de uso completo, el mismo texto que imprime kent help.

$ kent
missing command
usage: kent help
usage: kent createdb <dbfilename>
...
$ kent merge mydata.sqlite
unknown command: merge
usage: kent help
usage: kent createdb <dbfilename>
...
$ kent info
wrong number of arguments
usage: kent info <dbfilename>

kent sqldump y kent archive son las excepciones: toman opciones en lugar de una base de datos posicional, así que una base de datos omitida se informa como una opción que falta.

$ kent sqldump
missing required flag: --in
usage: kent sqldump --in <dbfilename> [--out <outfile>] [--schema-only]
$ kent archive --in mydata.sqlite
missing required flag: --out
usage: kent archive --in <dbfilename> --out <archive>

archive y restore requieren ambos --out, donde sqldump la trata como opcional. Un zip no puede escribirse en la salida estándar y una base de datos no puede construirse en ella, así que ninguno de los dos tiene un valor por defecto al que recurrir.

Errores de fichero y de base de datos

Cada mensaje empieza por kent y el nombre del comando.

MensajeQué significa
kent createdb: NAME already existsEl fichero de destino ya está ahí. createdb nunca sobrescribe; elimine usted el fichero si pretendía reemplazarlo.
kent info: NAME does not existLa ruta no está ahí. Kent deliberadamente no la crea. El mismo mensaje aparece para details.
kent info: failed to open database: …El fichero existe pero no se pudo abrir como base de datos Cordelia; lo más común es que no lo sea, o que su esquema sea más antiguo del que acepta esta compilación.
kent info: failed to read schema versionLa base de datos se abrió, pero no se pudo leer su versión de esquema.
kent info: failed to list tablesLa base de datos se abrió, pero no se pudo leer su lista de tablas.
kent info: failed to count rows in NAMENo se pudo leer el recuento de filas de una tabla concreta. La tabla nombrada es la que falló.
kent createdb: failed to create databaseNo se pudo crear el fichero: casi siempre un directorio inexistente o un problema de permisos en la ruta de destino.
kent createdb: failed to create tablesEl fichero se creó pero no se pudo escribir el esquema dentro de él.
kent sqldump: NAME does not existLa ruta dada a --in no está ahí. Igual que con los demás comandos, Kent no la crea.
kent sqldump: refusing to write the export over its own source: NAME--in y --out nombran el mismo fichero. Se rechaza antes de leer nada, en lugar de truncar la base de datos que pidió exportar.
kent files: NAME does not existLa ruta no está ahí, y Kent no la crea; véase files.
kent archive: NAME does not existLa ruta dada a --in no está ahí. Igual que con todos los demás comandos, Kent no la crea.
kent archive: cannot create the archive NAMEEl destino dado a --out no se pudo abrir para escritura: casi siempre un directorio inexistente o un problema de permisos.
kent archive: cannot write NAMENo se pudo escribir un fichero en el directorio de preparación junto al destino. Habitualmente un disco lleno: un archivo necesita sitio para sí mismo y para su contenido preparado a la vez; véase archive.
kent archive: cannot add NAME to the archiveNo se pudo añadir al zip un fichero preparado.
kent archive: finalising the archive failedEl zip no se pudo cerrar y completar. El archivo parcial se elimina en lugar de quedarse ahí.
kent restore: NAME already existsLa base de datos que nombra --out ya está ahí. restore nunca sobrescribe una, la misma regla que sigue createdb.
kent restore: NAME is not readable as a kent archive: …El fichero no es un zip, o no se pudo abrir. El motivo subyacente sigue a los dos puntos.
kent restore: NAME is not a kent archive: it has no …Es un zip, pero le falta el manifiesto o el esquema que lleva todo archivo.
kent restore: this archive is format version N, but this build of kent understands version M at mostEl archivo lo escribió un Kent más nuevo. Kent lo rechaza en lugar de adivinar un formato posterior a él.
kent restore: the archive's manifest lists table "NAME" but the archive has no …El archivo está incompleto. Se rechaza en lugar de restaurarse en parte.
kent restore: the archive's manifest claims N rows in "NAME" but it holds MEl archivo se contradice a sí mismo, así que está dañado o se construyó mal.
kent restore: the archive is inconsistent: its schema.sql stamps schema version N but its manifest says MLo mismo, para la versión de esquema.

Cuando un mensaje termina en dos puntos, el error subyacente de la base de datos lo sigue en la misma línea. Ese detalle final procede de la capa de base de datos de Cordelia, así que la misma redacción aparece en Cordelia; véase Mensajes de error de Cordelia.

La base de datos anterior a esta compilación

Este merece destacarse porque la redacción puede leerse como corrupción cuando no lo es:

$ kent info old.sqlite
kent info: failed to open database: This database uses an older schema and cannot be opened; version 2 is required. Create a new database and import your .FIT files again.
$ echo $?
1

El fichero está intacto. Simplemente lo escribió una Cordelia más antigua de la que entiende esta compilación de Kent, y se rechaza al abrirlo en lugar de leerlo con un esquema que no le corresponde.

kent sqldump y kent archive son los dos comandos que no lo rechazan. Leer una base de datos antigua es exactamente lo que se hace antes de migrarla, así que ambos la leen de todos modos. sqldump lo dice en la salida de error; esto es un aviso, no un error, y el código de salida es 0:

$ kent sqldump --in old.sqlite --out old.sql
kent sqldump: note: this database reports schema version 0, but this build of cordelia expects 2. Exporting it anyway.
$ echo $?
0

archive no imprime tal nota. En su lugar registra la versión de esquema que encontró en el propio manifest.json del archivo, así que la información viaja con el archivo en lugar de pasar de largo por un terminal.

Kent no tiene ningún comando que migre in situ una base de datos antigua. Leerla es la entrada de una migración, no una migración en sí; véase Exportar una base de datos con sqldump y Archivar una base de datos con archive.

Errores internos no controlados

Si algo escapa al manejo normal de errores de Kent, se informa por la salida de error y no por la salida estándar, y el código de salida sigue siendo 1:

$ kent info /some/unreadable/path.sqlite
kent: filesystem error: ...
kent: unhandled exception of unknown type

Cualquiera de los dos merece informarse; véase Informes de errores y solicitudes de funciones, e incluya el comando exacto que ejecutó.

Véase también