🚗 How to work

Mechanism for recoding inside the kani

Using bash/zsh hook mechanism for recoding. Note that kani runs on bash, you must install rcaloras/bash-preexec.

Directory layout of kani

KANI_HOME

The directory layout of KANI_HOME is like below.

kani
├── README.md
├── analyses
│   ├── recommend.py (decision of recommendation)
│   └── commit_guide.txt (recommendation text)
├── bin
│   └── git-kani
└── scripts # utility scripts (includes hook function)
    ├── chpwd_hook.sh
    ├── periodic_hook.sh
    ├── precmd_hook.sh
    ├── preexec_hook.sh
    ├── find-project-dir.sh  # script for finding the project root from the current directory
    ├── is-target-project.sh # script for checking the current directory is the target of kani
    └── store_db.sh          # script for storing the command line histories into the database.

.kani on the project root.

Also, kani creates .kani directory on the project root (same location as .git directory). The kani stores various recorded data into .kani directory, such as command line histories (kani.sqlite), previous command (prev_cmd), and etc.

Database

Schema

Name Type Primary Null Default Note
id INTEGER Yes No N/A
datetime TEXT No No CURRENT_TIMESTAMP UTC
command TEXT No No "”
status_code INTEGER No No "”
branch TEXT No Yes
revision TEXT No Yes
shell shell No No

CREATE TABLE

CREATE TABLE histories ( \
  id          INTEGER PRIMARY KEY, \
  datetime    TEXT    DEFAULT CURRENT_TIMESTAMP, \
  command     TEXT    NOT NULL, \
  status_code INTEGER NOT NULL, \
  branch      TEXT, \
  revision    TEXT, \
  shell       TEXT  \
)```