#!/bin/sh ## ## find-sim finds the similarity of one file with the files in the ## selected commits ## ## The arguments are: ## $1 - file to compare ## $n n>2 - arguments for git-rev-list to select the commits ## . git-sh-setup || die "Not a git archive." [ ! -e $1 ] && exit 1 file=$1 shift case $GIT_DIR in /*) GIT_DIR_ORIG=$GIT_DIR;; *) GIT_DIR_ORIG=$PWD/$GIT_DIR esac tmp=`mktemp -t -d git-find-sim.XXXXXXX` GIT_DIR_TEMP=$tmp mkdir -p $GIT_DIR_TEMP/objects/info [ -e $GIT_DIR_ORIG/objects/info/alternates ] && cp $GIT_DIR_ORIG/objects/info/alternates $GIT_DIR_TEMP/objects/info/alternates echo $GIT_DIR_ORIG/objects >> $GIT_DIR_TEMP/objects/info/alternates export GIT_DIR=$GIT_DIR_TEMP trap "rm -rf $tmp" 0 1 2 3 15 git update-index --add $file || exit 1 tree=`git-write-tree` rev_arg=`GIT_DIR=$GIT_DIR_ORIG git-rev-parse --default HEAD --revs-only "$@"` revs=`GIT_DIR=$GIT_DIR_ORIG git-rev-list $rev_arg` for i in $revs; do git diff-tree --name-status $i -C $tree | grep $file | sed "s/^/$i:/" done