Re: RFC: grafts generalised

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Dmitry Potapov <dpotapov@...>
Cc: Stephen R. van den Berg <srb@...>, Linus Torvalds <torvalds@...>, <git@...>
Date: Wednesday, July 2, 2008 - 5:49 pm

Junio C Hamano <gitster@pobox.com> writes:


This shows how the "object transfer ignores grafts" side of the earlier
suggestion by Linus would look like to get people started.  Totally
untested.

I threw in for_each_commit_graft() in the patch so that updates to the
reachability walker can add otherwise hidden objects, but otherwise it is
not used yet.

 builtin-pack-objects.c |    5 +++++
 builtin-send-pack.c    |    3 ++-
 cache.h                |    1 +
 commit.c               |   10 ++++++++++
 commit.h               |    2 ++
 environment.c          |    1 +
 upload-pack.c          |    1 +
 7 files changed, 22 insertions(+), 1 deletions(-)

diff --git a/builtin-pack-objects.c b/builtin-pack-objects.c
index 28207d9..53b0b33 100644
--- a/builtin-pack-objects.c
+++ b/builtin-pack-objects.c
@@ -30,6 +30,7 @@ git-pack-objects [{ -q | --progress | --all-progress }] \n\
 	[--threads=N] [--non-empty] [--revs [--unpacked | --all]*] [--reflog] \n\
 	[--stdout | base-name] [--include-tag] \n\
 	[--keep-unreachable | --unpack-unreachable] \n\
+	[--ignore-graft] \n\
 	[<ref-list | <object-list]";
 
 struct object_entry {
@@ -2160,6 +2161,10 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)
 				die("bad %s", arg);
 			continue;
 		}
+		if (!strcmp(arg, "--ignore-graft")) {
+			honor_graft = 0;
+			continue;
+		}
 		usage(pack_usage);
 	}
 
