summaryrefslogtreecommitdiff
path: root/sha1_file.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2017-12-06 17:23:42 (GMT)
committerJunio C Hamano <gitster@pobox.com>2017-12-06 17:23:42 (GMT)
commit79bafd23a82a883ab054c9fcaf1e3d3bea57e4b9 (patch)
tree6ce68f30cbf2b36bdf62ef2177deca278e1a378f /sha1_file.c
parent4ca10aa8cc21178dfb9d4d84afb9a69fbc97634c (diff)
parent87b5e236a14d4783b063041588c2f77f3cc6ee89 (diff)
downloadgit-79bafd23a82a883ab054c9fcaf1e3d3bea57e4b9.zip
git-79bafd23a82a883ab054c9fcaf1e3d3bea57e4b9.tar.gz
git-79bafd23a82a883ab054c9fcaf1e3d3bea57e4b9.tar.bz2
Merge branch 'jk/fewer-pack-rescan'
Internaly we use 0{40} as a placeholder object name to signal the codepath that there is no such object (e.g. the fast-forward check while "git fetch" stores a new remote-tracking ref says "we know there is no 'old' thing pointed at by the ref, as we are creating it anew" by passing 0{40} for the 'old' side), and expect that a codepath to locate an in-core object to return NULL as a sign that the object does not exist. A look-up for an object that does not exist however is quite costly with a repository with large number of packfiles. This access pattern has been optimized. * jk/fewer-pack-rescan: sha1_file: fast-path null sha1 as a missing object everything_local: use "quick" object existence check p5551: add a script to test fetch pack-dir rescans t/perf/lib-pack: use fast-import checkpoint to create packs p5550: factor out nonsense-pack creation
Diffstat (limited to 'sha1_file.c')
-rw-r--r--sha1_file.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/sha1_file.c b/sha1_file.c
index 8ae6cb6..afe4b90 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -1164,6 +1164,9 @@ int sha1_object_info_extended(const unsigned char *sha1, struct object_info *oi,
lookup_replace_object(sha1) :
sha1;
+ if (is_null_sha1(real))
+ return -1;
+
if (!oi)
oi = &blank_oi;