user4427511
user4427511

Reputation:

Print percentage of dissimilarity

Sometimes when you drastically change a file, it triggers a rewrite:

yes | head -256 > pa.txt
git add .
git commit -m qu
truncate -s128 pa.txt
yes n | head -64 >> pa.txt
git commit -am ro

Result:

[master 79b5658] ro
 1 file changed, 128 insertions(+), 256 deletions(-)
 rewrite pa.txt (75%)

However this does not happen with smaller changes:

yes | head -128 > pa.txt
git add .
git commit -m qu
truncate -s64 pa.txt
yes n | head -32 >> pa.txt
git commit -am ro

Result:

[master 88ef937] ro
 1 file changed, 32 insertions(+), 96 deletions(-)

Can I run a command that will show the percent change regardless of the amount? I looked into git diff-tree, but again it seems to only show when the change is drastic.

Upvotes: 6

Views: 2724

Answers (2)

user4427511
user4427511

Reputation:

git diff -U10000 | awk '
/^i/ {getline; next}
/^-/ {pa += length}
/^ / {qu += length}
END {printf "%.0f%\n", pa/(pa+qu)*100}
'
  1. Force full context with -U10000

  2. Filter out --- lines

  3. Filter in deletions and context lines

  4. Count bytes for each

Upvotes: 4

VonC
VonC

Reputation: 1324308

With the latest git:

> git --version
git version 2.7.0.windows.1

I use:

git init dissimilarity
cd dissimilarity
yes aaa | head -128 > pa.txt
git commit -am qu
<remove a few lines>
yes n | head -32 >> pa.txt
git commit -am ro

Then a git diff -B1%/1% gives me:

> git diff -B1%/1% @~|grep diss
dissimilarity index 14%

I then proceeded to make an even minor change by manually editing pa.txt, removing a few lines, adding a new one:

> git diff @~
diff --git a/pa.txt b/pa.txt
index 7f9bf77..bf32d0b 100644
--- a/pa.txt
+++ b/pa.txt
@@ -107,13 +107,7 @@ aaa
 aaa
 aaa
 aaa
-n
-n
-n
-n
-n
-n
-n
+sss
 n
 n
 n

And even then, I still see a dissimilarity index:

> git diff -B1%/1% @~|grep diss
dissimilarity index 2%

2%!

Upvotes: 0

Related Questions