+
+ if (!si->shallow || !si->shallow->nr)
+ return;
+
+ if (alternate_shallow_file) {
+ /*
+ * The temporary shallow file is only useful for
+ * index-pack and unpack-objects because it may
+ * contain more roots than we want. Delete it.
+ */
+ if (*alternate_shallow_file)
+ unlink(alternate_shallow_file);
+ free((char *)alternate_shallow_file);
+ }
+
+ if (args->cloning) {
+ /*
+ * remote is shallow, but this is a clone, there are
+ * no objects in repo to worry about. Accept any
+ * shallow points that exist in the pack (iow in repo
+ * after get_pack() and reprepare_packed_git())
+ */
+ struct sha1_array extra = SHA1_ARRAY_INIT;
+ unsigned char (*sha1)[20] = si->shallow->sha1;
+ for (i = 0; i < si->shallow->nr; i++)
+ if (has_sha1_file(sha1[i]))
+ sha1_array_append(&extra, sha1[i]);
+ if (extra.nr) {
+ setup_alternate_shallow(&shallow_lock,
+ &alternate_shallow_file,
+ &extra);
+ commit_lock_file(&shallow_lock);
+ }
+ sha1_array_clear(&extra);
+ return;
+ }