100 lines
3.6 KiB
Markdown
100 lines
3.6 KiB
Markdown
# GitLib
|
|
|
|
La `gitlib.py` es una librería de Python también usable como programa de línea
|
|
de comandos para pruebas.
|
|
|
|
Contiene las funciones de gestión de git, y la parte de línea de comandos permite ejecutarlas sin necesitar escribir un programa que use la librería.
|
|
|
|
|
|
# Instalación de dependencias para python
|
|
|
|
La conversion del código a Python 3 requiere actualmente los paquetes especificados en `requirements.txt`
|
|
|
|
Para instalar dependencias de python se usa el modulo venv (https://docs.python.org/3/library/venv.html) que instala todas las dependencias en un entorno independiente del sistema.
|
|
|
|
|
|
# Uso
|
|
|
|
|
|
## Distribuciones antiguas (18.04)
|
|
|
|
sudo apt install -y python3.8 python3.8-venv python3-venv libarchive-dev
|
|
python3.8 -m venv venvog
|
|
. venvog/bin/activate
|
|
python3.8 -m pip install --upgrade pip
|
|
pip3 install -r requirements.txt
|
|
|
|
Ejecutar con:
|
|
|
|
./gitlib.py
|
|
|
|
En modo de linea de comando, hay ayuda que se puede ver con:
|
|
|
|
./gitlib.py --help
|
|
|
|
|
|
Los comandos que comienzan por `--test` existen para hacer pruebas internas, y existen temporalmente para probar partes especificas del código. Es posible que necesiten condiciones especificas para funcionar, y van a eliminarse al completarse el desarrollo.
|
|
|
|
## Uso
|
|
|
|
**Nota:** Preferiblemente ejecutar como `root`, ya que `sudo` borra los cambios a las variables de entorno realizadas por venv. El resultado probable es un error de falta de módulos de Python, o un fallo del programa por usar dependencias demasiado antiguas.
|
|
|
|
# . venv/bin/activate
|
|
# ./opengnsys_git_installer.py
|
|
|
|
|
|
### Inicializar un repositorio:
|
|
|
|
./gitlib.py --init-repo-from /dev/sda2 --repo linux
|
|
|
|
|
|
Esto inicializa el repositorio 'linux' con el contenido /mnt/sda2.
|
|
|
|
`--repo` especifica el nombre de uno de los repositorios fijados durante la instalación de git (ver git installer).
|
|
|
|
El repositorio de sube al ogrepository, que se obtiene del parámetro de arranque pasado al kernel.
|
|
|
|
### Clonar un repositorio:
|
|
|
|
./gitlib.py --clone-repo-to /dev/sda2 --boot-device /dev/sda --repo linux
|
|
|
|
Esto clona un repositorio del ogrepository. El destino es un dispositivo físico que se va a formatear con el sistema de archivos necesario.
|
|
|
|
`--boot-device` especifica el dispositivo de arranque donde se va a instalar el bootloader (GRUB o similar)
|
|
|
|
`--repo` es el nombre de repositorio contenido en ogrepository.
|
|
|
|
# Documentación
|
|
|
|
Se puede generar documentación de Python con una utilidad como pdoc3 (hay multiples alternativas posibles):
|
|
|
|
# Instalar pdoc3
|
|
pip install --user pdoc3
|
|
|
|
# Generar documentación
|
|
pdoc3 --force --html opengnsys_git_installer.py
|
|
|
|
# Funcionamiento
|
|
|
|
## Requisitos
|
|
|
|
La gitlib esta diseñada para funcionar dentro de un entorno opengnsys existente. Invoca algunos de los comandos de opengnsys internamente, y lee los parámetros pasados al kernel en el oglive.
|
|
|
|
|
|
## Metadatos
|
|
|
|
Git no es capaz de almacenar datos de atributos extendidos, sockets y otros tipos de archivos especiales. El gitlib los almacena en .opengnsys-metadata en
|
|
el raíz del repositorio.
|
|
|
|
Los datos se guardan en archivos de tipo `jsonl`, una estructura de JSON por linea. Esto es para facilitar aplicaciones parciales solo aplicando el efecto de las lineas necesarias.
|
|
|
|
Existen estos archivos:
|
|
|
|
* `acls.jsonl`: ACLs
|
|
* `empty_directories.jsonl`: Directorios vacíos, ya que Git no es capaz de guardarlos
|
|
* `filesystems.json`: Información sobre sistemas de archivos: tipos, tamaños, UUIDs
|
|
* `gitignores.jsonl`: Lista de archivos .gitignore (los renombramos para que no interfieran con git)
|
|
* `metadata.json`: Metadatos generales acerca del repositorio
|
|
* `special_files.jsonl`: Archivos especiales como sockets
|
|
* `xattrs.jsonl`: Atributos extendidos
|