Репозитории ALT
S: | 4.8.30-alt3 |
5.1: | 4.8.11-alt0.M51.1 |
4.1: | 4.6.2-alt7.pre1 |
4.0: | 4.6.1r-alt9 |
3.0: | 4.6.1r-alt3 |
Группа :: Работа с файлами
Пакет: mc
Главная Изменения Спек Патчи Sources Загрузить Gear Bugs and FR Repocop
Патч: mc-4.8.6-alt-extfs-udar.patch
Скачать
Скачать
diff -Nur mc-4.8.6.old/misc/mc.ext.in mc-4.8.6/misc/mc.ext.in
--- mc-4.8.6.old/misc/mc.ext.in 2012-09-22 01:33:25.000000000 +0400
+++ mc-4.8.6/misc/mc.ext.in 2012-10-22 21:42:26.817506404 +0400
@@ -706,6 +706,11 @@
Open=@EXTHELPERSDIR@/archive.sh view xz %var{PAGER:more}
View=%view{ascii} @EXTHELPERSDIR@/archive.sh view xz
+# dar
+regex/i/\.[0-9]*\.dar$
+ Open=%cd %p/udar://
+ View=%view{ascii} dar -l `echo %f | sed 's/\.[0-9]*\.[Dd][Aa][Rr]$//'` -N
+
### Default ###
# Default target for anything not described above
diff -Nur mc-4.8.6.old/src/vfs/extfs/helpers/Makefile.am mc-4.8.6/src/vfs/extfs/helpers/Makefile.am
--- mc-4.8.6.old/src/vfs/extfs/helpers/Makefile.am 2012-09-22 01:33:25.000000000 +0400
+++ mc-4.8.6/src/vfs/extfs/helpers/Makefile.am 2012-10-22 20:58:14.425574913 +0400
@@ -6,7 +6,7 @@
EXTFS_MISC = README README.extfs
# Scripts hat don't need adaptation to the local system
-EXTFS_CONST = bpp changesetfs gitfs+ patchsetfs rpm trpm u7z
+EXTFS_CONST = bpp changesetfs gitfs+ patchsetfs rpm trpm u7z udar
# Scripts that need adaptation to the local system - source files
EXTFS_IN = \
diff -Nur mc-4.8.6.old/src/vfs/extfs/helpers/udar mc-4.8.6/src/vfs/extfs/helpers/udar
--- mc-4.8.6.old/src/vfs/extfs/helpers/udar 1970-01-01 04:00:00.000000000 +0400
+++ mc-4.8.6/src/vfs/extfs/helpers/udar 2012-10-22 20:45:31.000000000 +0400
@@ -0,0 +1,105 @@
+#!/bin/sh
+
+# This is a parser for Dar archives in Midnight Commander. You need
+# the GPL dar program (version >= 2.3.0) written by Denis Corbin.
+
+# Author: Guus Jansman
+
+# Limitations:
+# - The archive file can not be changed
+# - Symbolic and hard links are not handled properly
+# - Block and character special files are not handled
+# - Files not stored in (differential) backups are not handled
+# - Dar files in archives are not handled (due filename restriction)
+
+DAR=dar
+
+# dar expects the basename (without number and extension)
+BASENAME="`echo "$2" | sed -e 's/\.[0-9]*\.[Dd][Aa][Rr]$//'`"
+
+mcdarfs_list ()
+{
+$DAR -l "$BASENAME" -N -Q -as 2>/dev/null | gawk -v uuid=${UID-0} '
+BEGIN { flag=0 }
+/^-------/ { flag++; if (flag > 1) exit 0; next }
+/^$/ { next }
+{
+ if (flag == 0) next
+ line=$0
+ split(line, record, " ")
+
+ # Do not display removed files
+ if (record[1] == "[" && record[2] == "REMOVED")
+ {
+ next
+ }
+
+ # We want "line" to start with permutation
+ # TODO: better algorithm
+ while (length(record[1]) != 10 || match(substr(record[1], 2, 1), "[r-]") == 0)
+ {
+ # line without real contents
+ if (length(line) == 0) {
+ next
+ }
+ line=substr(line, length(record[1])+1)
+ while (length(line) != 0 && substr(line, 1, 1) != " ")
+ {
+ line=substr(line, 2)
+ }
+ split(line, record, " ")
+ }
+
+ perm=record[1]
+ # Block and character special files not supported
+ # Change [bc] to [bcl] if symbolic links should not show up either
+ if (match(substr(perm, 1, 1), "[bc]") != 0)
+ {
+ next
+ }
+ uid=record[2]
+ if (match(uid, "^[0-9]*$") != 0)
+ {
+ uid=sprintf("%-8d", uid)
+ }
+ gid=record[3]
+ if (match(gid, "^[0-9]*$") != 0)
+ {
+ gid=sprintf("%-8d", gid)
+ }
+ size=record[4]
+ month=record[6]
+ day=record[7]
+ tm=substr(record[8], 1, 5)
+ year=record[9]
+ name=substr(line, index(line, sprintf("%s:", tm))+14)
+ # TODO: find symbolic link target (probably the link has to be extracted)
+ printf "%s 1 %s %s %8d %3s %02d %04d %s %s\n", perm, uid, gid, size, month, day, year, tm, name
+}'
+}
+
+mcdarfs_copyout ()
+{
+ # Dummy directory necessary since dar cannot output to stdout or named file
+ mkdir "$3.dir.tmp"
+ chmod 700 "$3.dir.tmp"
+ if [ ! -d "$3.dir.tmp" ]; then exit 1; fi
+ $DAR -x "$BASENAME" -N -O -Q -wa -g "$2" -R "$3.dir.tmp" >/dev/null 2>&1
+ if [ -e "$3.dir.tmp/$2" ]; then
+ mv "$3.dir.tmp/$2" "$3"
+ rm -rf "$3.dir.tmp"
+ else
+ rm -rf "$3.dir.tmp"
+ exit 1
+ fi
+}
+
+umask 077
+cmd="$1"
+shift
+case "$cmd" in
+ list) mcdarfs_list "$@" ;;
+ copyout) mcdarfs_copyout "$@" ;;
+ *) exit 1 ;;
+esac
+exit 0