include tarcat in the package
authorBdale Garbee <bdale@gag.com>
Mon, 1 Apr 2013 15:51:00 +0000 (09:51 -0600)
committerBdale Garbee <bdale@gag.com>
Mon, 1 Apr 2013 15:51:00 +0000 (09:51 -0600)
debian/changelog
debian/rules
debian/tarcat [new file with mode: 0644]

index 7669dfa12a11822bbe0a4130b48a6e90969e908b..961f213fa0200affe20c7d35b6403fa4e5b27474 100644 (file)
@@ -6,6 +6,8 @@ tar (1.26+dfsg-5) UNRELEASED; urgency=low
 
   [ Bdale Garbee ]
   * update mailcap entries to use %s, closes: #681302
+  * include the http://www.gnu.org/software/tar/utils/tarcat script for use 
+    with multi-volume archives, closes: #492036
 
  -- Bdale Garbee <bdale@gag.com>  Mon, 01 Apr 2013 09:17:04 -0600
 
index d978367b9c6f3ca1b9e719c8cbee497000db373b..241026edc38a01d44df2d11acc509d0241370211 100755 (executable)
@@ -63,6 +63,7 @@ install: build
                libexecdir=`pwd`/debian/tar/usr/sbin 
        install -m 755 debian/rmt.sh debian/tar/etc/rmt
        mv debian/tar/usr/sbin/rmt debian/tar/usr/sbin/rmt-tar
+       install -m 755 debian/tarcat debian/tar/usr/sbin/tarcat
 
 # Build architecture-independent files here.
 binary-indep: build install
diff --git a/debian/tarcat b/debian/tarcat
new file mode 100644 (file)
index 0000000..5c2671a
--- /dev/null
@@ -0,0 +1,42 @@
+#! /bin/sh
+# Usage: tarcat volume1 volume2 ...
+# concatenates a GNU tar multi-volume archive into a single tar archive.
+# Author: Bruno Haible <bruno@clisp.org>, Sergey Poznyakoff <gray@gnu.org.ua>
+
+# dump_type FILE [N]
+# Print type character from block N (default 0) of tar archive FILE
+dump_type() {
+  dd if="$1" skip=${2:-0} bs=512 count=1 2>/dev/null |
+    tr '\0' ' ' |
+    cut -c157
+}
+
+case `dump_type "$1"` in
+  [gx]) PAX=1;;
+esac
+
+cat "$1"
+shift
+for f
+do
+  SKIP=0
+  T=`dump_type "$f"`
+  if [ -n "$PAX" ]; then
+    if [ "$T" = "g" ]; then
+      # Global extended header.... 2 blocks
+      # Extended header........... 2 blocks
+      # Ustar header.............. 1 block
+      # FIXME: This calculation is will fail for very long file names.
+      SKIP=5
+    fi
+  else
+    if [ "$T" = "V" ]; then
+      T=`dump_type "$f" 1`
+    fi
+    if [ "$T" = "M" ]; then
+      SKIP=$(($SKIP + 1))
+    fi  
+  fi
+  dd skip=$SKIP if="$f" 
+done
+