From: Ronnie Sahlberg <sahlberg@google.com>
To: git@vger.kernel.org
Cc: Ronnie Sahlberg <sahlberg@google.com>
Subject: [PATCH v2 18/23] refs.c: add a backend method structure with transaction functions
Date: Wed, 13 Aug 2014 13:15:02 -0700 [thread overview]
Message-ID: <1407960907-18189-19-git-send-email-sahlberg@google.com> (raw)
In-Reply-To: <1407960907-18189-1-git-send-email-sahlberg@google.com>
Add a ref structure for backend methods. Start by adding method pointers
for the transaction functions.
Rename the existing transaction functions to files_* and make them static.
Add new transaction functions that just pass through to the appropriate
methods for the backend.
Signed-off-by: Ronnie Sahlberg <sahlberg@google.com>
---
refs-common.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++
refs.c | 68 +++++++++++++++++++++++++++++++++++------------------------
refs.h | 35 ++++++++++++++++++++++++++++++
3 files changed, 130 insertions(+), 27 deletions(-)
diff --git a/refs-common.c b/refs-common.c
index aafc4c8..e7cea02 100644
--- a/refs-common.c
+++ b/refs-common.c
@@ -799,3 +799,57 @@ int check_refname_format(const char *refname, int flags)
return -1; /* Refname has only one component. */
return 0;
}
+
+/* backend functions */
+struct ref_transaction *transaction_begin(struct strbuf *err)
+{
+ return refs->transaction_begin(err);
+}
+
+int transaction_update_sha1(struct ref_transaction *transaction,
+ const char *refname, const unsigned char *new_sha1,
+ const unsigned char *old_sha1, int flags,
+ int have_old, const char *msg, struct strbuf *err)
+{
+ return refs->transaction_update_sha1(transaction, refname, new_sha1,
+ old_sha1, flags, have_old, msg,
+ err);
+}
+
+int transaction_create_sha1(struct ref_transaction *transaction,
+ const char *refname, const unsigned char *new_sha1,
+ int flags, const char *msg, struct strbuf *err)
+{
+ return refs->transaction_create_sha1(transaction, refname, new_sha1,
+ flags, msg, err);
+}
+int transaction_delete_sha1(struct ref_transaction *transaction,
+ const char *refname, const unsigned char *old_sha1,
+ int flags, int have_old, const char *msg,
+ struct strbuf *err)
+{
+ return refs->transaction_delete_sha1(transaction, refname, old_sha1,
+ flags, have_old, msg, err);
+}
+
+int transaction_update_reflog(struct ref_transaction *transaction,
+ const char *refname,
+ const unsigned char *new_sha1,
+ const unsigned char *old_sha1,
+ struct reflog_committer_info *ci,
+ const char *msg, int flags,
+ struct strbuf *err)
+{
+ return refs->transaction_update_reflog(transaction, refname, new_sha1,
+ old_sha1, ci, msg, flags, err);
+}
+
+int transaction_commit(struct ref_transaction *transaction, struct strbuf *err)
+{
+ return refs->transaction_commit(transaction, err);
+}
+
+void transaction_free(struct ref_transaction *transaction)
+{
+ return refs->transaction_free(transaction);
+}
diff --git a/refs.c b/refs.c
index e58a7e1..27eafd0 100644
--- a/refs.c
+++ b/refs.c
@@ -2777,12 +2777,12 @@ struct ref_transaction {
enum ref_transaction_state state;
};
-struct ref_transaction *transaction_begin(struct strbuf *err)
+static struct ref_transaction *files_transaction_begin(struct strbuf *err)
{
return xcalloc(1, sizeof(struct ref_transaction));
}
-void transaction_free(struct ref_transaction *transaction)
+static void files_transaction_free(struct ref_transaction *transaction)
{
int i;
@@ -2812,13 +2812,13 @@ static struct ref_update *add_update(struct ref_transaction *transaction,
return update;
}
-int transaction_update_reflog(struct ref_transaction *transaction,
- const char *refname,
- const unsigned char *new_sha1,
- const unsigned char *old_sha1,
- struct reflog_committer_info *ci,
- const char *msg, int flags,
- struct strbuf *err)
+static int files_transaction_update_reflog(struct ref_transaction *transaction,
+ const char *refname,
+ const unsigned char *new_sha1,
+ const unsigned char *old_sha1,
+ struct reflog_committer_info *ci,
+ const char *msg, int flags,
+ struct strbuf *err)
{
struct ref_update *update;
int i;
@@ -2865,12 +2865,13 @@ int transaction_update_reflog(struct ref_transaction *transaction,
return 0;
}
-int transaction_update_sha1(struct ref_transaction *transaction,
- const char *refname,
- const unsigned char *new_sha1,
- const unsigned char *old_sha1,
- int flags, int have_old, const char *msg,
- struct strbuf *err)
+static int files_transaction_update_sha1(struct ref_transaction *transaction,
+ const char *refname,
+ const unsigned char *new_sha1,
+ const unsigned char *old_sha1,
+ int flags, int have_old,
+ const char *msg,
+ struct strbuf *err)
{
struct ref_update *update;
@@ -2897,11 +2898,11 @@ int transaction_update_sha1(struct ref_transaction *transaction,
return 0;
}
-int transaction_create_sha1(struct ref_transaction *transaction,
- const char *refname,
- const unsigned char *new_sha1,
- int flags, const char *msg,
- struct strbuf *err)
+static int files_transaction_create_sha1(struct ref_transaction *transaction,
+ const char *refname,
+ const unsigned char *new_sha1,
+ int flags, const char *msg,
+ struct strbuf *err)
{
if (transaction->state != REF_TRANSACTION_OPEN)
die("BUG: create called for transaction that is not open");
@@ -2913,11 +2914,12 @@ int transaction_create_sha1(struct ref_transaction *transaction,
null_sha1, flags, 1, msg, err);
}
-int transaction_delete_sha1(struct ref_transaction *transaction,
- const char *refname,
- const unsigned char *old_sha1,
- int flags, int have_old, const char *msg,
- struct strbuf *err)
+static int files_transaction_delete_sha1(struct ref_transaction *transaction,
+ const char *refname,
+ const unsigned char *old_sha1,
+ int flags, int have_old,
+ const char *msg,
+ struct strbuf *err)
{
if (transaction->state != REF_TRANSACTION_OPEN)
die("BUG: delete called for transaction that is not open");
@@ -2959,8 +2961,8 @@ static int ref_update_reject_duplicates(struct ref_update **updates, int n,
return 0;
}
-int transaction_commit(struct ref_transaction *transaction,
- struct strbuf *err)
+static int files_transaction_commit(struct ref_transaction *transaction,
+ struct strbuf *err)
{
int ret = 0, delnum = 0, i, df_conflict = 0, need_repack = 0;
int num_updates = 0;
@@ -3284,3 +3286,15 @@ cleanup:
ret = -2;
return ret;
}
+
+struct ref_be refs_files = {
+ files_transaction_begin,
+ files_transaction_update_sha1,
+ files_transaction_create_sha1,
+ files_transaction_delete_sha1,
+ files_transaction_update_reflog,
+ files_transaction_commit,
+ files_transaction_free,
+};
+
+struct ref_be *refs = &refs_files;
diff --git a/refs.h b/refs.h
index a14fc5d..4b669f5 100644
--- a/refs.h
+++ b/refs.h
@@ -350,4 +350,39 @@ int update_ref(const char *action, const char *refname,
extern int parse_hide_refs_config(const char *var, const char *value, const char *);
extern int ref_is_hidden(const char *);
+
+/* refs backends */
+typedef struct ref_transaction *(*transaction_begin_fn)(struct strbuf *err);
+typedef int (*transaction_update_sha1_fn)(struct ref_transaction *transaction,
+ const char *refname, const unsigned char *new_sha1,
+ const unsigned char *old_sha1, int flags, int have_old,
+ const char *msg, struct strbuf *err);
+typedef int (*transaction_create_sha1_fn)(struct ref_transaction *transaction,
+ const char *refname, const unsigned char *new_sha1,
+ int flags, const char *msg, struct strbuf *err);
+typedef int (*transaction_delete_sha1_fn)(struct ref_transaction *transaction,
+ const char *refname, const unsigned char *old_sha1,
+ int flags, int have_old, const char *msg, struct strbuf *err);
+typedef int (*transaction_update_reflog_fn)(
+ struct ref_transaction *transaction,
+ const char *refname, const unsigned char *new_sha1,
+ const unsigned char *old_sha1,
+ struct reflog_committer_info *ci,
+ const char *msg, int flags, struct strbuf *err);
+typedef int (*transaction_commit_fn)(struct ref_transaction *transaction,
+ struct strbuf *err);
+typedef void (*transaction_free_fn)(struct ref_transaction *transaction);
+
+struct ref_be {
+ transaction_begin_fn transaction_begin;
+ transaction_update_sha1_fn transaction_update_sha1;
+ transaction_create_sha1_fn transaction_create_sha1;
+ transaction_delete_sha1_fn transaction_delete_sha1;
+ transaction_update_reflog_fn transaction_update_reflog;
+ transaction_commit_fn transaction_commit;
+ transaction_free_fn transaction_free;
+};
+
+extern struct ref_be *refs;
+
#endif /* REFS_H */
--
2.0.1.556.g3edca4c
next prev parent reply other threads:[~2014-08-13 20:15 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-13 20:14 [PATCH v2 00/23] backend-struct-db Ronnie Sahlberg
2014-08-13 20:14 ` [PATCH v2 01/23] refs.c: create a public function for is_refname_available Ronnie Sahlberg
2014-08-13 20:14 ` [PATCH v2 02/23] refs-common.c: create a file to host all common refs code Ronnie Sahlberg
2014-08-13 20:14 ` [PATCH v2 03/23] refs-common.c: move update_ref to refs-common.c Ronnie Sahlberg
2014-08-13 20:14 ` [PATCH v2 04/23] refs-common.c: move delete_ref to the common code Ronnie Sahlberg
2014-08-13 20:14 ` [PATCH v2 05/23] refs-common.c: move rename_ref " Ronnie Sahlberg
2014-08-13 20:14 ` [PATCH v2 06/23] refs-common.c: move read_ref_at to the refs common file Ronnie Sahlberg
2014-08-13 20:14 ` [PATCH v2 07/23] refs-common.c: move the hidden refs functions to the common code Ronnie Sahlberg
2014-08-13 20:14 ` [PATCH v2 08/23] refs-common.c: move dwim and friend functions to refs common Ronnie Sahlberg
2014-08-13 20:14 ` [PATCH v2 09/23] refs-common.c: move warn_if_dangling_symref* to refs-common Ronnie Sahlberg
2014-08-13 20:14 ` [PATCH v2 10/23] refs-common.c: move read_ref, read_ref_full and ref_exists to common Ronnie Sahlberg
2014-08-13 20:14 ` [PATCH v2 11/23] refs-common.c: move resolve_refdup " Ronnie Sahlberg
2014-08-13 20:14 ` [PATCH v2 12/23] refs-common.c: move check_refname_component to the common code Ronnie Sahlberg
2014-08-13 20:14 ` [PATCH v2 13/23] refs-common.c: move is_branch " Ronnie Sahlberg
2014-08-13 20:14 ` [PATCH v2 14/23] refs-common.c: move names_conflict " Ronnie Sahlberg
2014-08-13 20:14 ` [PATCH v2 15/23] refs-common.c: move prettify_refname " Ronnie Sahlberg
2014-08-13 20:15 ` [PATCH v2 16/23] refs-common.c: move ref iterators " Ronnie Sahlberg
2014-08-13 20:15 ` [PATCH v2 17/23] refs-common.c: move head_ref_namespaced to the common file Ronnie Sahlberg
2014-08-13 20:15 ` Ronnie Sahlberg [this message]
2014-08-26 21:25 ` [PATCH v2 18/23] refs.c: add a backend method structure with transaction functions Junio C Hamano
2014-08-26 22:11 ` Ronnie Sahlberg
2014-08-13 20:15 ` [PATCH v2 19/23] refs.c: add reflog backend methods Ronnie Sahlberg
2014-08-13 20:15 ` [PATCH v2 20/23] refs.c: add methods for misc ref operations Ronnie Sahlberg
2014-08-13 20:15 ` [PATCH v2 21/23] refs.c: add methods for head_ref* Ronnie Sahlberg
2014-08-13 20:15 ` [PATCH v2 22/23] refs.c: add methods for the ref iterators Ronnie Sahlberg
2014-08-13 21:18 ` [PATCH v2 00/23] backend-struct-db Junio C Hamano
2014-08-13 21:55 ` Ronnie Sahlberg
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1407960907-18189-19-git-send-email-sahlberg@google.com \
--to=sahlberg@google.com \
--cc=git@vger.kernel.org \
/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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.