From: Stefan Beller <sbeller@google.com>
To: git@vger.kernel.org
Cc: Jonathan Nieder <jrnieder@gmail.com>, Stefan Beller <sbeller@google.com>
Subject: [PATCH 02/19] object: move grafts to object parser
Date: Tue, 15 May 2018 16:42:16 -0700 [thread overview]
Message-ID: <20180515234233.143708-3-sbeller@google.com> (raw)
In-Reply-To: <20180515234233.143708-1-sbeller@google.com>
From: Jonathan Nieder <jrnieder@gmail.com>
Grafts are only meaningful in the context of a single repository.
Therefore they cannot be global.
Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
commit.c | 42 +++++++++++++++++++++++-------------------
object.h | 4 ++++
2 files changed, 27 insertions(+), 19 deletions(-)
diff --git a/commit.c b/commit.c
index b053f07f305..a0c9eb05c82 100644
--- a/commit.c
+++ b/commit.c
@@ -1,6 +1,7 @@
#include "cache.h"
#include "tag.h"
#include "commit.h"
+#include "repository.h"
#include "object-store.h"
#include "pkt-line.h"
#include "utf8.h"
@@ -97,9 +98,6 @@ static timestamp_t parse_commit_date(const char *buf, const char *tail)
return parse_timestamp(dateptr, NULL, 10);
}
-static struct commit_graft **commit_graft;
-static int commit_graft_alloc, commit_graft_nr;
-
static const unsigned char *commit_graft_sha1_access(size_t index, void *table)
{
struct commit_graft **commit_graft_table = table;
@@ -108,7 +106,8 @@ static const unsigned char *commit_graft_sha1_access(size_t index, void *table)
static int commit_graft_pos(const unsigned char *sha1)
{
- return sha1_pos(sha1, commit_graft, commit_graft_nr,
+ return sha1_pos(sha1, the_repository->parsed_objects->grafts,
+ the_repository->parsed_objects->grafts_nr,
commit_graft_sha1_access);
}
@@ -120,18 +119,22 @@ int register_commit_graft(struct commit_graft *graft, int ignore_dups)
if (ignore_dups)
free(graft);
else {
- free(commit_graft[pos]);
- commit_graft[pos] = graft;
+ free(the_repository->parsed_objects->grafts[pos]);
+ the_repository->parsed_objects->grafts[pos] = graft;
}
return 1;
}
pos = -pos - 1;
- ALLOC_GROW(commit_graft, commit_graft_nr + 1, commit_graft_alloc);
- commit_graft_nr++;
- if (pos < commit_graft_nr)
- MOVE_ARRAY(commit_graft + pos + 1, commit_graft + pos,
- commit_graft_nr - pos - 1);
- commit_graft[pos] = graft;
+ ALLOC_GROW(the_repository->parsed_objects->grafts,
+ the_repository->parsed_objects->grafts_nr + 1,
+ the_repository->parsed_objects->grafts_alloc);
+ the_repository->parsed_objects->grafts_nr++;
+ if (pos < the_repository->parsed_objects->grafts_nr)
+ memmove(the_repository->parsed_objects->grafts + pos + 1,
+ the_repository->parsed_objects->grafts + pos,
+ (the_repository->parsed_objects->grafts_nr - pos - 1) *
+ sizeof(*the_repository->parsed_objects->grafts));
+ the_repository->parsed_objects->grafts[pos] = graft;
return 0;
}
@@ -213,14 +216,14 @@ struct commit_graft *lookup_commit_graft(const struct object_id *oid)
pos = commit_graft_pos(oid->hash);
if (pos < 0)
return NULL;
- return commit_graft[pos];
+ return the_repository->parsed_objects->grafts[pos];
}
int for_each_commit_graft(each_commit_graft_fn fn, void *cb_data)
{
int i, ret;
- for (i = ret = 0; i < commit_graft_nr && !ret; i++)
- ret = fn(commit_graft[i], cb_data);
+ for (i = ret = 0; i < the_repository->parsed_objects->grafts_nr && !ret; i++)
+ ret = fn(the_repository->parsed_objects->grafts[i], cb_data);
return ret;
}
@@ -229,10 +232,11 @@ int unregister_shallow(const struct object_id *oid)
int pos = commit_graft_pos(oid->hash);
if (pos < 0)
return -1;
- if (pos + 1 < commit_graft_nr)
- MOVE_ARRAY(commit_graft + pos, commit_graft + pos + 1,
- commit_graft_nr - pos - 1);
- commit_graft_nr--;
+ if (pos + 1 < the_repository->parsed_objects->grafts_nr)
+ MOVE_ARRAY(the_repository->parsed_objects->grafts + pos,
+ the_repository->parsed_objects->grafts + pos + 1,
+ the_repository->parsed_objects->grafts_nr - pos - 1);
+ the_repository->parsed_objects->grafts_nr--;
return 0;
}
diff --git a/object.h b/object.h
index 7916edb4edf..ec908f9bcc1 100644
--- a/object.h
+++ b/object.h
@@ -12,6 +12,10 @@ struct parsed_object_pool {
struct alloc_state *tag_state;
struct alloc_state *object_state;
unsigned commit_count;
+
+ /* parent substitutions from .git/info/grafts and .git/shallow */
+ struct commit_graft **grafts;
+ int grafts_alloc, grafts_nr;
};
struct parsed_object_pool *parsed_object_pool_new(void);
--
2.17.0.582.gccdcbd54c44.dirty
next prev parent reply other threads:[~2018-05-15 23:42 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-15 23:42 [RFC PATCH 00/19] object store: grafts and shallow Stefan Beller
2018-05-15 23:42 ` [PATCH 01/19] object-store: move object access functions to object-store.h Stefan Beller
2018-05-15 23:42 ` Stefan Beller [this message]
2018-05-15 23:42 ` [PATCH 03/19] commit: add repository argument to commit_graft_pos Stefan Beller
2018-05-15 23:42 ` [PATCH 04/19] commit: add repository argument to register_commit_graft Stefan Beller
2018-05-15 23:42 ` [PATCH 05/19] commit: add repository argument to read_graft_file Stefan Beller
2018-05-15 23:42 ` [PATCH 06/19] commit: add repository argument to prepare_commit_graft Stefan Beller
2018-05-15 23:42 ` [PATCH 07/19] commit: add repository argument to lookup_commit_graft Stefan Beller
2018-05-15 23:42 ` [PATCH 08/19] shallow: add repository argument to set_alternate_shallow_file Stefan Beller
2018-05-15 23:42 ` [PATCH 09/19] shallow: add repository argument to register_shallow Stefan Beller
2018-05-15 23:42 ` [PATCH 10/19] shallow: add repository argument to check_shallow_file_for_update Stefan Beller
2018-05-15 23:42 ` [PATCH 11/19] shallow: add repository argument to is_repository_shallow Stefan Beller
2018-05-15 23:42 ` [PATCH 12/19] commit: convert commit_graft_pos() to handle arbitrary repositories Stefan Beller
2018-05-15 23:42 ` [PATCH 13/19] commit: convert register_commit_graft " Stefan Beller
2018-05-15 23:42 ` [PATCH 14/19] commit: convert read_graft_file " Stefan Beller
2018-05-15 23:42 ` [PATCH 15/19] cache: convert get_graft_file " Stefan Beller
2018-05-15 23:42 ` [PATCH 16/19] path.c: migrate git_path_ to take a repository argument Stefan Beller
2018-05-15 23:42 ` [PATCH 17/19] shallow: migrate shallow information into the object parser Stefan Beller
2018-05-15 23:42 ` [PATCH 18/19] commit: allow prepare_commit_graft to handle arbitrary repositories Stefan Beller
2018-05-15 23:42 ` [PATCH 19/19] commit: allow lookup_commit_graft " Stefan Beller
2018-05-17 22:51 ` [PATCH 00/19] object store: grafts and shallow Stefan Beller
2018-05-17 22:51 ` [PATCH 01/19] object-store: move object access functions to object-store.h Stefan Beller
2018-05-17 22:51 ` [PATCH 02/19] object: move grafts to object parser Stefan Beller
2018-05-17 22:51 ` [PATCH 03/19] commit: add repository argument to commit_graft_pos Stefan Beller
2018-05-17 22:51 ` [PATCH 04/19] commit: add repository argument to register_commit_graft Stefan Beller
2018-05-17 22:51 ` [PATCH 05/19] commit: add repository argument to read_graft_file Stefan Beller
2018-05-17 22:51 ` [PATCH 06/19] commit: add repository argument to prepare_commit_graft Stefan Beller
2018-05-17 22:51 ` [PATCH 07/19] commit: add repository argument to lookup_commit_graft Stefan Beller
2018-05-17 22:51 ` [PATCH 08/19] shallow: add repository argument to set_alternate_shallow_file Stefan Beller
2018-05-17 22:51 ` [PATCH 09/19] shallow: add repository argument to register_shallow Stefan Beller
2018-05-17 22:51 ` [PATCH 10/19] shallow: add repository argument to check_shallow_file_for_update Stefan Beller
2018-05-17 22:51 ` [PATCH 11/19] shallow: add repository argument to is_repository_shallow Stefan Beller
2018-05-17 22:51 ` [PATCH 12/19] commit: convert commit_graft_pos() to handle arbitrary repositories Stefan Beller
2018-05-17 22:51 ` [PATCH 13/19] commit: convert register_commit_graft " Stefan Beller
2018-05-17 22:51 ` [PATCH 14/19] commit: convert read_graft_file " Stefan Beller
2018-05-17 22:51 ` [PATCH 15/19] cache: convert get_graft_file " Stefan Beller
2018-05-17 22:51 ` [PATCH 16/19] path.c: migrate global git_path_* to take a repository argument Stefan Beller
2018-05-17 22:51 ` [PATCH 17/19] shallow: migrate shallow information into the object parser Stefan Beller
2018-05-17 22:51 ` [PATCH 18/19] commit: allow prepare_commit_graft to handle arbitrary repositories Stefan Beller
2018-05-17 22:51 ` [PATCH 19/19] commit: allow lookup_commit_graft " Stefan Beller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180515234233.143708-3-sbeller@google.com \
--to=sbeller@google.com \
--cc=git@vger.kernel.org \
--cc=jrnieder@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).