All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Jaydeep Das via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Eric Sunshine <sunshine@sunshineco.com>,
	Jaydeep Das <jaydeepjd.8914@gmail.com>,
	Jaydeep Das <jaydeepjd.8914@gmail.com>
Subject: [PATCH v4] gpg-interface: add function for converting trust level to string
Date: Mon, 11 Jul 2022 05:00:50 +0000	[thread overview]
Message-ID: <pull.1281.v4.git.1657515650587.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.1281.v3.git.1657341817595.gitgitgadget@gmail.com>

From: Jaydeep Das <jaydeepjd.8914@gmail.com>

Add new helper function `gpg_trust_level_to_str()` which will
convert a given member of `enum signature_trust_level` to its
corresponding string (in lowercase). For example, `TRUST_ULTIMATE`
will yield the string "ultimate".

This will abstract out some code in `pretty.c` relating to gpg
signature trust levels.

Mentored-by: Christian Couder <chriscool@tuxfamily.org>
Mentored-by: Hariom Verma <hariom18599@gmail.com>
Signed-off-by: Jaydeep Das <jaydeepjd.8914@gmail.com>
---
    gpg-interface: add function for converting trust level to string
    
    Add new helper function gpg_trust_level_to_str() which will convert a
    given member of enum signature_trust_level to its corresponding string
    in lowercase. For example, TRUST_ULTIMATE will yield the string
    "ultimate".
    
    This will abstract out some code in pretty.c relating to gpg signature
    trust levels.
    
    Changes since v1:
    
     * gpg_trust_level_to_str() now returns the string in lowercase.
    
    Changes since v2:
    
     * Updated docs.
    
    Changes since v3:
    
     * gpg_trust_level_to_str() now returns a static string. So the caller
       does not have to worry about free()ing it.
     * Updated pretty.c and docs accordingly.
    
    Mentored-by: Christian Couder chriscool@tuxfamily.org Mentored-by:
    Hariom Verma hariom18599@gmail.com Signed-off-by: Jaydeep Das
    jaydeepjd.8914@gmail.com

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1281%2FJDeepD%2Fgpg-wrap-v4
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1281/JDeepD/gpg-wrap-v4
Pull-Request: https://github.com/gitgitgadget/git/pull/1281

