mirror of
https://github.com/git/git
synced 2024-08-27 19:49:21 +00:00
pack-objects: no fetch when allow-{any,promisor}
The options --missing=allow-{any,promisor} were introduced incaf3827e2f
("rev-list: add list-objects filtering support", 2017-11-22) with the following note in the commit message: This patch introduces handling of missing objects to help debugging and development of the "partial clone" mechanism, and once the mechanism is implemented, for a power user to perform operations that are missing-object aware without incurring the cost of checking if a missing link is expected. The idea that these options are missing-object aware (and thus do not need to lazily fetch objects, unlike unaware commands that assume that all objects are present) are assumed in later commits such as07ef3c6604
("fetch test: use more robust test for filtered objects", 2020-01-15). However, the current implementations of these options use has_object_file(), which indeed lazily fetches missing objects. Teach these implementations not to do so. Also, update the documentation of these options to be clearer. Signed-off-by: Jonathan Tan <jonathantanmy@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
3318238db9
commit
ee47243d76
|
@ -270,15 +270,18 @@ So does `git bundle` (see linkgit:git-bundle[1]) when it creates a bundle.
|
||||||
This option specifies how missing objects are handled.
|
This option specifies how missing objects are handled.
|
||||||
+
|
+
|
||||||
The form '--missing=error' requests that pack-objects stop with an error if
|
The form '--missing=error' requests that pack-objects stop with an error if
|
||||||
a missing object is encountered. This is the default action.
|
a missing object is encountered. If the repository is a partial clone, an
|
||||||
|
attempt to fetch missing objects will be made before declaring them missing.
|
||||||
|
This is the default action.
|
||||||
+
|
+
|
||||||
The form '--missing=allow-any' will allow object traversal to continue
|
The form '--missing=allow-any' will allow object traversal to continue
|
||||||
if a missing object is encountered. Missing objects will silently be
|
if a missing object is encountered. No fetch of a missing object will occur.
|
||||||
omitted from the results.
|
Missing objects will silently be omitted from the results.
|
||||||
+
|
+
|
||||||
The form '--missing=allow-promisor' is like 'allow-any', but will only
|
The form '--missing=allow-promisor' is like 'allow-any', but will only
|
||||||
allow object traversal to continue for EXPECTED promisor missing objects.
|
allow object traversal to continue for EXPECTED promisor missing objects.
|
||||||
Unexpected missing object will raise an error.
|
No fetch of a missing object will occur. An unexpected missing object will
|
||||||
|
raise an error.
|
||||||
|
|
||||||
--exclude-promisor-objects::
|
--exclude-promisor-objects::
|
||||||
Omit objects that are known to be in the promisor remote. (This
|
Omit objects that are known to be in the promisor remote. (This
|
||||||
|
|
|
@ -3048,7 +3048,7 @@ static void show_object__ma_allow_any(struct object *obj, const char *name, void
|
||||||
* Quietly ignore ALL missing objects. This avoids problems with
|
* Quietly ignore ALL missing objects. This avoids problems with
|
||||||
* staging them now and getting an odd error later.
|
* staging them now and getting an odd error later.
|
||||||
*/
|
*/
|
||||||
if (!has_object_file(&obj->oid))
|
if (!has_object(the_repository, &obj->oid, 0))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
show_object(obj, name, data);
|
show_object(obj, name, data);
|
||||||
|
@ -3062,7 +3062,7 @@ static void show_object__ma_allow_promisor(struct object *obj, const char *name,
|
||||||
* Quietly ignore EXPECTED missing objects. This avoids problems with
|
* Quietly ignore EXPECTED missing objects. This avoids problems with
|
||||||
* staging them now and getting an odd error later.
|
* staging them now and getting an odd error later.
|
||||||
*/
|
*/
|
||||||
if (!has_object_file(&obj->oid) && is_promisor_object(&obj->oid))
|
if (!has_object(the_repository, &obj->oid, 0) && is_promisor_object(&obj->oid))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
show_object(obj, name, data);
|
show_object(obj, name, data);
|
||||||
|
|
Loading…
Reference in a new issue