Skip to content

porcelain.status takes much longer than git status for many untracked directories #835

Open
@ravwojdyla

Description

@ravwojdyla

porcelain.status takes much longer than git status for many untracked directories.

Reproduction:

# prep the directories
for i in {1..40}; do
  for j in {1..1000}; do
    mkdir -p tmp/$i/$j
    touch tmp/$i/$j/t
  done
done
# validate the number of directories/files is relatively large
> find tmp | wc -l
   80041
> time git status --porcelain
?? tmp/
git st --porcelain  0.01s user 0.01s system 83% cpu 0.019 total
from dulwich import porcelain
from dulwich.repo import Repo
import time
t0 = time.time(); _ = porcelain.status(Repo(".")); print(f"Took {time.time() - t0} seconds")
Took 14.289646625518799 seconds

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions