[offload] Pass offload config to Clone operations.

This config needs to be set before the config takes place, so we can
simply pass it as a `-c` option on the command line to ensure its
present in the necessary cases.

Bug: 59974
Change-Id: Id9f036f6c81d6c2483685d6a6f184b7216c0942f
Reviewed-on: https://fuchsia-review.googlesource.com/c/jiri/+/430236
Reviewed-by: Haowei Wu <haowei@google.com>
Commit-Queue: Nathan Mulcahey <nmulcahey@google.com>
diff --git a/gitutil/git.go b/gitutil/git.go
index 9558479..bb1f065 100644
--- a/gitutil/git.go
+++ b/gitutil/git.go
@@ -322,6 +322,10 @@
 			if typedOpt {
 				args = append(args, "--filter=blob:none")
 			}
+		case OffloadPackfilesOpt:
+			if typedOpt {
+				args = append([]string{"-c", "fetch.uriprotocols", "https"}, args...)
+			}
 		}
 	}
 	args = append(args, repo)
diff --git a/gitutil/options.go b/gitutil/options.go
index 9462573..5f1b385 100644
--- a/gitutil/options.go
+++ b/gitutil/options.go
@@ -130,3 +130,7 @@
 type UpdateHeadOkOpt bool
 
 func (UpdateHeadOkOpt) fetchOpt() {}
+
+type OffloadPackfilesOpt bool
+
+func (OffloadPackfilesOpt) cloneOpt() {}
diff --git a/project/loader.go b/project/loader.go
index 38c3e93..c6d91ed 100644
--- a/project/loader.go
+++ b/project/loader.go
@@ -339,6 +339,9 @@
 	if jirix.Partial {
 		opts = append(opts, gitutil.OmitBlobsOpt(true))
 	}
+	if jirix.OffloadPackfiles {
+		opts = append(opts, gitutil.OffloadPackfilesOpt(true))
+	}
 	if err := clone(jirix, remoteUrl, path, opts...); err != nil {
 		return err
 	}
diff --git a/project/operations.go b/project/operations.go
index 72aefb5..e6a6df6 100644
--- a/project/operations.go
+++ b/project/operations.go
@@ -153,6 +153,9 @@
 		if (cache == r || cache == "") && jirix.Partial {
 			opts = append(opts, gitutil.OmitBlobsOpt(true))
 		}
+		if jirix.OffloadPackfiles {
+			opts = append(opts, gitutil.OffloadPackfilesOpt(true))
+		}
 		if err = clone(jirix, r, op.destination, opts...); err != nil {
 			return err
 		}
diff --git a/project/project.go b/project/project.go
index 1380637..8a4a060 100644
--- a/project/project.go
+++ b/project/project.go
@@ -2165,6 +2165,9 @@
 		} else {
 			opts = append(opts, gitutil.BareOpt(true))
 		}
+		if jirix.OffloadPackfiles {
+			opts = append(opts, gitutil.OffloadPackfilesOpt(true))
+		}
 		if err := gitutil.New(jirix).Clone(remote, dir, opts...); err != nil {
 			return err
 		}