diff --git a/builtin-send-pack.c b/builtin-send-pack.c
index d76260c..d932352 100644
--- a/builtin-send-pack.c
+++ b/builtin-send-pack.c
@@ -27,6 +27,7 @@ static int pack_objects(int fd, struct ref *refs)
 	 */
 	const char *argv[] = {
 		"pack-objects",
+		"--ignore-graft",
 		"--all-progress",
 		"--revs",
 		"--stdout",
@@ -36,7 +37,7 @@ static int pack_objects(int fd, struct ref *refs)
 	struct child_process po;
 
 	if (args.use_thin_pack)
-		argv[4] = "--thin";
+		argv[5] = "--thin";
 	memset(&po, 0, sizeof(po));
 	po.argv = argv;
 	po.in = -1;
diff --git a/cache.h b/cache.h
index 188428d..00858f9 100644
--- a/cache.h
+++ b/cache.h
@@ -435,6 +435,7 @@ extern size_t packed_git_limit;
 extern size_t delta_base_cache_limit;
 extern int auto_crlf;
 extern int fsync_object_files;
+extern int honor_graft;
 
 enum safe_crlf {
 	SAFE_CRLF_FALSE = 0,
diff --git a/commit.c b/commit.c
index e2d8624..62cf104 100644
--- a/commit.c
+++ b/commit.c
@@ -101,6 +101,13 @@ static int commit_graft_pos(const unsigned char *sha1)
 	return -lo - 1;
 }
 
+void for_each_commit_graft(void (*fn)(struct commit_graft *))
+{
+	int i;
+	for (i = 0; i < commit_graft_nr; i++)
+		fn(commit_graft[i]);
+}
+
 int register_commit_graft(struct commit_graft *graft, int ignore_dups)
 {
 	int pos = commit_graft_pos(graft->sha1);
@@ -196,7 +203,10 @@ static void prepare_commit_graft(void)
 struct commit_graft *lookup_commit_graft(const unsigned char *sha1)
 {
 	int pos;
+
 	prepare_commit_graft();
+	if (!honor_graft)
+		return NULL;
 	pos = commit_graft_pos(sha1);
 	if (pos < 0)
 		return NULL;
diff --git a/commit.h b/commit.h
index 2d94d41..8f76dd9 100644
--- a/commit.h
+++ b/commit.h
@@ -138,4 +138,6 @@ static inline int single_parent(struct commit *commit)
 	return commit->parents && !commit->parents->next;
 }
 
+void for_each_commit_graft(void (*fn)(struct commit_graft *));
+
 #endif /* COMMIT_H */
diff --git a/environment.c b/environment.c
index 4a88a17..eb8f36d 100644
--- a/environment.c
+++ b/environment.c
@@ -41,6 +41,7 @@ enum safe_crlf safe_crlf = SAFE_CRLF_WARN;
 unsigned whitespace_rule_cfg = WS_DEFAULT_RULE;
 enum branch_track git_branch_track = BRANCH_TRACK_REMOTE;
 enum rebase_setup_type autorebase = AUTOREBASE_NEVER;
+int honor_graft = 1;
 
 /* This is set by setup_git_dir_gently() and/or git_default_config() */
 char *git_work_tree_cfg;
diff --git a/upload-pack.c b/upload-pack.c
index b46dd36..d948d64 100644
--- a/upload-pack.c
+++ b/upload-pack.c
@@ -158,6 +158,7 @@ static void create_pack_file(void)
 		die("git-upload-pack: unable to fork git-rev-list");
 
 	argv[arg++] = "pack-objects";
+	argv[arg++] = "--ignore-graft";
 	argv[arg++] = "--stdout";
 	if (!no_progress)
 		argv[arg++] = "--progress";
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
RFC: grafts generalised, Stephen R. van den Berg, (Wed Jul 2, 10:35 am)
Re: RFC: grafts generalised, Petr Baudis, (Wed Jul 2, 8:13 pm)
Re: RFC: grafts generalised, Petr Baudis, (Wed Jul 2, 8:16 pm)
Re: RFC: grafts generalised, Junio C Hamano, (Wed Jul 2, 8:28 pm)
Re: RFC: grafts generalised, Dmitry Potapov, (Wed Jul 2, 1:19 pm)
Re: RFC: grafts generalised, Stephen R. van den Berg, (Wed Jul 2, 1:59 pm)
Re: RFC: grafts generalised, Dmitry Potapov, (Wed Jul 2, 1:58 pm)
Re: RFC: grafts generalised, Stephen R. van den Berg, (Wed Jul 2, 2:10 pm)
Re: RFC: grafts generalised, Johannes Sixt, (Thu Jul 3, 2:02 am)
Re: RFC: grafts generalised, Stephen R. van den Berg, (Thu Jul 3, 3:30 am)
Re: RFC: grafts generalised, Johannes Sixt, (Thu Jul 3, 3:42 am)
Re: RFC: grafts generalised, Stephen R. van den Berg, (Thu Jul 3, 5:37 am)
Re: RFC: grafts generalised, Dmitry Potapov, (Wed Jul 2, 4:39 pm)
Re: RFC: grafts generalised, Junio C Hamano, (Wed Jul 2, 5:27 pm)
Re: RFC: grafts generalised, Junio C Hamano, (Wed Jul 2, 5:49 pm)
Re: RFC: grafts generalised, Junio C Hamano, (Wed Jul 2, 8:03 pm)
Re: RFC: grafts generalised, Stephen R. van den Berg, (Wed Jul 2, 5:18 pm)
Re: RFC: grafts generalised, Avery Pennarun, (Wed Jul 2, 5:28 pm)
Re: RFC: grafts generalised, Dmitry Potapov, (Wed Jul 2, 2:33 pm)
Re: RFC: grafts generalised, Jakub Narebski, (Wed Jul 2, 12:35 pm)
Re: RFC: grafts generalised, Stephen R. van den Berg, (Wed Jul 2, 1:32 pm)
Re: RFC: grafts generalised, Jakub Narebski, (Thu Jul 3, 8:43 pm)
Re: RFC: grafts generalised, Petr Baudis, (Wed Jul 2, 8:21 pm)
Re: RFC: grafts generalised, Stephen R. van den Berg, (Thu Jul 3, 3:11 am)
Re: RFC: grafts generalised, Michael J Gruber, (Wed Jul 2, 12:43 pm)
Re: RFC: grafts generalised, Stephen R. van den Berg, (Wed Jul 2, 1:42 pm)
Re: RFC: grafts generalised, Andreas Ericsson, (Mon Jul 7, 2:28 am)
Re: RFC: grafts generalised, Stephen R. van den Berg, (Mon Jul 7, 2:59 am)
Re: RFC: grafts generalised, Mike Hommey, (Wed Jul 2, 2:25 pm)
Re: RFC: grafts generalised, Stephen R. van den Berg, (Wed Jul 2, 2:37 pm)
Re: RFC: grafts generalised, Stephan Beyer, (Wed Jul 2, 3:31 pm)
Re: RFC: grafts generalised, Dmitry Potapov, (Wed Jul 2, 4:42 pm)
Re: RFC: grafts generalised, Stephan Beyer, (Wed Jul 2, 7:46 pm)
Re: RFC: grafts generalised, Stephen R. van den Berg, (Thu Jul 3, 2:05 am)
Re: RFC: grafts generalised, Stephan Beyer, (Wed Jul 2, 3:36 pm)
Re: RFC: grafts generalised, Michael J Gruber, (Wed Jul 2, 2:34 pm)