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

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

From
JHJeff Hostetler <git@jeffhostetler.com>
Date
Nov 16, 2017, 18:12 UTC
Message-ID
<20171116181257.61673-2-git@jeffhostetler.com>
In-Reply-To
<20171116181257.61673-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: Jonathan Tan
Message 16 of 17 in “Partial clone part 2: fsck and promisors”
  1. 00/10 Partial clone part 2: fsck and promisorsJeff Hostetler, Nov 16, 2017
  2. 04/10 fsck: support referenced promisor objectsJeff Hostetler, Nov 16, 2017
  3. 05/10 fsck: support promisor objects as CLI argumentJeff Hostetler, Nov 16, 2017
  4. 03/10 fsck: support refs pointing to promisor objectsJeff Hostetler, Nov 16, 2017
  5. 06/10 index-pack: refactor writing of .keep filesJeff Hostetler, Nov 16, 2017
  6. 07/10 introduce fetch-object: fetch one promisor objectJeff Hostetler, Nov 16, 2017
  7. Ramsay JonesNov 16, 2017
  8. Jeff HostetlerNov 17, 2017
  9. Ramsay JonesNov 17, 2017
  10. Stefan BellerNov 17, 2017
  11. Jeff HostetlerNov 20, 2017
  12. 02/10 fsck: introduce partialclone extensionJeff Hostetler, Nov 16, 2017
  13. 08/10 sha1_file: support lazily fetching missing objectsJeff Hostetler, Nov 16, 2017
  14. 10/10 gc: do not repack promisor packfilesJeff Hostetler, Nov 16, 2017
  15. 09/10 rev-list: support termination at promisor objectsJeff Hostetler, Nov 16, 2017
  16. 01/10 extension.partialclone: introduce partial clone extensionJeff Hostetler, Nov 16, 2017
  17. Jonathan TanNov 16, 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.