From: Ronnie Sahlberg <sahlberg@google.com>
To: git@vger.kernel.org
Cc: Ronnie Sahlberg <sahlberg@google.com>
Subject: [PATCH v2 05/23] refs-common.c: move rename_ref to the common code
Date: Wed, 13 Aug 2014 13:14:49 -0700 [thread overview]
Message-ID: <1407960907-18189-6-git-send-email-sahlberg@google.com> (raw)
In-Reply-To: <1407960907-18189-1-git-send-email-sahlberg@google.com>
This change moves rename_ref() to the refs-common.c file since this function
does not contain any backend specific code.
Signed-off-by: Ronnie Sahlberg <sahlberg@google.com>
---
refs-common.c | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
refs.c | 92 -----------------------------------------------------------
2 files changed, 92 insertions(+), 92 deletions(-)
diff --git a/refs-common.c b/refs-common.c
index 71ad358..f99d83e 100644
--- a/refs-common.c
+++ b/refs-common.c
@@ -43,3 +43,95 @@ int delete_ref(const char *refname, const unsigned char *sha1, int delopt)
transaction_free(transaction);
return 0;
}
+
+struct rename_reflog_cb {
+ struct ref_transaction *transaction;
+ const char *refname;
+ struct strbuf *err;
+};
+
+static int rename_reflog_ent(unsigned char *osha1, unsigned char *nsha1,
+ const char *id, unsigned long timestamp, int tz,
+ const char *message, void *cb_data)
+{
+ struct rename_reflog_cb *cb = cb_data;
+ struct reflog_committer_info ci;
+
+ memset(&ci, 0, sizeof(ci));
+ ci.id = id;
+ ci.timestamp = timestamp;
+ ci.tz = tz;
+ return transaction_update_reflog(cb->transaction, cb->refname,
+ nsha1, osha1, &ci, message, 0,
+ cb->err);
+}
+
+int rename_ref(const char *oldrefname, const char *newrefname, const char *logmsg)
+{
+ unsigned char sha1[20];
+ int flag = 0, log;
+ struct ref_transaction *transaction = NULL;
+ struct strbuf err = STRBUF_INIT;
+ const char *symref = NULL;
+ struct rename_reflog_cb cb;
+ struct reflog_committer_info ci;
+
+ memset(&ci, 0, sizeof(ci));
+ ci.committer_info = git_committer_info(0);
+
+ symref = resolve_ref_unsafe(oldrefname, sha1,
+ RESOLVE_REF_READING, &flag);
+ if (flag & REF_ISSYMREF) {
+ error("refname %s is a symbolic ref, renaming it is not supported",
+ oldrefname);
+ return 1;
+ }
+ if (!symref) {
+ error("refname %s not found", oldrefname);
+ return 1;
+ }
+
+ if (!is_refname_available(newrefname, &oldrefname, 1))
+ return 1;
+
+ log = reflog_exists(oldrefname);
+ transaction = transaction_begin(&err);
+ if (!transaction)
+ goto fail;
+
+ if (strcmp(oldrefname, newrefname)) {
+ if (log && transaction_update_reflog(transaction, newrefname,
+ sha1, sha1, &ci, NULL,
+ REFLOG_TRUNCATE, &err))
+ goto fail;
+ cb.transaction = transaction;
+ cb.refname = newrefname;
+ cb.err = &err;
+ if (log && for_each_reflog_ent(oldrefname, rename_reflog_ent,
+ &cb))
+ goto fail;
+
+ if (transaction_delete_sha1(transaction, oldrefname, sha1,
+ REF_NODEREF,
+ 1, NULL, &err))
+ goto fail;
+ }
+ if (transaction_update_sha1(transaction, newrefname, sha1,
+ NULL, 0, 0, NULL, &err))
+ goto fail;
+ if (log && transaction_update_reflog(transaction, newrefname, sha1,
+ sha1, &ci, logmsg,
+ REFLOG_COMMITTER_INFO_IS_VALID,
+ &err))
+ goto fail;
+ if (transaction_commit(transaction, &err))
+ goto fail;
+ transaction_free(transaction);
+ return 0;
+
+ fail:
+ error("rename_ref failed: %s", err.buf);
+ strbuf_release(&err);
+ transaction_free(transaction);
+ return 1;
+}
diff --git a/refs.c b/refs.c
index faf794c..7d579be 100644
--- a/refs.c
+++ b/refs.c
@@ -2622,98 +2622,6 @@ static int delete_ref_loose(struct ref_lock *lock, int flag, struct strbuf *err)
return 0;
}
-struct rename_reflog_cb {
- struct ref_transaction *transaction;
- const char *refname;
- struct strbuf *err;
-};
-
-static int rename_reflog_ent(unsigned char *osha1, unsigned char *nsha1,
- const char *id, unsigned long timestamp, int tz,
- const char *message, void *cb_data)
-{
- struct rename_reflog_cb *cb = cb_data;
- struct reflog_committer_info ci;
-
- memset(&ci, 0, sizeof(ci));
- ci.id = id;
- ci.timestamp = timestamp;
- ci.tz = tz;
- return transaction_update_reflog(cb->transaction, cb->refname,
- nsha1, osha1, &ci, message, 0,
- cb->err);
-}
-
-int rename_ref(const char *oldrefname, const char *newrefname, const char *logmsg)
-{
- unsigned char sha1[20];
- int flag = 0, log;
- struct ref_transaction *transaction = NULL;
- struct strbuf err = STRBUF_INIT;
- const char *symref = NULL;
- struct rename_reflog_cb cb;
- struct reflog_committer_info ci;
-
- memset(&ci, 0, sizeof(ci));
- ci.committer_info = git_committer_info(0);
-
- symref = resolve_ref_unsafe(oldrefname, sha1,
- RESOLVE_REF_READING, &flag);
- if (flag & REF_ISSYMREF) {
- error("refname %s is a symbolic ref, renaming it is not supported",
- oldrefname);
- return 1;
- }
- if (!symref) {
- error("refname %s not found", oldrefname);
- return 1;
- }
-
- if (!is_refname_available(newrefname, &oldrefname, 1))
- return 1;
-
- log = reflog_exists(oldrefname);
- transaction = transaction_begin(&err);
- if (!transaction)
- goto fail;
-
- if (strcmp(oldrefname, newrefname)) {
- if (log && transaction_update_reflog(transaction, newrefname,
- sha1, sha1, &ci, NULL,
- REFLOG_TRUNCATE, &err))
- goto fail;
- cb.transaction = transaction;
- cb.refname = newrefname;
- cb.err = &err;
- if (log && for_each_reflog_ent(oldrefname, rename_reflog_ent,
- &cb))
- goto fail;
-
- if (transaction_delete_sha1(transaction, oldrefname, sha1,
- REF_NODEREF,
- 1, NULL, &err))
- goto fail;
- }
- if (transaction_update_sha1(transaction, newrefname, sha1,
- NULL, 0, 0, NULL, &err))
- goto fail;
- if (log && transaction_update_reflog(transaction, newrefname, sha1,
- sha1, &ci, logmsg,
- REFLOG_COMMITTER_INFO_IS_VALID,
- &err))
- goto fail;
- if (transaction_commit(transaction, &err))
- goto fail;
- transaction_free(transaction);
- return 0;
-
- fail:
- error("rename_ref failed: %s", err.buf);
- strbuf_release(&err);
- transaction_free(transaction);
- return 1;
-}
-
static int close_ref(struct ref_lock *lock)
{
if (close_lock_file(lock->lk))
--
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 ` Ronnie Sahlberg [this message]
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 ` [PATCH v2 18/23] refs.c: add a backend method structure with transaction functions Ronnie Sahlberg
2014-08-26 21:25 ` 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-6-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 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 NNTP newsgroup(s).