[Pkg-mc-devel] Bug#479549: [VFS] NEW: tar files (even compreessed with bzip2/gzip) can now be updated
Michelle Konzack
linux4michelle at freenet.de
Mon May 5 02:00:48 UTC 2008
Package: mc
Severity: wishlist
Hi Maintainer,
since I am braindamaged I was now working up to 3:00am to get it running
and I am realy tired...
Put the attached file into "/usr/share/mc/extfs/" and then it needs
following additional entries:
----[ '/usr/share/mc/extfs/extfs.ini' ]---------
# Michelles stuff
tdmc_tar
------------------------------------------------
and then you need to put following on the top of the file
----[ '/etc/mc/mc.ext' ]------------------------
shell/.tar
Open=%cd %p#tdmc_tar
shell/.tar.gz
Open=%cd %p#tdmc_tar
shell/.tar.bz2
Open=%cd %p#tdmc_tar
------------------------------------------------
Not you can go on a file like
test.tar
test.tar.gz
test.tar.bz2
and hit enter as before but with my VFS extension to "tar" you can now
add files, remove files and in the next time I will add stuff for
"mkdir" and maybe "rmdir" but for now, I do not know how to open an
dialog from within "mc" otherwise I would use "dialog" if availlable or
output an error (or mybe readline input?).
Please try it out it is already working and tell me what you think.
I go to bed.
Note: I have prefixed the VFS extension with "tdmc_" because I
have a Debian package called "tdmc" where I put stuff
coded for "mc", which mean, I have pulled out the
extension for the "mc" package to be included there for
the rest of the world.
Oh yes, if you think, I should add other compressions as well, let me
know too...
Thanks, Greetings and nice Day
Michelle Konzack
Systemadministrator
24V Electronic Engineer
Tamay Dogan Network
Debian GNU/Linux Consultant
--
Linux-User #280138 with the Linux Counter, http://counter.li.org/
##################### Debian GNU/Linux Consultant #####################
Michelle Konzack Apt. 917 ICQ #328449886
+49/177/9351947 50, rue de Soultz MSN LinuxMichi
+33/6/61925193 67100 Strasbourg/France IRC #Debian (irc.icq.com)
-------------- next part --------------
#!/bin/bash
# #
# Copyright 2008, Michelle Konzack All rights reserved. #
# #
# Redistribution and use in source and binary forms, with or without #
# modification, are permitted provided that the following conditions #
# are met: #
# #
# 1. Redistributions of source code must retain the above copyright #
# notice, this list of conditions and the following disclaimer. #
# #
# 2. Redistributions in binary form must reproduce the above #
# copyright notice, this list of conditions and the following #
# disclaimer in the documentation and/or other materials provided #
# with the distribution. #
# #
# 3. Neither the name of Michelle Konzack nor the names of its #
# contributors may be used to endorse or promote products derived #
# from this software without specific prior written permission. #
# #
# THIS SOFTWARE IS PROVIDED BY MICHELLE KONZACK AND CONTRIBUTORS #
# ``AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT #
# NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND #
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT #
# SHALL MICHELLE KONZACK OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, #
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES #
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR #
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) #
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN #
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR #
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, #
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #
# #
EXENAME=tdmc_tar
PKGNAME=tdmc
if [ -n "$(which gettext.sh)" ] ; then
. gettext.sh
else
gettext()
{
echo "$1"
}
eval_gettext()
{
eval 'echo $1'
}
fi
export TEXTDOMAIN=${PKGNAME}
export TEXTDOMAINDIR=/usr/share/locale
VERSION=0.0.1
AUTHORNAME="Michelle Konzack"
AUTHORMAIL="linux4michelle at freenet.de"
LICENSE=$(gettext 'This tool is under GNU GPL version 3.0')
LICENSE_LONG=/usr/share/common-licenses/GPL-3
########################################################################
if [ "${MCVFS_DEBUG}" = "true" ] ; then
STRG="------------------------"
date --rfc-822 >>${HOME}/.mc/mcvfs_debug
echo -e "0: $0\n1: $1\n2: $2\n3: $3\n4: $4" >>${HOME}/.mc/mcvfs_debug
echo "${STRG}${STRG}${STRG}" >>${HOME}/.mc/mcvfs_debug
fi
########################################################################
if [ -n "$(echo ",list,copyout,copyin,rm,mkdir,rmdir," |grep ",$1,")" ] ; then
ARCHIVENAME=/tmp/`echo "$2" |md5sum |sed 's|\ .*||'`
find /tmp -name "`basename ${ARCHIVENAME}`" -mmin -30 -maxdepth 1 -mindepth 1 >/dev/null 2>&1
if [ $? -ne 0 ] ; then
rm --force ${ARCHIVENAME}
fi
if [ ! -f ${ARCHIVENAME} ] ; then
if [ -n "$(echo "$2" |grep '.tar.bz2$' )" ] ; then
bzcat "$2" >${ARCHIVENAME}
elif [ -n "$(echo "$2" |grep '.tar.gz$' )" ] ; then
zcat "$2" >${ARCHIVENAME}
else
cat "$2" >${ARCHIVENAME}
fi
fi
fi
########################################################################
if [ "$1" = "list" ] ; then
fnc_list()
{
TMPFILE=`mktemp -t tdmc.XXXXXX || exit 1`
(tar --list --numeric-owner --verbose --file ${ARCHIVENAME} |tr -s ' ') |
while read LINE
do
VAL_mode=`echo "${LINE}" |cut -d ' ' -f1`
VAL_ugid=`echo "${LINE}" |cut -d ' ' -f2`
VAL_uid=`echo ${VAL_ugid} |cut -d '/' -f1`
VAL_gid=`echo ${VAL_ugid} |cut -d '/' -f2`
VAL_size=`echo "${LINE}" |cut -d ' ' -f3`
VAL_date=`echo "${LINE}" |cut -d ' ' -f4`
VAL_time=`echo "${LINE}" |cut -d ' ' -f5`
VAL_dati=`date --date="${VAL_date} ${VAL_time}" +"%b %d %Y %H:%M"`
VAL_path=`echo "${LINE}" |cut -d ' ' -f6- |sed 's|/$||g'`
VAL_links=1
echo "${VAL_path} 0 ${VAL_mode} ${VAL_links} ${VAL_uid} ${VAL_gid} ${VAL_size} ${VAL_dati}" >>${TMPFILE}
done
fnc_foo1()
{
(cat ${TMPFILE}) |
while read LINE
do
if [ -n "`echo "${LINE}" |cut -d ' ' -f3- |grep '^d'`" ] ; then
echo "${LINE}"
fi
done
}
DIRS=`fnc_foo1`
fnc_foo2()
{
(cat ${TMPFILE}) |
while read LINE
do
if [ -z "`echo "${LINE}" |cut -d ' ' -f3 |grep --regexp='^d'`" ] ; then
echo "${LINE}"
fi
done
(echo "${DIRS}") |
while read LINE
do
DIR1="`echo "${LINE}" |cut -d ' ' -f1 |sed 's|$|/|'`"
if [ -z "`grep --regexp="${DIR1}" ${TMPFILE}`" ] ; then
echo "${LINE}"
fi
done
}
fnc_foo2 |
sort |
sed 's|\(.*\) 0 \(.*\) \(.*\) \(.*\) \(.*\) \(.*\) \(.*\) \(.*\) \(.*\)$|\2 \3 \4 \5 \6 \7 \8 \9 \1|g'
rm --force ${TMPFILE}
}
fnc_list
#=======================================================================
elif [ "$1" = "copyout" ] ; then
fnc_copyout()
{
TMPFILE=`mktemp -t tdmc.XXXXXX || exit 1`
echo "$2" >${TMPFILE}
tar --extract --numeric-owner --to-stdout --files-from ${TMPFILE} --file $1 >$3
rm --force ${TMPFILE}
}
fnc_copyout "${ARCHIVENAME}" "$3" "$4"
#=======================================================================
elif [ "$1" = "copyin" ] ; then
fnc_copyin()
{
TMP_DIR=`mktemp -t -d tdmc.XXXXXX || exit 1`
DIRNAME=${TMP_DIR}/`dirname $2`
DIRNAME=`echo "${DIRNAME}" |sed 's|/\.$||'`
FILENAME=`basename $2`
mkdir -p ${DIRNAME}
ln -s ${PWD}/${FILENAME} ${DIRNAME}/${FILENAME}
FN=`dirname $2`/${FILENAME}
FN=`echo "${FN}" |sed 's|\./||'`
tar --update --numeric-owner --dereference --directory ${TMP_DIR} --file $1 ${FN}
rm --force ${DIRNAME}/*
BN=`basename ${TMP_DIR}`
cd ${TMP_DIR} && cd .. && rmdir --parents `echo "${DIRNAME}" |sed "s|.*${BN}|${BN}|" |sed 's|\.$||'`
}
fnc_copyin "${ARCHIVENAME}" "$3" "$4" >>${HOME}/.mc/mcvfs_debug
#=======================================================================
elif [ "$1" = "rm" ] ; then
fnc_rm()
{
tar --delete --file $1 $2 2>/dev/null
if [ $? -ne 0 ] ; then
tar --delete --file $1 ./$2 2>/dev/null
fi
}
fnc_rm "${ARCHIVENAME}" "$3"
#=======================================================================
elif [ "$1" = "mkdir" ] ; then
echo "VFS#tar: It is not possibel to create empty directories in an archive." 1>&2
#=======================================================================
elif [ "$1" = "rmdir" ] ; then
echo "VFS#tar: It is not possibel to remove empty directories in an archive." 1>&2
#=======================================================================
elif [ "$1" = "run" ] ; then
echo "VFS#tar: what is \"run\"?" 1>&2
#=======================================================================
else
echo "Usage: \${libdir}/extfs/prefix command [arguments]" 1>&2
echo "" 1>&2
echo " list archivename" 1>&2
echo " copyout archivename storedfilename extractto" 1>&2
echo " copyin archivename storedfilename sourcefile" 1>&2
echo " rm archivename storedfilename" 1>&2
echo " mkdir archivename dirname" 1>&2
echo " rmdir archivename dirname" 1>&2
echo " run ???" 1>&2
exit 1
fi
########################################################################
if [ -n "$(echo ",copyout,copyin,rm,mkdir,rmdir," |grep ",$1,")" ] ; then
if [ -n "$(echo "$2" |grep '.tar.bz2$')" ] ; then
bzip2 <${ARCHIVENAME} >$2
elif [ -n "$(echo "$2" |grep '.tar.gz$')" ] ; then
gzip <${ARCHIVENAME} >$2
else
cat ${ARCHIVENAME} >$2
fi
fi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://lists.alioth.debian.org/pipermail/pkg-mc-devel/attachments/20080505/620aca58/attachment-0001.pgp
More information about the Pkg-mc-devel
mailing list