git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: "brian m. carlson" <sandals@crustytoothpaste.net>
To: git@vger.kernel.org
Cc: "Michael Haggerty" <mhagger@alum.mit.edu>,
	"Jonathan Tan" <jonathantanmy@google.com>,
	"Stefan Beller" <sbeller@google.com>, "Jeff King" <peff@peff.net>,
	"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>,
	"Brandon Williams" <bmwill@google.com>
Subject: [PATCH v3 15/53] reflog_expire: convert to struct object_id
Date: Sat,  6 May 2017 22:10:00 +0000	[thread overview]
Message-ID: <20170506221038.296722-16-sandals@crustytoothpaste.net> (raw)
In-Reply-To: <20170506221038.296722-1-sandals@crustytoothpaste.net>

Adjust the callback functions to take struct object_id * instead of
unsigned char *, and modify related static functions accordingly.

Introduce a temporary object_id instance into files_reflog_expire and
copy the SHA-1 value passed in.  This is necessary because the sha1
parameter can come indirectly from get_sha1.  Without the temporary, it
would require much more refactoring to be able to convert this function.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
---
 builtin/reflog.c     | 22 +++++++++++-----------
 refs.h               |  6 +++---
 refs/files-backend.c |  7 +++++--
 3 files changed, 19 insertions(+), 16 deletions(-)

diff --git a/builtin/reflog.c b/builtin/reflog.c
index 747277577..d6718d326 100644
--- a/builtin/reflog.c
+++ b/builtin/reflog.c
@@ -186,13 +186,13 @@ static int commit_is_complete(struct commit *commit)
 	return !is_incomplete;
 }
 
-static int keep_entry(struct commit **it, unsigned char *sha1)
+static int keep_entry(struct commit **it, struct object_id *oid)
 {
 	struct commit *commit;
 
-	if (is_null_sha1(sha1))
+	if (is_null_oid(oid))
 		return 1;
-	commit = lookup_commit_reference_gently(sha1, 1);
+	commit = lookup_commit_reference_gently(oid->hash, 1);
 	if (!commit)
 		return 0;
 
@@ -251,17 +251,17 @@ static void mark_reachable(struct expire_reflog_policy_cb *cb)
 	cb->mark_list = leftover;
 }
 
