{"thread":{"id":"36182","subject":"[PATCH] Make XDF_NEED_MINIMAL default in blame.","startedAt":"2014-03-16T10:43:03Z","lastAt":"2014-03-16T12:32:16Z","messageCount":3,"participants":["Michael Andreen","Thomas Rast"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"236823","messageId":"154997837.FlSR2gFiUN@river","threadId":"36182","inReplyTo":null,"subject":"[PATCH] Make XDF_NEED_MINIMAL default in blame.","fromName":"Michael Andreen","fromEmail":"harv@ruin.nu","sentAt":"2014-03-16T10:43:03Z","receivedAt":"2014-03-16T10:43:03Z","isPatch":true,"sender":{"key":"harv@ruin.nu","avatar":null},"body":"Currently git blame has a big problem finding copies and moves when you\nsplit up a big file into smaller ones. One example in the git repository\nis 2cf565c, which split the documentation into smaller files.\n\nIn 582aa00 XDF_NEED_MINIMAL was removed as the default for performance\nreasons, mainly for diff and rebase, but blame was also changed.\n\nIn 059a500 the problem with blame was noticed and the flag --minimal was\nintroduced. However this flag is not documented and it is not possible\nto set when using \"git gui blame\".\n\nSetting XDF_NEED_MINIMAL as default has a small performance impact when\nyou run on a file with few modifications. However, if you run it on a\nfile with a bigger number of modifications, the performance impact is\nsmall enough to not be noticable.\n\n((2cf565c...))$ time PAGER=cat git blame -C -M\n    Documentation/git-ls-files.txt > /dev/null\n\nreal    0m0.003s\nuser    0m0.002s\nsys 0m0.000s\n\n((2cf565c...))$ time PAGER=cat git blame --minimal -C -M\n    Documentation/git-ls-files.txt > /dev/null\n\nreal    0m0.010s\nuser    0m0.009s\nsys 0m0.000s\n\n((2cf565c...))$ time PAGER=cat git blame -C -C -C -M\n    Documentation/git-ls-files.txt > /dev/null\n\nreal    0m0.010s\nuser    0m0.010s\nsys 0m0.000s\n\n((2cf565c...))$ time PAGER=cat git blame --minimal -C -C -C -M\n    Documentation/git-ls-files.txt > /dev/null\n\nreal    0m0.028s\nuser    0m0.027s\nsys 0m0.000s\n\n(master)$ time PAGER=cat git blame -C -C -C -M\n    Documentation/git-ls-files.txt > /dev/null\n\nreal    0m2.338s\nuser    0m2.283s\nsys 0m0.056s\n\n(master)$ time PAGER=cat git blame --minimal -C -C -C -M\n    Documentation/git-ls-files.txt > /dev/null\n\nreal    0m2.355s\nuser    0m2.285s\nsys 0m0.069s\n\n(master)$ time PAGER=cat git blame -C -M cache.h > /dev/null\n\nreal    0m1.755s\nuser    0m1.730s\nsys 0m0.024s\n\n(master)$ time PAGER=cat git blame --minimal -C -M cache.h > /dev/null\n\nreal    0m1.785s\nuser    0m1.770s\nsys 0m0.014s\n\n(master)$ time PAGER=cat git blame -C -C -C -M cache.h > /dev/null\n\nreal    0m31.515s\nuser    0m30.810s\nsys 0m0.684s\n\n(master)$ time PAGER=cat git blame --minimal -C -C -C -M cache.h >\n/dev/null\n\nreal    0m31.504s\nuser    0m30.885s\nsys 0m0.598s\n\nSigned-off-by: Michael Andreen <harv@ruin.nu>\n---\nAdditional measurements attached, the variation is fairly small.\n\nThe --minimal flag is still there, but didn't want to break scripts\ndepending on it.\n\n builtin/blame.c | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/builtin/blame.c b/builtin/blame.c\nindex e5b5d71..0e7ebd0 100644\n--- a/builtin/blame.c\n+++ b/builtin/blame.c\n@@ -42,7 +42,7 @@ static int show_root;\n static int reverse;\n static int blank_boundary;\n static int incremental;\n-static int xdl_opts;\n+static int xdl_opts = XDF_NEED_MINIMAL;\n static int abbrev = -1;\n static int no_whole_file_rename;\n \n-- \n1.8.3.2\n\n\n\n(master)$ time PAGER=cat git blame -C -M cache.h > /dev/null\n\nreal\t0m1.767s\nuser\t0m1.747s\nsys\t0m0.018s\n(master)$ time PAGER=cat git blame -C -M cache.h > /dev/null\n\nreal\t0m1.755s\nuser\t0m1.730s\nsys\t0m0.024s\n(master)$ time PAGER=cat git blame -C -M cache.h > /dev/null\n\nreal\t0m1.784s\nuser\t0m1.757s\nsys\t0m0.025s\n(master)$ time PAGER=cat git blame --minimal -C -M cache.h > /dev/null\n\nreal\t0m1.813s\nuser\t0m1.797s\nsys\t0m0.014s\n(master)$ time PAGER=cat git blame --minimal -C -M cache.h > /dev/null\n\nreal\t0m1.790s\nuser\t0m1.770s\nsys\t0m0.018s\n(master)$ time PAGER=cat git blame --minimal -C -M cache.h > /dev/null\n\nreal\t0m1.785s\nuser\t0m1.770s\nsys\t0m0.014s\n(master)$ time PAGER=cat git blame --minimal -C -M cache.h > /dev/null\n\nreal\t0m1.794s\nuser\t0m1.770s\nsys\t0m0.022s\n(master)$ time PAGER=cat git blame -C -C -C -M cache.h > /dev/null\n\nreal\t0m31.515s\nuser\t0m30.810s\nsys\t0m0.684s\n(master)$ time PAGER=cat git blame -C -C -C -M cache.h > /dev/null\n\nreal\t0m31.594s\nuser\t0m30.879s\nsys\t0m0.695s\n(master)$ time PAGER=cat git blame --minimal -C -C -C -M cache.h > /dev/null\n\nreal\t0m31.666s\nuser\t0m31.054s\nsys\t0m0.591s\n(master)$ time PAGER=cat git blame --minimal -C -C -C -M cache.h > /dev/null\n\nreal\t0m31.504s\nuser\t0m30.885s\nsys\t0m0.598s\n\n(master)$ time PAGER=cat git blame -C -C -C -M Documentation/git-ls-files.txt > /dev/null\n\nreal\t0m2.355s\nuser\t0m2.319s\nsys\t0m0.035s\n(master)$ time PAGER=cat git blame -C -C -C -M Documentation/git-ls-files.txt > /dev/null\n\nreal\t0m2.352s\nuser\t0m2.292s\nsys\t0m0.059s\n(master)$ time PAGER=cat git blame -C -C -C -M Documentation/git-ls-files.txt > /dev/null\n\nreal\t0m2.354s\nuser\t0m2.312s\nsys\t0m0.040s\n(master)$ time PAGER=cat git blame -C -C -C -M Documentation/git-ls-files.txt > /dev/null\n\nreal\t0m2.338s\nuser\t0m2.283s\nsys\t0m0.056s\n(master)$ time PAGER=cat git blame --minimal -C -C -C -M Documentation/git-ls-files.txt > /dev/null\n\nreal\t0m2.376s\nuser\t0m2.302s\nsys\t0m0.071s\n(master)$ time PAGER=cat git blame --minimal -C -C -C -M Documentation/git-ls-files.txt > /dev/null\n\nreal\t0m2.362s\nuser\t0m2.312s\nsys\t0m0.049s\n(master)$ time PAGER=cat git blame --minimal -C -C -C -M Documentation/git-ls-files.txt > /dev/null\n\nreal\t0m2.360s\nuser\t0m2.301s\nsys\t0m0.057s\n(master)$ time PAGER=cat git blame --minimal -C -C -C -M Documentation/git-ls-files.txt > /dev/null\n\nreal\t0m2.355s\nuser\t0m2.285s\nsys\t0m0.069s\n\n\n---------------------------------------------------\n\n((2cf565c...))$ time PAGER=cat git blame -C -M Documentation/git-ls-files.txt > /dev/null\n\nreal\t0m0.003s\nuser\t0m0.002s\nsys\t0m0.000s\n((2cf565c...))$ time PAGER=cat git blame -C -M Documentation/git-ls-files.txt > /dev/null\n\nreal\t0m0.003s\nuser\t0m0.003s\nsys\t0m0.000s\n((2cf565c...))$ time PAGER=cat git blame -C -M Documentation/git-ls-files.txt > /dev/null\n\nreal\t0m0.004s\nuser\t0m0.003s\nsys\t0m0.001s\n((2cf565c...))$ time PAGER=cat git blame -C -M Documentation/git-ls-files.txt > /dev/null\n\nreal\t0m0.004s\nuser\t0m0.003s\nsys\t0m0.001s\n((2cf565c...))$ time PAGER=cat git blame -C -M Documentation/git-ls-files.txt > /dev/null\n\nreal\t0m0.003s\nuser\t0m0.002s\nsys\t0m0.001s\n((2cf565c...))$ time PAGER=cat git blame --minimal -C -M Documentation/git-ls-files.txt > /dev/null\n\nreal\t0m0.010s\nuser\t0m0.009s\nsys\t0m0.000s\n((2cf565c...))$ time PAGER=cat git blame --minimal -C -M Documentation/git-ls-files.txt > /dev/null\n\nreal\t0m0.011s\nuser\t0m0.010s\nsys\t0m0.001s\n((2cf565c...))$ time PAGER=cat git blame --minimal -C -M Documentation/git-ls-files.txt > /dev/null\n\nreal\t0m0.012s\nuser\t0m0.012s\nsys\t0m0.000s\n((2cf565c...))$ time PAGER=cat git blame --minimal -C -M Documentation/git-ls-files.txt > /dev/null\n\nreal\t0m0.011s\nuser\t0m0.011s\nsys\t0m0.000s\n((2cf565c...))$ time PAGER=cat git blame -C -C -C -M Documentation/git-ls-files.txt > /dev/null\n\nreal\t0m0.008s\nuser\t0m0.007s\nsys\t0m0.002s\n((2cf565c...))$ time PAGER=cat git blame -C -C -C -M Documentation/git-ls-files.txt > /dev/null\n\nreal\t0m0.011s\nuser\t0m0.011s\nsys\t0m0.000s\n((2cf565c...))$ time PAGER=cat git blame -C -C -C -M Documentation/git-ls-files.txt > /dev/null\n\nreal\t0m0.010s\nuser\t0m0.010s\nsys\t0m0.000s\n((2cf565c...))$ time PAGER=cat git blame -C -C -C -M Documentation/git-ls-files.txt > /dev/null\n\nreal\t0m0.010s\nuser\t0m0.009s\nsys\t0m0.000s\n((2cf565c...))$ time PAGER=cat git blame --minimal -C -C -C -M Documentation/git-ls-files.txt > /dev/null\n\nreal\t0m0.028s\nuser\t0m0.024s\nsys\t0m0.003s\n((2cf565c...))$ time PAGER=cat git blame --minimal -C -C -C -M Documentation/git-ls-files.txt > /dev/null\n\nreal\t0m0.032s\nuser\t0m0.029s\nsys\t0m0.002s\n((2cf565c...))$ time PAGER=cat git blame --minimal -C -C -C -M Documentation/git-ls-files.txt > /dev/null\n\nreal\t0m0.027s\nuser\t0m0.025s\nsys\t0m0.001s\n((2cf565c...))$ time PAGER=cat git blame --minimal -C -C -C -M Documentation/git-ls-files.txt > /dev/null\n\nreal\t0m0.028s\nuser\t0m0.027s\nsys\t0m0.000s\n\n"},{"id":"236826","messageId":"8738iixrzi.fsf@thomasrast.ch","threadId":"36182","inReplyTo":"154997837.FlSR2gFiUN@river","subject":"Re: [PATCH] Make XDF_NEED_MINIMAL default in blame.","fromName":"Thomas Rast","fromEmail":"tr@thomasrast.ch","sentAt":"2014-03-16T12:12:01Z","receivedAt":"2014-03-16T12:12:01Z","isPatch":true,"sender":{"key":"tr@thomasrast.ch","avatar":"https://avatars.githubusercontent.com/u/153510?v=4"},"body":"Michael Andreen <harv@ruin.nu> writes:\n\n> The --minimal flag is still there, but didn't want to break scripts\n> depending on it.\n\nIf I specify --no-minimal, does that turn it off again?\n\n-- \nThomas Rast\ntr@thomasrast.ch\n"},{"id":"236827","messageId":"1688337.Jf0jlzSU63@river","threadId":"36182","inReplyTo":"8738iixrzi.fsf@thomasrast.ch","subject":"Re: [PATCH] Make XDF_NEED_MINIMAL default in blame.","fromName":"Michael Andreen","fromEmail":"harv@ruin.nu","sentAt":"2014-03-16T12:32:16Z","receivedAt":"2014-03-16T12:32:16Z","isPatch":true,"sender":{"key":"harv@ruin.nu","avatar":null},"body":"On Sunday, March 16, 2014 01:12:01 PM Thomas Rast wrote:\n> Michael Andreen <harv@ruin.nu> writes:\n> \n> > The --minimal flag is still there, but didn't want to break scripts\n> > depending on it.\n> \n> If I specify --no-minimal, does that turn it off again?\n> \n\nYes, that works.\n\n/Michael\n"}]}