All of lore.kernel.org
 help / color / mirror / Atom feed
* Bug report: git -L requires excessive memory.
@ 2022-10-29 16:59 man dog
  2022-10-31 21:45 ` SZEDER Gábor
  0 siblings, 1 reply; 17+ messages in thread
From: man dog @ 2022-10-29 16:59 UTC (permalink / raw)
  To: git

Thank you for filling out a Git bug report!
Please answer the following questions to help us understand your issue.

What did you do before the bug happened? (Steps to reproduce your issue)
git log -L /regex/,/regex/:myfile to a repo in which 2MB text file is
committed about 2800 times.

What did you expect to happen? (Expected behavior)
get the result.

What happened instead? (Actual behavior)
fatal: Out of memory, malloc failed (tried to allocate 2346801 bytes)

What's different between what you expected and what actually happened?
The function requires too much memory.
-n option should work for -L function.

Anything else you want to add:
I made a script to reproduce this. Please run the script below.
Results in each environments are in its header.
A workaround which is given in other BBS is included also.




#!/bin/bash
#
# Bug report: git -L requires excessive memory.
# Run this script to reproduce
#
# MINGW32(git version 2.38.1.windows.1) fatal: Out of memory, malloc
failed (tried to allocate 2346801 bytes)
# MINGW64(git version 2.38.1.windows.1) requires  8.6GB
# Linux64(git version 2.20.1          ) requires 13.1GB
#

git --version

if [ ! -d .git ]; then
  git init
  c=${1:-3000}
  for (( i=0;i<c;i++)); do
    gawk -v r="$i" '
      BEGIN{
        for (i=0;i<100;i++) {
          if (r>=i) {
            printf("function func_%03d(){ // revised at %d\n",i,
int((r-i)/100)*100+i%100)
            printf("  // contents of function\n")
            printf("}\n")
            make_subfuncs(i);
          }
        }
        exit
      }
      function make_subfuncs(i,    j){
        for (j=0;j<300;j++) {
          printf("function func_%03d_sub%03d(){\n",i,j)
          printf("  // contents of sub functions are NOT revised.\n")
          printf("}\n")
        }
      }' > test.txt
    git add test.txt
    git commit -m "revision $i"
  done
  git gc
fi

git log -L /func_007\(/,/}$/:test.txt # this command requires excessive memory.
git log -L /func_007\(/,/}$/:test.txt -n 10 # -n option doesn't work also.
#git log -L /func_007\(/,/}$/:test.txt HEAD~10..HEAD~0 # this works.

#
# This can be a workaround
#
step=50
num=`git log | grep -c commit`
for ((i=0;i<$num;i+=$step)); do
  end=$((i+$step))
  range=HEAD~$end..HEAD~$i
  if [ $end -ge $num ]; then
    range=HEAD~$i
  fi
#  echo $range
  git --no-pager log -L /func_007\(/,/}$/:test.txt $range
done




[System Info]
[Enabled Hooks]

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2022-11-08  2:14 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-10-29 16:59 Bug report: git -L requires excessive memory man dog
2022-10-31 21:45 ` SZEDER Gábor
2022-10-31 21:56   ` Taylor Blau
2022-11-02 22:01     ` [PATCH 0/3] line-log: plug some memory leaks SZEDER Gábor
2022-11-02 22:01       ` [PATCH 1/3] line-log: free diff queue when processing non-merge commits SZEDER Gábor
2022-11-03  0:20         ` Taylor Blau
2022-11-07 15:11           ` SZEDER Gábor
2022-11-07 15:29             ` Ævar Arnfjörð Bjarmason
2022-11-07 15:57               ` SZEDER Gábor
2022-11-08  2:14                 ` Taylor Blau
2022-11-02 22:01       ` [PATCH 2/3] line-log: free the diff queues' arrays when processing merge commits SZEDER Gábor
2022-11-03  0:21         ` Taylor Blau
2022-11-02 22:01       ` [PATCH 3/3] diff.c: use diff_free_queue() SZEDER Gábor
2022-11-03  0:24         ` Taylor Blau
2022-11-07 16:13           ` SZEDER Gábor
2022-11-08  2:14             ` Taylor Blau
2022-11-03  9:05       ` [PATCH 0/3] line-log: plug some memory leaks Ævar Arnfjörð Bjarmason

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.