diff options
author | Evgeny Zinoviev <me@ch1p.io> | 2021-02-04 18:25:00 +0300 |
---|---|---|
committer | Evgeny Zinoviev <me@ch1p.io> | 2021-02-04 18:25:00 +0300 |
commit | 8420dc50b6693044f8ab59b7e54ffce21d50f3e7 (patch) | |
tree | 23cc4996657ab79ff5d0fa4a3cf5c0438a8e78a0 |
-rw-r--r-- | README | 18 | ||||
-rwxr-xr-x | compare-vk-messenger-bundles | 126 |
2 files changed, 144 insertions, 0 deletions
@@ -0,0 +1,18 @@ +compare-vk-messenger-bundles is a tool that helps to find changes between +VK Desktop Messenger builds. it compares js and css files and saves diff for +future inspection. + + +USAGE + +compare-vk-messenger-bundles <OPTIONS> + +Options: + -o: output dir + -1: first dir to compare + -2: second dir to compare + + +LICENSE + +BSD-2c diff --git a/compare-vk-messenger-bundles b/compare-vk-messenger-bundles new file mode 100755 index 0000000..d5919de --- /dev/null +++ b/compare-vk-messenger-bundles @@ -0,0 +1,126 @@ +#!/bin/sh +# SPDX-License-Identifier: BSD-2-Clause + +set -e +shopt -s nullglob + +PROGPATH="$0" + +usage() { + echo "$PROGPATH <OPTIONS>" + echo + echo "Options:" + echo " -o: output dir" + echo " -1: first dir to compare" + echo " -2: second dir to compare" + exit 1 +} + +error() { + echo "error: $@" >&2 + exit 1 +} + +realpath() { + python -c "import os; print(os.path.realpath('$1'))" +} + +OUTPUT_DIR= +DIR1= +DIR2= + +while :; do + case $1 in + -h|--help) + usage + ;; + + -o|--output) + if [ -n "$2" ]; then OUTPUT_DIR="$2"; shift; else error "$1 requires an argument."; fi + ;; + + -1) + if [ -n "$2" ]; then DIR1="$2"; shift; else error "$1 requires an argument."; fi + ;; + + -2) + if [ -n "$2" ]; then DIR2="$2"; shift; else error "$1 requires an argument."; fi + ;; + + --) + shift + break + ;; + + -?*) + error "unknown option: %s" "$1" + ;; + + *) + break + esac + shift +done + +[ -z "$DIR1" ] && usage +[ -z "$DIR2" ] && usage +[ -z "$OUTPUT_DIR" ] && usage +[ ! -d "$DIR1" ] && error "$DIR1 is not a directory." +[ ! -d "$DIR2" ] && error "error: $DIR2 is not a directory." +[ "$DIR1" == "$DIR2" ] && error "error: it's the same directory." +[ ! -f "$DIR1/package.json" ] && error "error: package.json is not found in $DIR1." +[ ! -f "$DIR2/package.json" ] && error "error: package.json is not found in $DIR1." + +[ -d "$OUTPUT_DIR" ] || mkdir "$OUTPUT_DIR" + +DIR1=$(realpath $DIR1) +DIR2=$(realpath $DIR2) + +# find differences across all files +# remember, diff returns 1 if differences were found +diff -qrN "$DIR1" "$DIR2" > "$OUTPUT_DIR/recursive.txt" || true + +# loop through css and js +FILES=($DIR1/*.js) +FILES+=($DIR1/main/*.js) +FILES+=($DIR1/app/i18n/*.js) +FILES+=($DIR1/app/nt7/*.js) +FILES+=($DIR1/app/lib/*.js) +FILES+=($DIR1/dist/*.js) +FILES+=($DIR1/dist/*.css) + +for f in "${FILES[@]}"; do + # remove prefix $DIR1/ from $f + _wo_path=${f#"$DIR1/"} + _dirname=$(dirname $_wo_path) + + # compare files + _md5_1=$(md5 -q "$DIR1/$_wo_path") + _md5_2=$(md5 -q "$DIR2/$_wo_path") + if [ "$_md5_1" == "$_md5_2" ]; then + echo "no difference: $_wo_path" + continue + fi + + if [ "$_dirname" != "." ]; then + mkdir -p "$OUTPUT_DIR/$_dirname" + fi + + echo "processing: $_wo_path" + + # beautify files and generate diff + if [[ $f == *.js ]]; then + _beautify=js-beautify + _ext=js + elif [[ $f == *.css ]]; then + _beautify=css-beautify + _ext=css + fi + + $_beautify "$DIR1/$_wo_path" > "$OUTPUT_DIR/${_wo_path/.$_ext/-1.$_ext}" + $_beautify "$DIR2/$_wo_path" > "$OUTPUT_DIR/${_wo_path/.$_ext/-2.$_ext}" + git diff "$OUTPUT_DIR/${_wo_path/.$_ext/-1.$_ext}" "$OUTPUT_DIR/${_wo_path/.$_ext/-2.$_ext}" > "$OUTPUT_DIR/$_wo_path.diff" || true + rm "$OUTPUT_DIR/${_wo_path/.$_ext/-1.$_ext}" "$OUTPUT_DIR/${_wo_path/.$_ext/-2.$_ext}" +done + +echo "done, saved to $OUTPUT_DIR" |