-static int unreachable(struct expire_reflog_policy_cb *cb, struct commit *commit, unsigned char *sha1)
+static int unreachable(struct expire_reflog_policy_cb *cb, struct commit *commit, struct object_id *oid)
 {
 	/*
 	 * We may or may not have the commit yet - if not, look it
 	 * up using the supplied sha1.
 	 */
 	if (!commit) {
-		if (is_null_sha1(sha1))
+		if (is_null_oid(oid))
 			return 0;
 
-		commit = lookup_commit_reference_gently(sha1, 1);
+		commit = lookup_commit_reference_gently(oid->hash, 1);
 
 		/* Not a commit -- keep it */
 		if (!commit)
@@ -283,7 +283,7 @@ static int unreachable(struct expire_reflog_policy_cb *cb, struct commit *commit
 /*
  * Return true iff the specified reflog entry should be expired.
  */
-static int should_expire_reflog_ent(unsigned char *osha1, unsigned char *nsha1,
+static int should_expire_reflog_ent(struct object_id *ooid, struct object_id *noid,
 				    const char *email, unsigned long timestamp, int tz,
 				    const char *message, void *cb_data)
 {
@@ -295,13 +295,13 @@ static int should_expire_reflog_ent(unsigned char *osha1, unsigned char *nsha1,
 
 	old = new = NULL;
 	if (cb->cmd.stalefix &&
-	    (!keep_entry(&old, osha1) || !keep_entry(&new, nsha1)))
+	    (!keep_entry(&old, ooid) || !keep_entry(&new, noid)))
 		return 1;
 
 	if (timestamp < cb->cmd.expire_unreachable) {
 		if (cb->unreachable_expire_kind == UE_ALWAYS)
 			return 1;
-		if (unreachable(cb, old, osha1) || unreachable(cb, new, nsha1))
+		if (unreachable(cb, old, ooid) || unreachable(cb, new, noid))
 			return 1;
 	}
 
@@ -326,7 +326,7 @@ static int push_tip_to_list(const char *refname, const struct object_id *oid,
 }
 
 static void reflog_expiry_prepare(const char *refname,
-				  const unsigned char *sha1,
+				  const struct object_id *oid,
 				  void *cb_data)
 {
 	struct expire_reflog_policy_cb *cb = cb_data;
@@ -335,7 +335,7 @@ static void reflog_expiry_prepare(const char *refname,
 		cb->tip_commit = NULL;
 		cb->unreachable_expire_kind = UE_HEAD;
 	} else {
-		cb->tip_commit = lookup_commit_reference_gently(sha1, 1);
+		cb->tip_commit = lookup_commit_reference_gently(oid->hash, 1);
 		if (!cb->tip_commit)
 			cb->unreachable_expire_kind = UE_ALWAYS;
 		else
diff --git a/refs.h b/refs.h
index 07cf4cd41..a22f696dd 100644
--- a/refs.h
+++ b/refs.h
@@ -611,10 +611,10 @@ enum expire_reflog_flags {
  *     unlocked again.
  */
 typedef void reflog_expiry_prepare_fn(const char *refname,
-				      const unsigned char *sha1,
+				      const struct object_id *oid,
 				      void *cb_data);
-typedef int reflog_expiry_should_prune_fn(unsigned char *osha1,
-					  unsigned char *nsha1,
+typedef int reflog_expiry_should_prune_fn(struct object_id *ooid,
+					  struct object_id *noid,
 					  const char *email,
 					  unsigned long timestamp, int tz,
 					  const char *message, void *cb_data);
diff --git a/refs/files-backend.c b/refs/files-backend.c
index 83ea080e0..298a838c5 100644
--- a/refs/files-backend.c
+++ b/refs/files-backend.c
@@ -3207,7 +3207,7 @@ static int expire_reflog_ent(struct object_id *ooid, struct object_id *noid,
 	if (cb->flags & EXPIRE_REFLOGS_REWRITE)
 		ooid = &cb->last_kept_oid;
 
-	if ((*cb->should_prune_fn)(ooid->hash, noid->hash, email, timestamp, tz,
+	if ((*cb->should_prune_fn)(ooid, noid, email, timestamp, tz,
 				   message, policy_cb)) {
 		if (!cb->newlog)
 			printf("would prune %s", message);
@@ -3244,6 +3244,7 @@ static int files_reflog_expire(struct ref_store *ref_store,
 	int status = 0;
 	int type;
 	struct strbuf err = STRBUF_INIT;
+	struct object_id oid;
 
 	memset(&cb, 0, sizeof(cb));
 	cb.flags = flags;
@@ -3293,7 +3294,9 @@ static int files_reflog_expire(struct ref_store *ref_store,
 		}
 	}
 
-	(*prepare_fn)(refname, sha1, cb.policy_cb);
+	hashcpy(oid.hash, sha1);
+
+	(*prepare_fn)(refname, &oid, cb.policy_cb);
 	refs_for_each_reflog_ent(ref_store, refname, expire_reflog_ent, &cb);
 	(*cleanup_fn)(cb.policy_cb);
 

  parent reply	other threads:[~2017-05-06 22:11 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-06 22:09 [PATCH v3 00/53] object_id part 8 brian m. carlson
2017-05-06 22:09 ` [PATCH v3 01/53] fetch-pack: convert to struct object_id brian m. carlson
2017-05-06 22:09 ` [PATCH v3 02/53] Clean up outstanding object_id transforms brian m. carlson
2017-05-06 22:09 ` [PATCH v3 03/53] Convert struct cache_tree to use struct object_id brian m. carlson
2017-05-06 22:09 ` [PATCH v3 04/53] builtin/name-rev: convert to " brian m. carlson
2017-05-06 22:09 ` [PATCH v3 05/53] builtin/prune: " brian m. carlson
2017-05-06 22:09 ` [PATCH v3 06/53] bundle: " brian m. carlson
2017-05-06 22:09 ` [PATCH v3 07/53] branch: " brian m. carlson
2017-05-06 22:09 ` [PATCH v3 08/53] builtin/blame: convert static function " brian m. carlson
2017-05-06 22:09 ` [PATCH v3 09/53] builtin/rev-parse: convert " brian m. carlson
2017-05-06 22:09 ` [PATCH v3 10/53] fast-import: convert internal structs " brian m. carlson
2017-05-06 22:09 ` [PATCH v3 11/53] fast-import: convert " brian m. carlson
2017-05-06 22:09 ` [PATCH v3 12/53] submodule: convert merge_submodule to use " brian m. carlson
2017-05-06 22:09 ` [PATCH v3 13/53] notes-cache: convert to " brian m. carlson
2017-05-06 22:09 ` [PATCH v3 14/53] parse-options-cb: " brian m. carlson
2017-05-06 22:10 ` brian m. carlson [this message]
2017-05-06 22:10 ` [PATCH v3 16/53] builtin/verify-commit: " brian m. carlson
2017-05-06 22:10 ` [PATCH v3 17/53] tag: convert parse_tag_buffer " brian m. carlson
2017-05-06 22:10 ` [PATCH v3 18/53] http-push: convert some static functions " brian m. carlson
2017-05-06 22:10 ` [PATCH v3 19/53] notes-utils: convert internals " brian m. carlson
2017-05-06 22:10 ` [PATCH v3 20/53] revision: convert prepare_show_merge " brian m. carlson
2017-05-06 22:10 ` [PATCH v3 21/53] shallow: convert shallow registration functions to object_id brian m. carlson
2017-05-06 22:10 ` [PATCH v3 22/53] sequencer: convert some functions to struct object_id brian m. carlson
2017-05-06 22:10 ` [PATCH v3 23/53] builtin/tag: convert " brian m. carlson
2017-05-06 22:10 ` [PATCH v3 24/53] Convert remaining callers of lookup_commit_reference* to object_id brian m. carlson
2017-05-06 22:10 ` [PATCH v3 25/53] Convert lookup_commit* to struct object_id brian m. carlson
2017-05-06 22:10 ` [PATCH v3 26/53] pack: convert struct pack_idx_entry " brian m. carlson
2017-05-06 22:10 ` [PATCH v3 27/53] builtin/unpack-objects: convert " brian m. carlson
2017-05-06 22:10 ` [PATCH v3 28/53] Convert remaining callers of lookup_blob to object_id brian m. carlson
2017-05-06 22:10 ` [PATCH v3 29/53] Convert lookup_blob to struct object_id brian m. carlson
2017-05-06 22:10 ` [PATCH v3 30/53] tree: convert read_tree_1 to use struct object_id internally brian m. carlson
2017-05-06 22:10 ` [PATCH v3 31/53] builtin/reflog: convert tree_is_complete to take struct object_id brian m. carlson
2017-05-06 22:10 ` [PATCH v3 32/53] Convert lookup_tree to " brian m. carlson
2017-05-06 22:10 ` [PATCH v3 33/53] log-tree: convert " brian m. carlson
2017-05-06 22:10 ` [PATCH v3 34/53] Convert lookup_tag " brian m. carlson
2017-05-06 22:10 ` [PATCH v3 35/53] Convert the verify_pack callback " brian m. carlson
2017-05-06 22:10 ` [PATCH v3 36/53] Convert struct ref_array_item " brian m. carlson
2017-05-06 22:10 ` [PATCH v3 37/53] ref-filter: convert some static functions " brian m. carlson
2017-05-06 22:10 ` [PATCH v3 38/53] refs: convert struct ref_update to use " brian m. carlson
2017-05-06 22:10 ` [PATCH v3 39/53] refs/files-backend: convert many internals to " brian m. carlson
2017-05-06 22:10 ` [PATCH v3 40/53] http-push: convert process_ls_object and descendants to object_id brian m. carlson
2017-05-06 22:10 ` [PATCH v3 41/53] revision: rename add_pending_sha1 to add_pending_oid brian m. carlson
2017-05-06 22:10 ` [PATCH v3 42/53] revision: convert remaining parse_object callers to object_id brian m. carlson
2017-05-06 22:10 ` [PATCH v3 43/53] upload-pack: " brian m. carlson
2017-05-06 22:10 ` [PATCH v3 44/53] sha1_name: convert internals of peel_onion " brian m. carlson
2017-05-06 22:10 ` [PATCH v3 45/53] builtin/read-tree: convert to struct object_id brian m. carlson
2017-05-06 22:10 ` [PATCH v3 46/53] builtin/ls-files: convert overlay_tree_on_cache to object_id brian m. carlson
2017-05-06 22:10 ` [PATCH v3 47/53] sequencer: convert fast_forward_to to struct object_id brian m. carlson
2017-05-06 22:10 ` [PATCH v3 48/53] merge: convert checkout_fast_forward " brian m. carlson
2017-05-06 22:10 ` [PATCH v3 49/53] builtin/ls-tree: convert " brian m. carlson
2017-05-06 22:10 ` [PATCH v3 50/53] diff-lib: convert do_diff_cache " brian m. carlson
2017-05-06 22:10 ` [PATCH v3 51/53] sequencer: convert do_recursive_merge " brian m. carlson
2017-05-06 22:10 ` [PATCH v3 52/53] tree: convert parse_tree_indirect " brian m. carlson
2017-05-06 22:10 ` [PATCH v3 53/53] object: convert parse_object* to take " brian m. carlson
2017-05-08 21:53 ` [PATCH v3 00/53] object_id part 8 Jonathan Tan
2017-05-09 22:13 ` Brandon Williams

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=20170506221038.296722-16-sandals@crustytoothpaste.net \
    --to=sandals@crustytoothpaste.net \
    --cc=bmwill@google.com \
    --cc=git@vger.kernel.org \
    --cc=jonathantanmy@google.com \
    --cc=mhagger@alum.mit.edu \
    --cc=pclouds@gmail.com \
    --cc=peff@peff.net \
    --cc=sbeller@google.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).