Range-diff vs v3:

 1:  933d6caa916 ! 1:  7692b83821d gpg-interface: add function for converting trust level to string
     @@ gpg-interface.c: static struct {
       	{ 0, "TRUST_", GPG_STATUS_TRUST_LEVEL },
       };
       
     +-static struct {
      +/* Keep the order same as enum signature_trust_level */
     - static struct {
     ++static struct sigcheck_gpg_trust_level {
       	const char *key;
     ++	const char *display_key;
       	enum signature_trust_level value;
     + } sigcheck_gpg_trust_level[] = {
     +-	{ "UNDEFINED", TRUST_UNDEFINED },
     +-	{ "NEVER", TRUST_NEVER },
     +-	{ "MARGINAL", TRUST_MARGINAL },
     +-	{ "FULLY", TRUST_FULLY },
     +-	{ "ULTIMATE", TRUST_ULTIMATE },
     ++	{ "UNDEFINED", "undefined", TRUST_UNDEFINED },
     ++	{ "NEVER", "never", TRUST_NEVER },
     ++	{ "MARGINAL", "marginal", TRUST_MARGINAL },
     ++	{ "FULLY", "fully", TRUST_FULLY },
     ++	{ "ULTIMATE", "ultimate", TRUST_ULTIMATE },
     + };
     + 
     + static void replace_cstring(char **field, const char *line, const char *next)
      @@ gpg-interface.c: const char *get_signing_key(void)
       	return git_committer_info(IDENT_STRICT | IDENT_NO_DATE);
       }
       
     -+char *gpg_trust_level_to_str(enum signature_trust_level level){
     -+	if (level < TRUST_UNDEFINED || level > TRUST_ULTIMATE)
     -+		return NULL;
     -+	return xstrdup_tolower(sigcheck_gpg_trust_level[level].key);
     ++const char *gpg_trust_level_to_str(enum signature_trust_level level)
     ++{
     ++	struct sigcheck_gpg_trust_level *trust;
     ++
     ++	if (level < 0 || level >= ARRAY_SIZE(sigcheck_gpg_trust_level))
     ++		BUG("invalid trust level requested %d", level);
     ++
     ++	trust = &sigcheck_gpg_trust_level[level];
     ++	if (trust->value != level)
     ++		BUG("sigcheck_gpg_trust_level[] unsorted");
     ++
     ++	return sigcheck_gpg_trust_level[level].display_key;
      +}
      +
       int sign_buffer(struct strbuf *buffer, struct strbuf *signature, const char *signing_key)
     @@ gpg-interface.h: size_t parse_signed_buffer(const char *buf, size_t size);
      +/*
      + * Returns corresponding string in lowercase for a given member of
      + * enum signature_trust_level. For example, `TRUST_ULTIMATE` will
     -+ * return "ultimate". Since it uses xstrdup_tolower(), which uses
     -+ * xmallocz(), the caller has to free up the memory for returned string
     -+ * after usage.
     ++ * return "ultimate".
      + */
     -+char *gpg_trust_level_to_str(enum signature_trust_level level);
     ++const char *gpg_trust_level_to_str(enum signature_trust_level level);
      +
       int git_gpg_config(const char *, const char *, void *);
       void set_signing_key(const char *);
       const char *get_signing_key(void);
      
       ## pretty.c ##
     -@@ pretty.c: static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
     - 	const char *msg = c->message;
     - 	struct commit_list *p;
     - 	const char *arg, *eol;
     -+	char *sig_str;
     - 	size_t res;
     - 	char **slot;
     - 
      @@ pretty.c: static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
       				strbuf_addstr(sb, c->signature_check.primary_key_fingerprint);
       			break;
     @@ pretty.c: static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
      -				strbuf_addstr(sb, "ultimate");
      -				break;
      -			}
     -+			sig_str = gpg_trust_level_to_str(c->signature_check.trust_level);
     -+			if (sig_str)
     -+				strbuf_addstr(sb, sig_str);
     -+			free(sig_str);
     ++			strbuf_addstr(sb, gpg_trust_level_to_str(c->signature_check.trust_level));
       			break;
       		default:
       			return 0;


 gpg-interface.c | 28 ++++++++++++++++++++++------
 gpg-interface.h |  8 ++++++++
 pretty.c        | 18 +-----------------
 3 files changed, 31 insertions(+), 23 deletions(-)

diff --git a/gpg-interface.c b/gpg-interface.c
index 947b58ad4da..6dff2414603 100644
--- a/gpg-interface.c
+++ b/gpg-interface.c
@@ -165,15 +165,17 @@ static struct {
 	{ 0, "TRUST_", GPG_STATUS_TRUST_LEVEL },
 };
 
-static struct {
+/* Keep the order same as enum signature_trust_level */
+static struct sigcheck_gpg_trust_level {
 	const char *key;
+	const char *display_key;
 	enum signature_trust_level value;
 } sigcheck_gpg_trust_level[] = {
-	{ "UNDEFINED", TRUST_UNDEFINED },
-	{ "NEVER", TRUST_NEVER },
-	{ "MARGINAL", TRUST_MARGINAL },
-	{ "FULLY", TRUST_FULLY },
-	{ "ULTIMATE", TRUST_ULTIMATE },
+	{ "UNDEFINED", "undefined", TRUST_UNDEFINED },
+	{ "NEVER", "never", TRUST_NEVER },
+	{ "MARGINAL", "marginal", TRUST_MARGINAL },
+	{ "FULLY", "fully", TRUST_FULLY },
+	{ "ULTIMATE", "ultimate", TRUST_ULTIMATE },
 };
 
 static void replace_cstring(char **field, const char *line, const char *next)
@@ -905,6 +907,20 @@ const char *get_signing_key(void)
 	return git_committer_info(IDENT_STRICT | IDENT_NO_DATE);
 }
 
+const char *gpg_trust_level_to_str(enum signature_trust_level level)
+{
+	struct sigcheck_gpg_trust_level *trust;
+
+	if (level < 0 || level >= ARRAY_SIZE(sigcheck_gpg_trust_level))
+		BUG("invalid trust level requested %d", level);
+
+	trust = &sigcheck_gpg_trust_level[level];
+	if (trust->value != level)
+		BUG("sigcheck_gpg_trust_level[] unsorted");
+
+	return sigcheck_gpg_trust_level[level].display_key;
+}
+
 int sign_buffer(struct strbuf *buffer, struct strbuf *signature, const char *signing_key)
 {
 	return use_format->sign_buffer(buffer, signature, signing_key);
diff --git a/gpg-interface.h b/gpg-interface.h
index b30cbdcd3da..8a9ef41779e 100644
--- a/gpg-interface.h
+++ b/gpg-interface.h
@@ -71,6 +71,14 @@ size_t parse_signed_buffer(const char *buf, size_t size);
 int sign_buffer(struct strbuf *buffer, struct strbuf *signature,
 		const char *signing_key);
 
+
+/*
+ * Returns corresponding string in lowercase for a given member of
+ * enum signature_trust_level. For example, `TRUST_ULTIMATE` will
+ * return "ultimate".
+ */
+const char *gpg_trust_level_to_str(enum signature_trust_level level);
+
 int git_gpg_config(const char *, const char *, void *);
 void set_signing_key(const char *);
 const char *get_signing_key(void);
diff --git a/pretty.c b/pretty.c
index ee6114e3f0a..6d819103fbf 100644
--- a/pretty.c
+++ b/pretty.c
@@ -1575,23 +1575,7 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
 				strbuf_addstr(sb, c->signature_check.primary_key_fingerprint);
 			break;
 		case 'T':
-			switch (c->signature_check.trust_level) {
-			case TRUST_UNDEFINED:
-				strbuf_addstr(sb, "undefined");
-				break;
-			case TRUST_NEVER:
-				strbuf_addstr(sb, "never");
-				break;
-			case TRUST_MARGINAL:
-				strbuf_addstr(sb, "marginal");
-				break;
-			case TRUST_FULLY:
-				strbuf_addstr(sb, "fully");
-				break;
-			case TRUST_ULTIMATE:
-				strbuf_addstr(sb, "ultimate");
-				break;
-			}
+			strbuf_addstr(sb, gpg_trust_level_to_str(c->signature_check.trust_level));
 			break;
 		default:
 			return 0;

base-commit: 30cc8d0f147546d4dd77bf497f4dec51e7265bd8
-- 
gitgitgadget

  reply	other threads:[~2022-07-11  5:00 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-07 13:57 [PATCH] gpg-interface: add function for converting trust level to string Jaydeep Das via GitGitGadget
2022-07-07 18:18 ` Junio C Hamano
2022-07-08 11:24 ` [PATCH v2] " Jaydeep Das via GitGitGadget
2022-07-09  0:58   ` Eric Sunshine
2022-07-09  3:51     ` jaydeepjd.8914
2022-07-09 20:52     ` Junio C Hamano
2022-07-10  5:44       ` Eric Sunshine
2022-07-10  5:48         ` Junio C Hamano
2022-07-10  6:21           ` Eric Sunshine
2022-07-11  3:51         ` Jaydeep Das
2022-07-09  4:43   ` [PATCH v3] " Jaydeep Das via GitGitGadget
2022-07-11  5:00     ` Jaydeep Das via GitGitGadget [this message]
2022-07-11  5:12       ` [PATCH v4] " Junio C Hamano

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=pull.1281.v4.git.1657515650587.gitgitgadget@gmail.com \
    --to=gitgitgadget@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=jaydeepjd.8914@gmail.com \
    --cc=sunshine@sunshineco.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.
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.