Added.
This commit is contained in:
37
README.md
37
README.md
@ -3,6 +3,43 @@ git-diff-image
|
|||||||
|
|
||||||
This is an extension to 'git diff' that provides support for diffing images.
|
This is an extension to 'git diff' that provides support for diffing images.
|
||||||
|
|
||||||
|
Platforms
|
||||||
|
---------
|
||||||
|
|
||||||
|
Only OS X at the moment. Patches welcome!
|
||||||
|
|
||||||
|
Examples
|
||||||
|
--------
|
||||||
|
|
||||||
|
```
|
||||||
|
$ git diff
|
||||||
|
--- a/anImageThatHasChanged.jpg
|
||||||
|
+++ b/anImageThatHasChanged.jpg
|
||||||
|
@@ -1,5 +1,5 @@
|
||||||
|
ExifTool Version Number : 9.76
|
||||||
|
-File Size : 133 kB
|
||||||
|
+File Size : 54 kB
|
||||||
|
File Access Date/Time : 2015:05:02 20:01:21-07:00
|
||||||
|
File Type : JPEG
|
||||||
|
MIME Type : image/jpeg
|
||||||
|
|
||||||
|
$ git diff-image
|
||||||
|
# The same output as above, *and* a montage of the visual differences will be
|
||||||
|
# generated and opened in Preview.
|
||||||
|
```
|
||||||
|
|
||||||
|
Installation
|
||||||
|
------------
|
||||||
|
|
||||||
|
Install exiftool and ImageMagick. (The script will cope with these missing,
|
||||||
|
but it's not going to be very exciting without them.)
|
||||||
|
|
||||||
|
```
|
||||||
|
brew install exiftool imagemagick
|
||||||
|
```
|
||||||
|
|
||||||
|
Run the install script, which will configure your global git config for you.
|
||||||
|
|
||||||
Public domain dedication
|
Public domain dedication
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
|
|||||||
64
git_diff_image
Executable file
64
git_diff_image
Executable file
@ -0,0 +1,64 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -eu
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
name="$1"
|
||||||
|
f1="$2"
|
||||||
|
f2="$5"
|
||||||
|
|
||||||
|
name1="a/$name"
|
||||||
|
name2="b/$name"
|
||||||
|
|
||||||
|
|
||||||
|
if diff "$f1" "$f2" >/dev/null
|
||||||
|
then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
exif() {
|
||||||
|
local b=$(basename "$1")
|
||||||
|
local d=$(mktemp -t "$b")
|
||||||
|
exiftool "$1" | grep -v "File Name" | \
|
||||||
|
grep -v "Directory" | \
|
||||||
|
grep -v "File Inode Change" | \
|
||||||
|
grep -v "File Modification Date/Time" | \
|
||||||
|
grep -v "File Permissions" \
|
||||||
|
>"$d"
|
||||||
|
echo "$d"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
diff_clean_names() {
|
||||||
|
diff -u "$1" --label "$name1" "$2" --label "$name2" || true
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if which -s exiftool
|
||||||
|
then
|
||||||
|
d1=$(exif "$f1")
|
||||||
|
d2=$(exif "$f2")
|
||||||
|
diff_clean_names "$d1" "$d2"
|
||||||
|
else
|
||||||
|
diff_clean_names "$f1" "$f2"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "${GIT_DIFF_IMAGE_ENABLED-}" ] || \
|
||||||
|
! which -s compare || \
|
||||||
|
! which -s montage
|
||||||
|
then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if compare "$f1" "$f2" /dev/null
|
||||||
|
then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
bn=$(basename "$f1")
|
||||||
|
destfile=$(mktemp -t "$bn").png
|
||||||
|
|
||||||
|
compare "$f1" "$f2" png:- | \
|
||||||
|
montage -geometry +4+4 "$f1" - "$f2" png:- >"$destfile" 2>/dev/null || true
|
||||||
|
open "$destfile"
|
||||||
77
install.sh
Executable file
77
install.sh
Executable file
@ -0,0 +1,77 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -eu
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
cols=$(tput cols)
|
||||||
|
|
||||||
|
|
||||||
|
readlink_f() {
|
||||||
|
if [ $(uname) = 'Darwin' ]
|
||||||
|
then
|
||||||
|
local d=$(echo "${1%/*}")
|
||||||
|
local f=$(basename "$1")
|
||||||
|
(cd "$d" && echo "$(pwd -P)/$f")
|
||||||
|
else
|
||||||
|
readlink -f "$1"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
addattr() {
|
||||||
|
ext="$1"
|
||||||
|
|
||||||
|
if ! grep -qE "^\*.$ext diff=image\$" "$attributesfile"
|
||||||
|
then
|
||||||
|
if grep -qE "^\*.$ext" "$attributesfile"
|
||||||
|
then
|
||||||
|
fold -s -w$cols >&2 <<EOS
|
||||||
|
$attributesfile already has *.$ext configured, but not the way that this script requires.
|
||||||
|
|
||||||
|
If you want to use git-image-diff with $ext files, you must add a diff=image attribute yourself.
|
||||||
|
|
||||||
|
|
||||||
|
EOS
|
||||||
|
else
|
||||||
|
echo "+ echo '*.$ext diff=image' >>'$attributesfile'"
|
||||||
|
echo "*.$ext diff=image" >>"$attributesfile"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
thisdir=$(dirname $(readlink_f "$0"))
|
||||||
|
thisdir_tilde="${thisdir/#$HOME/~}"
|
||||||
|
|
||||||
|
attributesfile_tilde=$(git config --global core.attributesfile || true)
|
||||||
|
attributesfile="${attributesfile_tilde/#\~/$HOME}"
|
||||||
|
if [ -z "$attributesfile" ]
|
||||||
|
then
|
||||||
|
attributesfile="$HOME/.gitattributes"
|
||||||
|
attributesfile_tilde="~/.gitattributes"
|
||||||
|
echo "+ git config --global core.attributesfile '$attributesfile_tilde'"
|
||||||
|
git config --global core.attributesfile "$attributesfile_tilde"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "$attributesfile" ]
|
||||||
|
then
|
||||||
|
if [ ! -e "$attributesfile" ]
|
||||||
|
then
|
||||||
|
echo "+ touch '$attributesfile'"
|
||||||
|
touch "$attributesfile"
|
||||||
|
else
|
||||||
|
echo "$attributesfile is not a regular file! I give up." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
addattr gif
|
||||||
|
addattr jpeg
|
||||||
|
addattr jpg
|
||||||
|
addattr png
|
||||||
|
|
||||||
|
echo '+ git config --global alias.diff-image '"'"'!f() { GIT_DIFF_IMAGE_ENABLED=1 git diff "$@"; }; f'"'"
|
||||||
|
git config --global alias.diff-image '!f() { GIT_DIFF_IMAGE_ENABLED=1 git diff "$@"; }; f'
|
||||||
|
|
||||||
|
echo "+ git config --global diff.image.command '$thisdir_tilde/git_diff_image'"
|
||||||
|
git config --global diff.image.command "$thisdir_tilde/git_diff_image"
|
||||||
Reference in New Issue
Block a user