summaryrefslogtreecommitdiffstats
path: root/client/engine/File.lib
diff options
context:
space:
mode:
authorramon <ramongomez@us.es>2009-10-19 09:47:15 +0000
committerramon <ramongomez@us.es>2009-10-19 09:47:15 +0000
commit8964f9b26b06f61e20fba15bfe4fb653cc1a31b5 (patch)
tree8663353fbea6faab97ee1ac38d541d5485771018 /client/engine/File.lib
parent87b02b26e403807cf587356ed77ac52c74eba3fd (diff)
Resstructuración de trunk.
git-svn-id: https://opengnsys.es/svn/trunk@390 a21b9725-9963-47de-94b9-378ad31fedc9
Diffstat (limited to 'client/engine/File.lib')
-rwxr-xr-xclient/engine/File.lib225
1 files changed, 225 insertions, 0 deletions
diff --git a/client/engine/File.lib b/client/engine/File.lib
new file mode 100755
index 00000000..22ef4649
--- /dev/null
+++ b/client/engine/File.lib
@@ -0,0 +1,225 @@
+#!/bin/bash
+#/**
+#@file File.lib
+#@brief Librería o clase File
+#@class File
+#@brief Funciones para gestión de archivos y directorios.
+#@version 0.9
+#@warning License: GNU GPLv3+
+#*/
+
+
+##### PRUEBAS
+# ogGetPath [ str_repo | int_ndisk int_npart ] path_source [ str_repo | int_ndisk int_npart ] path_target
+function ogCopyFile () {
+local SOURCE TARGET
+case "$1" in
+ /*) SOURCE=$(ogGetFile "$1") # */ (necesario Doxygen)
+ shift ;;
+ [1-9]*) SOURCE=$(ogGetFile "$1" "$2" "$3")
+ shift 3 ;;
+ *) SOURCE=$(ogGetFile "$1" "$2")
+ shift 2 ;;
+esac
+
+}
+
+
+#/**
+# ogGetPath [ str_repo | int_ndisk int_npartition ] path_filepath
+#@brief Inicia el proceso de arranque de un sistema de archivos.
+#@arg \c filepath camino del fichero (independiente de mayúsculas)
+#@arg \c repo repositorio de ficheros
+#@arg \c ndisk nº de orden del disco
+#@arg \c npartition nº de orden de la partición
+#@return path_file - camino completo real del fichero.
+#@note repo = { REPO, CACHE | CDROM }
+#@note Requisitos: \c grep \c sed
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_NOTFOUND Fichero o dispositivo no encontrado.
+#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
+#@warning En caso de error, sólo devuelve el código y no da mensajes.
+#@todo Terminar de definir parámetros para acceso a repositorios.
+#@version 0.9 - Pruebas con OpenGNSys.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2009-09-15
+#*/
+function ogGetPath () {
+
+# Variables locales.
+local MNTDIR FILE PREVFILE FILEPATH CURRENTDIR
+
+#/// Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
+ "$FUNCNAME \"/mnt/sda1/windows/system32\" ==> /mnt/sda1/WINDOWS/System32" \
+ "$FUNCNAME REPO /etc/fstab ==> /opt/opengnsys/images/etc/fstab" \
+ "$FUNCNAME 1 1 \"/windows/system32\" ==> /mnt/sda1/WINDOWS/System32"
+ return
+fi
+
+#/// Procesar camino según el número de parámetros.
+case $# in
+ 1) FILE="$1" ;;
+ 2) case "$1" in
+ REPO|repo)
+ FILE="$OGIMG/$2" ;;
+ CACHE|cache)
+ FILE="$OGCAC/$OGIMG/$2" ;;
+ CDROM|cdrom)
+ FILE="$(ogMount cdrom)/$2" ;;
+ *) ogRaiseError $OG_ERR_FORMAT
+ return $? ;;
+ esac ;;
+ 3) FILE="$(ogMount $1 $2)/$3" ;;
+ *) ogRaiseError $OG_ERR_FORMAT
+ return $? ;;
+esac
+
+#/// Eliminar caracteres \c / iniciales, finales y duplicados.
+CURRENTDIR="$PWD"
+FILE="$(echo $FILE|sed -e 's/\(\/\)*\1/\//g' -e 's/^\///' -e 's/\/$//')"
+PREVFILE=""
+FILEPATH="/"
+while [ "$FILE" != "$PREVFILE" ]; do
+ #/// Busca el nombre correcto en el directorio actual.
+ cd "$FILEPATH"
+ FILEPATH="${FILEPATH}/$(ls -A | grep -i -m1 "^${FILE%%/*}$")" || return $?
+ PREVFILE="$FILE"
+ FILE="${FILE#*/}"
+done
+
+#/// Muestra el camino Linux, quitando el "/" inicial duplicado.
+[ "$FILEPATH" != "/" ] && echo ${FILEPATH#/}
+cd $CURRENTDIR
+}
+
+
+#/**
+# ogGetParentPath [ str_repo | int_ndisk int_npartition ] path_filepath
+#@brief Metafunción que devuelve el camino del directorio padre.
+#@see ogGetPath
+#@version 0.9 - Pruebas con OpenGNSys.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2009-09-29
+#*/
+function ogGetParentPath () {
+local PARENT
+case $# in
+ 1) PARENT="$(dirname "$1")" ;;
+ 2) PARENT="$1 $(dirname "$2")" ;;
+ 3) PARENT="$1 $2 $(dirname "$3")" ;;
+ *) ogRaiseError $OG_ERR_FORMAT
+ return $? ;;
+esac
+ogGetPath $PARENT
+}
+
+
+#/**
+# ogDeleteFile [ str_repo | int_ndisk int_npartition ] path_filepath
+#@brief Metafunción que borra un fichero de un dispositivo.
+#@see ogGetPath
+#@version 0.9 - Pruebas con OpenGNSys.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2009-09-29
+#*/
+function ogDeleteFile () {
+local FILE
+FILE=$(ogGetPath "$@") || return $?
+[ -z "$FILE" ] && ogRaiseError $OG_ERR_NOTFOUND "$*" && reutrn $?
+rm -f "$FILE" || ogRaiseError $OG_ERR_NOTFOUND "$*" || reutrn $?
+}
+
+
+#/**
+# ogDeleteTree [ str_repo | int_ndisk int_npartition ] path_dirpath
+#@brief Metafunción que borra todo un subárbol de directorios de un dispositivo.
+#@see ogGetPath
+#@version 0.9 - Pruebas con OpenGNSys.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2009-09-29
+#*/
+# Borrar subárbol de directorio.
+function ogDeleteTree () {
+local DIR
+DIR=$(ogGetPath "$@") || return $?
+[ -z "$DIR" ] && ogRaiseError $OG_ERR_NOTFOUND "$*" && reutrn $?
+rm -fr "$DIR" || ogRaiseError $OG_ERR_NOTFOUND "$*" || reutrn $?
+}
+
+
+#/**
+# ogMakeDir [ str_repo | int_ndisk int_npartition ] path_dirpath
+#@brief Metafunción que crea un subdirectorio vacío en un dispositivo.
+#@see ogGetParentPath
+#@version 0.9 - Pruebas con OpenGNSys.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2009-09-29
+#*/
+function ogMakeDir () {
+local PARENT DIR
+PARENT=$(ogGetParentPath "$@") || return $?
+DIR="$(basename "${!#}")"
+echo mkdir -p "$PARENT/$DIR"
+mkdir -p "$PARENT/$DIR" || ogRaiseError $OG_ERR_NOTFOUND "$*" || reutrn $?
+}
+
+
+#/**
+# ogNewPath [ str_repo | int_ndisk int_npartition ] path_filepath
+#@brief Crea el directorio especificado
+#@arg \c filepath camino del fichero (independiente de mayúsculas)
+#@arg \c repo repositorio de ficheros
+#@arg \c ndisk nº de orden del disco
+#@arg \c npartition nº de orden de la partición
+#@return file - camino completo real del directorio creado
+#@note repo = { REPO, CACHE }
+#@note Requisitos: \c grep \c sed
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo.
+#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
+#@warning Primeras pruebas.
+#@todo Terminar de definir parámetros para acceso a repositorios.
+#@version 0.1 - Primera adaptación para OpenGNSys.
+#@author obtenido de ogGetPath de Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2009-09-15
+#*/
+function ogNewPath () {
+
+# Variables locales.
+local MNTDIR FILE PREVFILE FILEPATH CURRENTDIR
+
+#/// Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
+ "$FUNCNAME \"/mnt/sda1/windows/system32\" ==> /mnt/sda1/WINDOWS/System32" \
+ "$FUNCNAME REPO /etc/fstab ==> /opt/opengnsys/images/etc/fstab" \
+ "$FUNCNAME 1 1 \"/windows/system32\" ==> /mnt/sda1/WINDOWS/System32"
+ return
+fi
+
+#/// Procesar camino según el número de parámetros.
+case $# in
+ # si 1 parametro directorio-fichero completo.
+ 1) FILE="$1" ;;
+ # Si 2 parametros es REPOSITORIO DIRECTORIO-FICHERO
+ 2) case "$1" in
+ # consultando servidor repositorio base
+ REPO | $IPREPOMAN ) FILE="$OGIMG/$2" || return $OG_ERR_NOTFOUND ;;
+ # consultando particion auxiliar cache local
+ CACHE | $IP )
+ ogMountCache >> /dev/null && FILE="$OGCAC/$OGIMG/$2" || return $OG_ERR_NOTFOUND ;;
+ # conectando con Servidor Axuliar.
+ *) ogRaiseError $OG_ERR_FORMAT
+ return $? ;;
+ esac ;;
+ # Si 3 parametros DISK PARTITION DIRECTORIO-FICHERO
+ 3) FILE="$(ogMount $1 $2)/$3" || return $OG_ERR_NOTFOUND ;;
+ *) return $OG_ERR_FORMAT ;;
+esac
+
+mkdir -p ${FILE}
+echo $FILE
+}
+