diff options
author | ramon <ramongomez@us.es> | 2009-10-19 09:47:15 +0000 |
---|---|---|
committer | ramon <ramongomez@us.es> | 2009-10-19 09:47:15 +0000 |
commit | 8964f9b26b06f61e20fba15bfe4fb653cc1a31b5 (patch) | |
tree | 8663353fbea6faab97ee1ac38d541d5485771018 /client/engine/File.lib | |
parent | 87b02b26e403807cf587356ed77ac52c74eba3fd (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-x | client/engine/File.lib | 225 |
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 +} + |