[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