2002-01-15 21:17:57 +03:00
/*
* Copyright ( C ) 2001 Sistina Software ( UK ) Limited .
*
* This file is released under the GPL .
*/
# include "tools.h"
2002-02-11 23:50:53 +03:00
int vgcfgrestore ( struct cmd_context * cmd , int argc , char * * argv )
2002-01-15 21:17:57 +03:00
{
2003-01-18 00:02:04 +03:00
char * vg_name ;
2002-01-15 21:17:57 +03:00
if ( argc ! = 1 ) {
log_err ( " Please specify a *single* volume group to restore. " ) ;
return ECMD_FAILED ;
}
2003-01-18 00:02:04 +03:00
vg_name = argv [ 0 ] ;
if ( ! strncmp ( vg_name , cmd - > dev_dir , strlen ( cmd - > dev_dir ) ) )
vg_name + = strlen ( cmd - > dev_dir ) ;
2003-02-03 23:09:58 +03:00
if ( ! validate_name ( vg_name ) ) {
2003-01-18 00:02:04 +03:00
log_error ( " Volume group name \" %s \" has invalid characters " ,
vg_name ) ;
return ECMD_FAILED ;
}
2002-02-11 14:43:17 +03:00
/*
* FIXME : overloading the - l arg for now to display a
* list of archive files for a particular vg
*/
2002-02-12 00:00:35 +03:00
if ( arg_count ( cmd , list_ARG ) ) {
2003-01-18 00:02:04 +03:00
if ( ! archive_display ( cmd , vg_name ) )
2002-02-11 14:43:17 +03:00
return ECMD_FAILED ;
return 0 ;
}
2002-11-18 17:04:08 +03:00
if ( ! lock_vol ( cmd , ORPHAN , LCK_VG_WRITE ) ) {
log_error ( " Unable to lock orphans " ) ;
return ECMD_FAILED ;
}
2003-01-18 00:02:04 +03:00
if ( ! lock_vol ( cmd , vg_name , LCK_VG_WRITE | LCK_NONBLOCK ) ) {
log_error ( " Unable to lock volume group %s " , vg_name ) ;
2002-11-18 17:04:08 +03:00
unlock_vg ( cmd , ORPHAN ) ;
return ECMD_FAILED ;
}
2002-02-12 00:00:35 +03:00
if ( ! ( arg_count ( cmd , file_ARG ) ?
2003-01-18 00:02:04 +03:00
backup_restore_from_file ( cmd , vg_name ,
2002-02-12 00:00:35 +03:00
arg_str_value ( cmd , file_ARG , " " ) ) :
2003-01-18 00:02:04 +03:00
backup_restore ( cmd , vg_name ) ) ) {
unlock_vg ( cmd , vg_name ) ;
2002-11-18 17:04:08 +03:00
unlock_vg ( cmd , ORPHAN ) ;
2002-01-15 21:17:57 +03:00
log_err ( " Restore failed. " ) ;
return ECMD_FAILED ;
}
2003-01-18 00:02:04 +03:00
log_print ( " Restored volume group %s " , vg_name ) ;
unlock_vg ( cmd , vg_name ) ;
2002-11-18 17:04:08 +03:00
unlock_vg ( cmd , ORPHAN ) ;
2002-01-15 21:17:57 +03:00
return 0 ;
}