git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v7 01/10] extension.partialclone: introduce partial clone extension

From
JHJeff Hostetler <git@jeffhostetler.com>
Date
Dec 8, 2017, 15:27 UTC
Message-ID
<20171208152716.64232-2-git@jeffhostetler.com>
In-Reply-To
<20171208152716.64232-1-git@jeffhostetler.com>
From: Jonathan Tan <jonathantanmy@google.com>
Introduce new repository extension option:
    `extensions.partialclone`

See the update to Documentation/technical/repository-version.txt in this patch for more information.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
---
 Documentation/technical/repository-version.txt | 12 ++++++++++++
 cache.h                                        |  2 ++
 environment.c                                  |  1 +
 setup.c                                        |  7 ++++++-
 4 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/Documentation/technical/repository-version.txt b/Documentation/technical/repository-version.txt
index 00ad379..e03eacc 100644
--- a/Documentation/technical/repository-version.txt
+++ b/Documentation/technical/repository-version.txt
@@ -86,3 +86,15 @@ for testing format-1 compatibility.
 When the config key `extensions.preciousObjects` is set to `true`,
 objects in the repository MUST NOT be deleted (e.g., by `git-prune` or
 `git repack -d`).
+
+`partialclone`
+~~~~~~~~~~~~~~
+
+When the config key `extensions.partialclone` is set, it indicates
+that the repo was created with a partial clone (or later performed
+a partial fetch) and that the remote may have omitted sending
+certain unwanted objects.  Such a remote is called a "promisor remote"
+and it promises that all such omitted objects can be fetched from it
+in the future.
+
+The value of this key is the name of the promisor remote.
diff --git a/cache.h b/cache.h
index 6440e2b..35e3f5e 100644
--- a/cache.h
+++ b/cache.h
@@ -860,10 +860,12 @@ extern int grafts_replace_parents;
 #define GIT_REPO_VERSION 0
 #define GIT_REPO_VERSION_READ 1
 extern int repository_format_precious_objects;
+extern char *repository_format_partial_clone;
 
 struct repository_format {
 	int version;
 	int precious_objects;
+	char *partial_clone; /* value of extensions.partialclone */
 	int is_bare;
 	char *work_tree;
 	struct string_list unknown_extensions;
diff --git a/environment.c b/environment.c
index 8289c25..e52aab3 100644
--- a/environment.c
+++ b/environment.c
@@ -27,6 +27,7 @@ int warn_ambiguous_refs = 1;
 int warn_on_object_refname_ambiguity = 1;
 int ref_paranoia = -1;
 int repository_format_precious_objects;
+char *repository_format_partial_clone;
 const char *git_commit_encoding;
 const char *git_log_output_encoding;
 const char *apply_default_whitespace;
diff --git a/setup.c b/setup.c
index 03f51e0..58536bd 100644
--- a/setup.c
+++ b/setup.c
@@ -420,7 +420,11 @@ static int check_repo_format(const char *var, const char *value, void *vdata)
 			;
 		else if (!strcmp(ext, "preciousobjects"))
 			data->precious_objects = git_config_bool(var, value);
-		else
+		else if (!strcmp(ext, "partialclone")) {
+			if (!value)
+				return config_error_nonbool(var);
+			data->partial_clone = xstrdup(value);
+		} else
 			string_list_append(&data->unknown_extensions, ext);
 	} else if (strcmp(var, "core.bare") == 0) {
 		data->is_bare = git_config_bool(var, value);
@@ -463,6 +467,7 @@ static int check_repository_format_gently(const char *gitdir, int *nongit_ok)
 	}
 
 	repository_format_precious_objects = candidate.precious_objects;
+	repository_format_partial_clone = candidate.partial_clone;
 	string_list_clear(&candidate.unknown_extensions, 0);
 	if (!has_common) {
 		if (candidate.is_bare != -1) {
-- 
2.9.3
Previous: Jeff HostetlerNext: Jeff Hostetler
Message 3 of 11 in “Partial clone part 2: fsck and promisors”
  1. 00/10 Partial clone part 2: fsck and promisorsJeff Hostetler, Dec 8, 2017
  2. 03/10 fsck: support refs pointing to promisor objectsJeff Hostetler, Dec 8, 2017
  3. 01/10 extension.partialclone: introduce partial clone extensionJeff Hostetler, Dec 8, 2017
  4. 06/10 index-pack: refactor writing of .keep filesJeff Hostetler, Dec 8, 2017
  5. 09/10 rev-list: support termination at promisor objectsJeff Hostetler, Dec 8, 2017
  6. 07/10 introduce fetch-object: fetch one promisor objectJeff Hostetler, Dec 8, 2017
  7. 08/10 sha1_file: support lazily fetching missing objectsJeff Hostetler, Dec 8, 2017
  8. 02/10 fsck: introduce partialclone extensionJeff Hostetler, Dec 8, 2017
  9. 04/10 fsck: support referenced promisor objectsJeff Hostetler, Dec 8, 2017
  10. 10/10 gc: do not repack promisor packfilesJeff Hostetler, Dec 8, 2017
  11. 05/10 fsck: support promisor objects as CLI argumentJeff Hostetler, Dec 8, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.