From 50dc55fb7c563aa826ad511ec903d8d21dec70b6 Mon Sep 17 00:00:00 2001 From: div0 Date: Thu, 20 Dec 2007 13:02:12 +0000 Subject: [PATCH] add zipdiff script git-svn-id: svn://svn.icculus.org/nexuiz/trunk@3039 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- misc/zipdiff | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100755 misc/zipdiff diff --git a/misc/zipdiff b/misc/zipdiff new file mode 100755 index 000000000..9b7cc56e2 --- /dev/null +++ b/misc/zipdiff @@ -0,0 +1,121 @@ +#!/bin/sh + +usage() +{ + cat <&2 "$type: $source" + case "$type" in + new|changed|deleted) + echo "$source" + ;; + deleted|*) + echo >&2 " * Sorry, can't handle deletion of $source." + ;; + esac +} + +tempdir=`mktemp -d -t zipdiff.XXXXXX` + +newline=" +" +fromlist="$(zipinfo -1 "$from" | grep -v /\$)" +tolist="$(zipinfo -1 "$to" | grep -v /\$)" + +diffit() +{ + echo "$fromlist" | while IFS= read -r line; do + case "$newline$tolist$newline" in + *$newline$line$newline*) + ;; + *) + found deleted "$line" + ;; + esac + done + echo "$tolist" | while IFS= read -r line; do + case "$newline$fromlist$newline" in + *$newline$line$newline*) + # check if equal + unzip -p "$from" "$line" > "$tempdir/v1" + unzip -p "$to" "$line" > "$tempdir/v2" + if ! diff --brief "$tempdir/v1" "$tempdir/v2" >/dev/null 2>&1; then + found changed "$line" + fi + rm "$tempdir/v1" + rm "$tempdir/v2" + ;; + *) + found new "$line" + ;; + esac + done +} + +result=`diffit` + +case "$output" in + '') + ;; + *) + rm -f "$output" + echo "$result" | while IFS= read -r line; do + echo >&2 "extracting $line..." + dline=./$line + mkdir -p "$tempdir/${dline%/*}" + unzip -p "$to" "$line" > "$tempdir/$line" # this may create an empty file - don't care, DP handles this as deletion + done + case "$output" in + /*) + ;; + *) + output=`pwd`/$output + ;; + esac + cd "$tempdir" + #zip -9r "$output" . + 7za a -tzip -mx=9 "$output" . + cd .. + ;; +esac + +rm -rf "$tempdir" -- 2.39.2