Accepting request 208806 from home:dnh:branches:Base:System

- Reimplementation of mcrar5fs_list in vfs/extfs/helpers/urar using
  'unrar vt' fixing the "trailing space" problem with 'unrar [lv]'
  closing http://www.midnight-commander.org/ticket/3073 and bnc#849082

OBS-URL: https://build.opensuse.org/request/show/208806
OBS-URL: https://build.opensuse.org/package/show/Base:System/mc?expand=0&rev=78
This commit is contained in:
Ruediger Oertel 2013-11-29 13:47:33 +00:00 committed by Git OBS Bridge
parent 765d0fb1cf
commit dc3c4beda0
3 changed files with 80 additions and 37 deletions

View File

@ -1,10 +1,25 @@
diff -urN -x '*~' mc-4.8.10.orig/src/vfs/extfs/helpers/urar.in mc-4.8.10/src/vfs/extfs/helpers/urar.in
--- mc-4.8.10.orig/src/vfs/extfs/helpers/urar.in 2013-08-02 17:02:39.000000000 +0200
+++ mc-4.8.10/src/vfs/extfs/helpers/urar.in 2013-11-25 23:10:36.000000000 +0100
@@ -42,14 +42,43 @@
$UNRAR v -c- -cfg- "$1" | @AWK@ -v uid=`id -u` -v gid=`id -g` '
BEGIN { flag=0 }
/^-----------/ { flag++; if (flag > 1) exit 0; next }
+++ mc-4.8.10/src/vfs/extfs/helpers/urar.in 2013-11-28 07:14:54.000000000 +0100
@@ -4,6 +4,11 @@
# (C) 1996 2:5020/337.13@fidonet.org
# Updated by christian.gennerat@alcatel.fr 1999
# Andrew V. Samoilov <sav@bcs.zp.ua> 2000
+#
+# Andrew Borodin <aborodin@vmail.ru>
+# David Haller <dnh@opensuse.org>
+# 2013: support unrar5
+#
# beta version 2.0
#
# rar and unrar can be found on http://www.rarlabs.com/
@@ -39,18 +44,62 @@
mcrar5fs_list ()
{
- $UNRAR v -c- -cfg- "$1" | @AWK@ -v uid=`id -u` -v gid=`id -g` '
-BEGIN { flag=0 }
-/^-----------/ { flag++; if (flag > 1) exit 0; next }
-flag==1 {
- split($5, a, "-")
- if (index($1, "D") != 0)
@ -13,43 +28,63 @@ diff -urN -x '*~' mc-4.8.10.orig/src/vfs/extfs/helpers/urar.in mc-4.8.10/src/vfs
- if (index($1, ".") != 0)
- $1="-rw-r--r--"
- printf "%s 1 %s %s %d %02d/%02d/%02d %s ./%s\n", $1, uid, gid, $2, a[2], a[1], a[3], $6, $8
+flag == 1 {
+ name=""; delete fields; delete seps;
-}'
+ $UNRAR vt -c- -cfg- "$1" | @AWK@ -F ':' -v uid=`id -u` -v gid=`id -g` '
+ {
+ ### remove space after the ":" of the field name
+ sub ("^ ", "", $2);
+ }
+
+ ### split line, save n-fields and save seperators in "seps"
+ ### tested with busybox awk
+ nameparts = split($0, fields, " ");
+ split($0, seps, "[^ \t]+");
+ sub("^ ", "", seps[8]);
+
+ ### split date for reformatting
+ split(fields[5], date, "-");
+
+ ### check/adjust rights
+ if (index(fields[1], "D") != 0) {
+ fields[1] = "drwxr-xr-x";
+ } else {
+ if (index(fields[1], ".") != 0) {
+ fields[1] = "-rw-r--r--";
+ $1 ~ / *Name$/ {
+ ### next file
+ name = mtime = size = attrs = "";
+ delete date;
+ name = $2;
+ ### if the name contains ":", append the rest of the fields
+ if (NF > 2) {
+ for (i = 3; i <= NF; i++) {
+ name = name ":" $i;
+ }
+ }
+ }
+
+ ### join filename from fields 8 .. nameparts (saved above)
+ for(i = 8; i <= nameparts; i++) {
+ name=name seps[i] fields[i];
+ $1 ~ /^ *mtime$/ {
+ mtime = $2 ":" $3;
+ }
+ $1 ~ /^ *Size$/ {
+ size = $2;
+ }
+ $1 ~ /^ *Attributes$/ {
+ attrs = $2;
+ }
+ name=name seps[i];
+
+# ### where did this come from? I say: if in doubt: pass on the
+# ### unrar bug to our users ... I leave this in for reference.
+# ### remove padding blanks from short names
+# if (length(name)<13) {
+# sub(" *$", "", name);
+# }
+ $1 ~ /^ *Compression$/ {
+ ### file done, using /^$/ is not so good you
+ ### would have to skip the version stuff first
+
+ printf("%s 1 %s %s %d %02d/%02d/%02d %s ./%s\n",
+ fields[1], uid, gid, fields[2], date[2],
+ date[1], date[3], fields[6], name);
}'
+ ### get date and time
+ split (mtime, date, " ");
+ time = date[2];
+ ### cut off seconds from the time
+ sub (",[0-9]*$", "", time);
+ ### split for reordering of the date in the printf below
+ split (date[1], date, "-");
+ ### mc seems to be able to parse 4 digit years too, so remove if tested
+ # sub ("^..", "", date[1]); ### cut year to 2 digits only
+
+ ### check/adjust rights
+ if (index (attrs, "D") != 0) {
+ attrs = "drwxr-xr-x";
+ } else {
+ if (index (attrs, ".") != 0) {
+ attrs = "-rw-r--r--";
+ }
+ }
+
+ ### and finally
+ printf ("%s 1 %s %s %d %02d/%02d/%02d %s ./%s\n",
+ attrs, uid, gid, size, date[2], date[3], date[1], time, name);
+ }
+'
}
mcrarfs_list ()

View File

@ -1,3 +1,10 @@
-------------------------------------------------------------------
Thu Nov 28 12:27:16 UTC 2013 - dnh@opensuse.org
- Reimplementation of mcrar5fs_list in vfs/extfs/helpers/urar using
'unrar vt' fixing the "trailing space" problem with 'unrar [lv]'
closing http://www.midnight-commander.org/ticket/3073 and bnc#849082
-------------------------------------------------------------------
Mon Nov 25 22:45:29 UTC 2013 - dnh@opensuse.org

View File

@ -45,6 +45,7 @@ Patch21: mc-extfs-helpers-deb.patch
# add mc-extfs-helpers-urar.patch (by dnh@opensuse.org) - Fix urar
# extfs failing on files with spaces (bnc#849082). Forwarded to upstream.
# see http://www.midnight-commander.org/ticket/3073
Patch22: mc-extfs-helpers-urar.patch
#debian fixes for vfs